*@Z&mJw MZNone typeClass quantityVectorAUmodv1Core GameplaySystemEngineOffsetRadiusheightsecondaryPositionsEquipmentClassesprimaryPosition entryClass PositionTeamAllowedWeapons objectTypeQuantityGrenadesAllowedGrenadesattachmentPointobjectInstance occupantunoccupiedAnimationoldOccupantWeaponoccupantRelativeRotationoccupiedAnimationwantsToGetOutenterAnimationoccupantConnectionoccupantRelativeLocationoccupantControllerStatefirstPersonWeaponLocationtoBePossessedoccupantAnimation hideOccupantlookAtInheritPitchthirdPersonCameraManifestYPositionManifestXPositionbNotLabelledInManifestfirstPersonCameraLocationRotatorUserexitAnimationHealthTypePostNetBeginPlayburningDamagerPerSecond bProjTarget LifeSpanGetOverlayMaterial ReplaceActor ProjFXClassfallDamageModifiercompTankRoundcompTankMortar compTankcompSpinfusorProjectilecompPlayerControllercompPlayerCharacterControllerPostTakeDamagecompGrapplerRope GravityScalecompGrapplerProjectile ReplaceWithbCanBeDamaged MovementcompCharactercompBurningArea LightColorEntriesgoals abilities CollisioncompBurnerProjectilecompArmorMediumcompArmorLightcompArmorHeavyaumodVehicleClasses WeaponBurnerWeaponSpinfusorWeaponGrapplerForceWeaponVehicleTankWeaponEnergyBladeProjectileMortardamageComponentsboostStrengthtreadVehicleGravityScale dropVelocityweaponstreadGainFactorthrottleToVelocityFactor treadLengthburningAreaClass Pannel00 Pannel01OnMovementCollisionDamage pannel02exits Character flipTriggers PlayEffectpickupCarryableprojectileClassprojectileVelocityMutateSpawnCombatRoleClasssimulatedAttach DamageTagKarma Lighting positionsPlayerVehicleTurretingradiusDamageMomentumTribesPlayerDrivingcanArmorOccupyradiusDamageSize DestroyedTick PreBeginPlayropeGlowMaterialRoleClassPackageDynamicLoadObject ReturnValue Velocity TextBufferObjectEnum FunctionStructRagdoll RoleData damageAmt LocationCiProcessedText ScriptTextPlayerCharacterControllerName energyUsageActorMPCarryableThrower ammoUsageroundsPerSecondprojectileInheritedVelFactor aimClass StrProperty maxChargeStructPropertyArrayProperty TeamInfo chargeScale MPCarryableWeaponVehicleMPFlag EnergyBlade GrapplerBurner ScreenShader armorClassFX_Ball_AliveFX ropeClasspeakChargeMaxHoldTime releaseDelay chargeRateAnimationChannelArmorClientSideCharacterMultiplayerCharacter CombatRoleAimArcWeaponsChargeUpWeaponTimeChargeUpWeaponVehicleSpawnPoint GrapplerRopeGrapplerProjectile BurningAreaMovementCollisionDamageTypeClassProperty NamePropertyEDirectionTypemovementDamageTypeClasscollisionDamageTypeEClientPainType pseudoWeaponblockMovementDamagelastMovementDamageTimeAnimationChannelIndexVehiclePositionType TouchingObjectPropertyFloatProperty BoolPropertycombatRoleData VehiclesDynTankPannelBDynTankPannelADynTankPannelC IntPropertyProjectileMortarTankProjectileBurnerIndex WeaponMortarOther ArmorHeavyDeltaWeaponHandGrenadeEventInstigatorWeaponRocketPodTouchLocationProjectileBurnerBurningAreaWeaponChaingunWeaponGrenadeLauncherWeaponSniperRifleWeaponBucklerDamageWeaponBlasterProjectileSpinfusor VehicleTank HitLocation ByteProperty MomentumprojectileFactorSource TimeSeconds VehicleClassDefaultPlayerClassName Projectile TakeDamage MaterialLevel GameInfoEmitter DamageType LevelInfoMutatorVSPhookShaderPlayerControllerprojfxPawn bLastHookRange%GIB9Aa]%N/pDS/p]{ Health=25.000000 ProjFXClass=Class'FX.FX_Ball_Alive' burningDamagerPerSecond=55.000000 bCanBeDamaged=True bProjTarget=True -..\AUmodv1\Classes\compGrapplerProjectile.uc/$A72$\BD3; X(,9ZSSd %N/pDS/p9{ LifeSpan=10.000000 GravityScale=1.200000 $..\AUmodv1\Classes\compTankRound.uc4$ AA$?FN@L p%N/pDS/p3{ ropeGlowMaterial=Shader'FX.ScreenShader' '..\AUmodv1\Classes\compGrapplerRope.uc|M.G-AJIjKԛKԛA L/pDS/p{ &..\AUmodv1\Classes\compBurningArea.uc><<S| 8  %N/pDS/pO{ radiusDamageSize=650.000000 radiusDamageMomentum=255000.000000 ...\AUmodv1\Classes\compSpinfusorProjectile.ucx$"Du$yH8U;TB Y2m|\|\|\R%N/pDS/pX"{ boostStrength=16000000.000000 treadLength=230.000000 throttleToVelocityFactor=35.000000 treadGainFactor=0.090000 treadVehicleGravityScale=2.000000 positions(0)=(hideOccupant=True,thirdPersonCamera=True,occupantControllerState="TribesPlayerDriving",ManifestXPosition=40,ManifestYPosition=30) positions(1)=(Type=VP_GUNNER,hideOccupant=True,occupantControllerState="PlayerVehicleTurreting",ManifestXPosition=40,ManifestYPosition=50) Entries(0)=(Radius=200.000000,Height=125.000000,Offset=(X=250.000000),secondaryPositions=(VP_GUNNER)) Entries(1)=(Radius=200.000000,Height=125.000000,Offset=(Z=200.000000),primaryPosition=VP_GUNNER,secondaryPositions=(VP_DRIVER)) Entries(2)=(Radius=200.000000,Height=125.000000,Offset=(Y=220.000000),secondaryPositions=(VP_GUNNER)) Entries(3)=(Radius=200.000000,Height=125.000000,Offset=(Y=-220.000000),secondaryPositions=(VP_GUNNER)) Entries(4)=(Radius=200.000000,Height=125.000000,Offset=(X=-250.000000),secondaryPositions=(VP_GUNNER)) flipTriggers(0)=(Radius=600.000000,Height=600.000000) exits(0)=(Offset=(Y=300.000000,Z=100.000000)) exits(1)=(Offset=(Y=-300.000000,Z=100.000000)) exits(2)=(Offset=(Z=300.000000),Position=VP_NULL) exits(3)=(Offset=(Z=-300.000000),Position=VP_NULL) damageComponents(0)=(objectType=Class'Vehicles.DynTankPannelA',attachmentPoint="Pannel00") damageComponents(1)=(objectType=Class'Vehicles.DynTankPannelB',attachmentPoint="Pannel01") damageComponents(2)=(objectType=Class'Vehicles.DynTankPannelC',attachmentPoint="pannel02") goals(0)=Class'VehicleClasses.VehicleTank.AI_GunnerGuardGoal' abilities(0)=Class'VehicleClasses.VehicleTank.AI_VehicleExpellOccupant' abilities(1)=Class'VehicleClasses.VehicleTank.AI_VehicleMoveTo' abilities(2)=Class'VehicleClasses.VehicleTank.AI_VehiclePatrol' abilities(3)=Class'VehicleClasses.VehicleTank.AI_VehicleFollow' abilities(4)=Class'VehicleClasses.VehicleTank.AI_VehiclePursue' abilities(5)=Class'VehicleClasses.VehicleTank.AI_GunnerFireAt' abilities(6)=Class'VehicleClasses.VehicleTank.AI_GunnerGuard' Health=600.000000 ..\AUmodv1\Classes\compTank.uc[$$tKa$fC`$ B_$Q=\$@sY0S%'&S#!v+:":. ::,)"(("*S$0S%'S&S#!t+:":. ::,)"(("2*S$IY $HC $B :zCzCC  $HC $B :zHC  $HC $B :\C  $HC $B :\  $HC $B :z iY $D $D :gYM :CB :B :C :ZY%cdfJKY/$D!MK$͑# L/p~P/p2{ burningAreaClass=Class'compBurningArea' +..\AUmodv1\Classes\compBurnerProjectile.ucb{ /a0 hgw*aumodv1.compCharacteraumodv1.compCharacter10/a0 w*r  10 Pclass compBurnerProjectile extends EquipmentClasses.ProjectileBurner; X1class aumod extends Gameplay.Mutator; function preBeginPlay() { local Gameplay.GameInfo C; local Gameplay.VehicleSpawnPoint VSP; foreach AllActors(class'Gameplay.GameInfo', C) if (C != None) { C.Default.DefaultPlayerClassName = "aumodv1.compCharacter"; C.DefaultPlayerClassName = "aumodv1.compCharacter"; } foreach AllActors(class'Gameplay.VehicleSpawnPoint', VSP) { if (VSP != None && VSP.vehicleClass == class'VehicleClasses.VehicleTank') { VSP.vehicleClass = class'aumodv1.compTank'; } } } function Actor ReplaceActor(Actor Other) { if(Other.IsA('ProjectileMortar')) { ProjectileMortar(Other).LifeSpan = 11; return Other; } if(Other.IsA('Character')) { Other.Destroy(); return ReplaceWith(Other, "aumodv1.compCharacter"); } if(Other.IsA('WeaponGrappler')) { WeaponGrappler(Other).ropeClass = class'compGrapplerRope'; WeaponGrappler(Other).projectileClass = class'compGrapplerProjectile'; return Other; } if(Other.IsA('WeaponSpinfusor')) { WeaponSpinfusor(Other).ProjectileClass = class'compSpinfusorProjectile'; WeaponSpinfusor(Other).ProjectileInheritedVelFactor = 0.75; WeaponSpinfusor(Other).ProjectileVelocity = 5300; return Other; } if(Other.IsA('WeaponEnergyBlade')) { WeaponEnergyBlade(Other).roundsPerSecond = 0.8000; WeaponEnergyBlade(Other).Range = 600; WeaponEnergyBlade(Other).damageAmt = 75; return Other; } if(Other.IsA('WeaponBurner')) { WeaponBurner(Other).ProjectileClass = class'compBurnerProjectile'; WeaponBurner(Other).energyUsage = 12; WeaponBurner(Other).ProjectileInheritedVelFactor = 0.5; return Other; } if(Other.IsA('WeaponVehicleTank')) { WeaponVehicleTank(Other).roundsPerSecond = 0.4; WeaponVehicleTank(Other).aimClass = class'AimArcWeapons'; WeaponVehicleTank(Other).projectileClass = class'compTankRound'; WeaponVehicleTank(Other).projectileVelocity = 6000; WeaponVehicleTank(Other).ammoUsage = 0; return Other; } return Other; } function string MutateSpawnCombatRoleClass(Character c) { c.team().combatRoleData[0].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("aumodv1.compArmorLight", class'class')).default.AllowedWeapons; c.team().combatRoleData[1].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("aumodv1.compArmorMedium", class'class')).default.AllowedWeapons; c.team().combatRoleData[2].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("aumodv1.compArmorHeavy", class'class')).default.AllowedWeapons; }  63a/!Y.0Ava/!haCaumodv1.compCharactera/!U. . 'a/!T. .@?.Ea/!X.L?.X.,Ka/!S. .@A.?a/!W.>. . .E.% Hclass compArmorMedium extends Gameplay.Armor; # nkB -6% aumodv1.compArmorLight 6& aumodv1.compArmorMedium 6, aumodv1.compArmorHeavy  $N+2'iL/p~P/pK { 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',quantity=25) AllowedWeapons(8)=(typeClass=Class'EquipmentClasses.WeaponChaingun',quantity=200) AllowedGrenades=(typeClass=Class'EquipmentClasses.WeaponHandGrenade',quantity=5) &..\AUmodv1\Classes\compArmorMedium.ucY\ """""H""""Z "@Gclass compArmorHeavy extends Gameplay.Armor; Gclass compArmorLight extends Gameplay.Armor; Hclass compArmorMedium extends Gameplay.Armor; Oclass compTankRound extends EquipmentClasses.ProjectileMortarTank; Fclass compBurningArea extends EquipmentClasses.ProjectileBurnerBurningArea; simulated function Tick(float Delta) { local Actor hook; local int i; for (i = 0; i < Touching.Length; ++i) { if (!Touching[i].bProjTarget) continue; hook = compGrapplerProjectile(Touching[i]); if (hook != None) { hook.TakeDamage(compGrapplerProjectile(hook).burningDamagerPerSecond * Delta, None, Location, Velocity, None); } } super.Tick(Delta); }  z %74-.w*,. **  Oclass compTankMortar extends EquipmentClasses.WeaponVehicleTank; Gclass compArmorLight extends Gameplay.Armor; 0O*21NiL/p~P/pP { 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',quantity=20) AllowedWeapons(8)=(typeClass=Class'EquipmentClasses.WeaponChaingun',quantity=150) AllowedGrenades=(typeClass=Class'EquipmentClasses.WeaponHandGrenade',quantity=5) %..\AUmodv1\Classes\compArmorLight.ucY\ """ " "*""""Z "HKclass compCharacter extends Gameplay.MultiplayerCharacter; var float fallDamageModifier; simulated event OnMovementCollisionDamage(float damage) { local class collisionDamageType; damage *= fallDamageModifier; if (blockMovementDamage) return; if (level.timeSecondsL=?D?9?,@@ E class compTank extends VehicleClasses.VehicleTank; //This is where compmod decides what class can pilot each vehicle. Not clean...but there is no nice way to edit the armorclasses allowed vehicles // Returns true if the armour of the specified character can occupy the specified position. simulated function bool canArmorOccupy(VehiclePositionType position, Character character) { if (character.armorClass == None) { warn(character.name $ "'s armor class is none"); return true; } //else if (position == VP_DRIVER) // return canArmourBeDriver(character.armorClass); //else // return canArmourBePassenger(character.armorClass); if(character.ArmorClass == class'EquipmentClasses.ArmorHeavy') return false; else return true; } nclass compGrapplerProjectile extends Gameplay.GrapplerProjectile; var float Health; var class ProjFXClass; var Emitter projfx; var float burningDamagerPerSecond; var bool bLastHook; var Grappler source; simulated function PostNetBeginPlay() { super.PostNetBeginPlay(); } simulated function Destroyed() { if(projfx!=none) { } Super.Destroyed(); } function PostTakeDamage(float Damage, Engine.Pawn EventInstigator, vector HitLocation, vector Momentum, class DamageType, optional float projectileFactor) { log(health); Health -= Damage; log(health); if(Health <= 0) Destroy(); Super.PostTakeDamage(Damage, EventInstigator, HitLocation, Momentum, DamageType, projectileFactor); } simulated function simulatedAttach(Actor Other, vector TouchLocation) { Super.simulatedAttach(Other, TouchLocation); SetCollision(True, True, True); } X1class aumod extends Gameplay.Mutator; function preBeginPlay() { local Gameplay.GameInfo C; local Gameplay.VehicleSpawnPoint VSP; foreach AllActors(class'Gameplay.GameInfo', C) if (C != None) { C.Default.DefaultPlayerClassName = "aumodv1.compCharacter"; C.DefaultPlayerClassName = "aumodv1.compCharacter"; } foreach AllActors(class'Gameplay.VehicleSpawnPoint', VSP) { if (VSP != None && VSP.vehicleClass == class'VehicleClasses.VehicleTank') { VSP.vehicleClass = class'aumodv1.compTank'; } } } function Actor ReplaceActor(Actor Other) { //replace ammotypes first for speed if(Other.IsA('ProjectileMortar')) { ProjectileMortar(Other).LifeSpan = 11; //was 8 return Other; } //replace character if(Other.IsA('Character')) { Other.Destroy(); return ReplaceWith(Other, "aumodv1.compCharacter"); } //limit ammo for grappler if(Other.IsA('WeaponGrappler')) { WeaponGrappler(Other).ropeClass = class'compGrapplerRope'; WeaponGrappler(Other).projectileClass = class'compGrapplerProjectile'; return Other; //Other.Destroy(); //return ReplaceWith(Other, "aumodv1.compGrappler"); } //change spinfusor if(Other.IsA('WeaponSpinfusor')) { WeaponSpinfusor(Other).ProjectileClass = class'compSpinfusorProjectile'; WeaponSpinfusor(Other).ProjectileInheritedVelFactor = 0.75; //was .4 WeaponSpinfusor(Other).ProjectileVelocity = 5300;//was 4700 return Other; } //change WeaponEnergyBlade if(Other.IsA('WeaponEnergyBlade')) { WeaponEnergyBlade(Other).roundsPerSecond = 0.8000; WeaponEnergyBlade(Other).Range = 600;//was 400 WeaponEnergyBlade(Other).damageAmt = 75;//was 25 return Other; } //change burner if(Other.IsA('WeaponBurner')) { WeaponBurner(Other).ProjectileClass = class'compBurnerProjectile'; WeaponBurner(Other).energyUsage = 12;//was 15 WeaponBurner(Other).ProjectileInheritedVelFactor = 0.5;//was 0.0 return Other; } //change tank weapon if(Other.IsA('WeaponVehicleTank')) { WeaponVehicleTank(Other).roundsPerSecond = 0.4; WeaponVehicleTank(Other).aimClass = class'AimArcWeapons'; WeaponVehicleTank(Other).projectileClass = class'compTankRound'; WeaponVehicleTank(Other).projectileVelocity = 6000; WeaponVehicleTank(Other).ammoUsage = 0; //was 1 return Other; } return Other; } function string MutateSpawnCombatRoleClass(Character c) { //hack in the grappler //c.grapplerClass = class(DynamicLoadObject("aumodv1.compGrappler", class'Class')); c.team().combatRoleData[0].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("aumodv1.compArmorLight", class'class')).default.AllowedWeapons; c.team().combatRoleData[1].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("aumodv1.compArmorMedium", class'class')).default.AllowedWeapons; c.team().combatRoleData[2].role.default.armorClass.default.AllowedWeapons = class(DynamicLoadObject("aumodv1.compArmorHeavy", class'class')).default.AllowedWeapons; } Xclass compSpinfusorProjectile extends EquipmentClasses.ProjectileSpinfusor; Dclass compPlayerController extends Engine.PlayerController; ?1 @y w* A?(T9U9U.9?%a ==R 6CI2e1-%N/pDS/p{ +..\AUmodv1\Classes\compPlayerController.ucxclass compPlayerCharacterController extends Gameplay.PlayerCharacterController; D>Q06Ec-%N/pDS/pZ{ radarZoomScales(0)=0.100000 radarZoomScales(1)=0.350000 radarZoomScales(2)=0.950000 zoomedFOVs(0)=50.000000 zoomedFOVs(1)=23.000000 zoomedFOVs(2)=8.000000 zoomedMouseScale(0)=0.750000 zoomedMouseScale(1)=0.400000 zoomedMouseScale(2)=0.100000 zoomMagnificationLevels(0)=2.000000 zoomMagnificationLevels(1)=4.000000 zoomMagnificationLevels(2)=10.000000 ChatWindowSizes(0)=4 ChatWindowSizes(1)=6 ChatWindowSizes(2)=12 SPChatWindowSizes(0)=6 4..\AUmodv1\Classes\compPlayerCharacterController.ucF// such as class compGrapplerRope extends Gameplay.GrapplerRope; var() Material ropeGlowMaterial; simulated function Material GetOverlayMaterial(int Index) { log("rope texuter overlay: " $ ropeGlowMaterial); return ropeGlowMaterial; } nclass compGrapplerProjectile extends Gameplay.GrapplerProjectile; var float Health; var class ProjFXClass; var Emitter projfx; var float burningDamagerPerSecond; var bool bLastHook; var Grappler source; simulated function PostNetBeginPlay() { super.PostNetBeginPlay(); // 01/02/05 //projfx = Spawn(ProjFXClass); // projfx.SetBase(self); } simulated function Destroyed() { if(projfx!=none) { //projfx.Disabled = true; //projfx.Destroy(); } Super.Destroyed(); } function PostTakeDamage(float Damage, Engine.Pawn EventInstigator, vector HitLocation, vector Momentum, class DamageType, optional float projectileFactor) { log(health); Health -= Damage; log(health); if(Health <= 0) Destroy(); Super.PostTakeDamage(Damage, EventInstigator, HitLocation, Momentum, DamageType, projectileFactor); } simulated function simulatedAttach(Actor Other, vector TouchLocation) { //flashy effect //projfx = Spawn(ProjFXClass); //projfx.SetBase(self); Super.simulatedAttach(Other, TouchLocation); SetCollision(True, True, True); } HKclass compCharacter extends Gameplay.MultiplayerCharacter; var float fallDamageModifier; /* var float lightActiveShield; var float mediumActiveShield; var float heavyActiveShield; var float lightPassiveShield; var float mediumPassiveShield; var float heavyPassiveShield; simulated function bool shouldBreakRope() { local int i; local float ropeLength; if (Level.NetMode == NM_Client) return false; ropeLength = VSize(proj.Location - rope.Location); if (Controller == None) { //Log("!!!!!!!!Break grapple: Controller was None"); return true; } if (bAttached && (proj.Base == None || proj.Base.bDeleteMe)) { //Log("!!!!!!!!Break grapple: Projectiles base was None or destroyed"); //one less ammo for(i = 0; i < NUM_WEAPON_SLOTS;i++) if( Grappler(weaponSlots[i]) != None) { Grappler(weaponSlots[i]).ammoCount--; if (Grappler(weaponSlots[i]).ammoCount <= 0) Grappler(weaponSlots[i]).setOutOfAmmo(); compGrappler(weaponSlots[i]).Penalize(); LOG("ammo--, now " $ weaponSlots[i].ammoCount); } return true; } if (ropeLength > grapplerClass.default.maxRopeLength) { //Log("!!!!!!!!Break grapple: Rope got too long"); for(i = 0; i < NUM_WEAPON_SLOTS;i++) if(Grappler(weaponSlots[i]) != None) { Grappler(weaponSlots[i]).ammoCount--; if (Grappler(weaponSlots[i]).ammoCount <= 0) Grappler(weaponSlots[i]).setOutOfAmmo(); compGrappler(weaponSlots[i]).Penalize(); LOG("ammo--, now " $ weaponSlots[i].ammoCount); } return true; } if (ropeObstructionTrace(ropeLength - grapplerClass.default.ropeNonCollisionLength)) { //Log("!!!!!!!!Break grapple: Rope was obstructed"); for(i = 0; i < NUM_WEAPON_SLOTS;i++) if(Grappler(weaponSlots[i]) != None) { Grappler(weaponSlots[i]).ammoCount--; if (Grappler(weaponSlots[i]).ammoCount <= 0) Grappler(weaponSlots[i]).setOutOfAmmo(); compGrappler(weaponSlots[i]).Penalize(); LOG("ammo--, now " $ weaponSlots[i].ammoCount); } return true; } return false; } */ // on movement collision damage. // this method is called by fusion whenever a collision in the movement // is suffiently large as to cause damage to the character. simulated event OnMovementCollisionDamage(float damage) { local class collisionDamageType; damage *= fallDamageModifier; if (blockMovementDamage) return; if (level.timeSecondsT SO4]gO4EDJO4_KIo>hFLfN4grN4]YO4]v5RSNReNACEN4ObCN4[qN4oLN4\ {w~WUUQI tUA}3N4fZN4f@