Prepare fixtures

This commit is contained in:
dkanus 2026-07-14 20:27:09 +07:00
commit 9c94356263
6021 changed files with 722805 additions and 22 deletions

View file

@ -0,0 +1,15 @@
//=============================================================================
// AA12 Shotgun Ammo.
//=============================================================================
class AA12Ammo extends KFAmmunition;
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
defaultproperties
{
MaxAmmo=80
InitialAmount=60
AmmoPickupAmount=20
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
IconCoords=(X1=451,Y1=445,X2=510,Y2=500)
}

View file

@ -0,0 +1,11 @@
class AA12AmmoPickup extends KFAmmoPickup;
defaultproperties
{
AmmoAmount=20
InventoryType=Class'KFMod.ShotgunAmmo'
PickupMessage="12-Gauge Drum"
PickupForce="AssaultAmmoPickup"
DrawType=DT_StaticMesh
StaticMesh=none
}

View file

@ -0,0 +1,69 @@
class AA12Attachment extends KFWeaponAttachment;
defaultproperties
{
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdKar'
mShellCaseEmitterClass=Class'KFMod.KFShotgunShellSpewer'
MeshRef="KF_Weapons3rd2_Trip.AA12_3rd"
MovementAnims(0)=JogF_AA12
MovementAnims(1)=JogB_AA12
MovementAnims(2)=JogL_AA12
MovementAnims(3)=JogR_AA12
CrouchAnims(0)=CHwalkF_AA12
CrouchAnims(1)=CHwalkB_AA12
CrouchAnims(2)=CHwalkL_AA12
CrouchAnims(3)=CHwalkR_AA12
WalkAnims(0)=WalkF_AA12
WalkAnims(1)=WalkB_AA12
WalkAnims(2)=WalkL_AA12
WalkAnims(3)=WalkR_AA12
AirStillAnim=JumpF_Mid
AirAnims(0)=JumpF_Mid
AirAnims(1)=JumpF_Mid
AirAnims(2)=JumpL_Mid
AirAnims(3)=JumpR_Mid
TakeoffStillAnim=JumpF_Takeoff
TakeoffAnims(0)=JumpF_Takeoff
TakeoffAnims(1)=JumpF_Takeoff
TakeoffAnims(2)=JumpL_Takeoff
TakeoffAnims(3)=JumpR_Takeoff
LandAnims(0)=JumpF_Land
LandAnims(1)=JumpF_Land
LandAnims(2)=JumpL_Land
LandAnims(3)=JumpR_Land
TurnRightAnim=TurnR_AA12
TurnLeftAnim=TurnL_AA12
CrouchTurnRightAnim=CH_TurnR_AA12
CrouchTurnLeftAnim=CH_TurnL_AA12
IdleRestAnim=Idle_AA12//Idle_Rest
IdleCrouchAnim=CHIdle_AA12
IdleSwimAnim=Swim_Tread
IdleWeaponAnim=Idle_AA12//Idle_Rifle
IdleHeavyAnim=Idle_AA12//Idle_Biggun
IdleRifleAnim=Idle_AA12//Idle_Rifle
IdleChatAnim=Idle_AA12
FireAnims(0)=Fire_AA12
FireAnims(1)=Fire_AA12
FireAnims(2)=Fire_AA12
FireAnims(3)=Fire_AA12
FireAltAnims(0)=Fire_AA12
FireAltAnims(1)=Fire_AA12
FireAltAnims(2)=Fire_AA12
FireAltAnims(3)=Fire_AA12
FireCrouchAnims(0)=CHFire_AA12
FireCrouchAnims(1)=CHFire_AA12
FireCrouchAnims(2)=CHFire_AA12
FireCrouchAnims(3)=CHFire_AA12
FireCrouchAltAnims(0)=CHFire_AA12
FireCrouchAltAnims(1)=CHFire_AA12
FireCrouchAltAnims(2)=CHFire_AA12
FireCrouchAltAnims(3)=CHFire_AA12
HitAnims(0)=HitF_AA12
HitAnims(1)=HitB_AA12
HitAnims(2)=HitL_AA12
HitAnims(3)=HitR_AA12
PostFireBlendStandAnim=Blend_AA12
PostFireBlendCrouchAnim=CHBlend_AA12
}

View file

@ -0,0 +1,183 @@
//=============================================================================
// AA12 Automatic Shotgun Inventory class
//=============================================================================
class AA12AutoShotgun extends KFWeapon;
// Use alt fire to switch fire modes
simulated function AltFire(float F)
{
if(ReadyToFire(0))
{
DoToggle();
}
}
exec function SwitchModes()
{
DoToggle();
}
simulated function WeaponTick(float dt)
{
local float LastSeenSeconds,ReloadMulti;
if( bForceLeaveIronsights )
{
ZoomOut(true);
if( Role < ROLE_Authority)
ServerZoomOut(false);
bForceLeaveIronsights = false;
}
if( ForceZoomOutTime > 0 )
{
if( bAimingRifle )
{
if( Level.TimeSeconds - ForceZoomOutTime > 0 )
{
ForceZoomOutTime = 0;
ZoomOut(true);
if( Role < ROLE_Authority)
ServerZoomOut(false);
}
}
else
{
ForceZoomOutTime = 0;
}
}
if ( (Level.NetMode == NM_Client) || Instigator == None || KFFriendlyAI(Instigator.Controller) == none && Instigator.PlayerReplicationInfo == None)
return;
// Turn it off on death / battery expenditure
if (FlashLight != none)
{
// Keep the 1Pweapon client beam up to date.
AdjustLightGraphic();
if (FlashLight.bHasLight)
{
if (Instigator.Health <= 0 || KFHumanPawn(Instigator).TorchBatteryLife <= 0 || Instigator.PendingWeapon != none )
{
//Log("Killing Light...you're out of batteries, or switched / dropped weapons");
KFHumanPawn(Instigator).bTorchOn = false;
ServerSpawnLight();
}
}
}
UpdateMagCapacity(Instigator.PlayerReplicationInfo);
if(!bIsReloading)
{
if(!Instigator.IsHumanControlled())
{
LastSeenSeconds = Level.TimeSeconds - Instigator.Controller.LastSeenTime;
if(MagAmmoRemaining == 0 || ((LastSeenSeconds >= 5 || LastSeenSeconds > MagAmmoRemaining) && MagAmmoRemaining < MagCapacity))
ReloadMeNow();
}
}
else
{
if((Level.TimeSeconds - ReloadTimer) >= ReloadRate)
{
if(AmmoAmount(0) <= MagCapacity && !bHoldToReload)
{
MagAmmoRemaining = AmmoAmount(0);
ActuallyFinishReloading();
}
else
{
if ( KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo) != none && KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill != none )
{
ReloadMulti = KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill.Static.GetReloadSpeedModifier(KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo), self);
}
else
{
ReloadMulti = 1.0;
}
AddReloadedAmmo();
if( bHoldToReload )
{
NumLoadedThisReload++;
}
if(MagAmmoRemaining < MagCapacity && MagAmmoRemaining < AmmoAmount(0) && bHoldToReload)
ReloadTimer = Level.TimeSeconds;
if(MagAmmoRemaining >= MagCapacity || MagAmmoRemaining >= AmmoAmount(0) || !bHoldToReload || bDoSingleReload)
ActuallyFinishReloading();
else if( Level.NetMode!=NM_Client )
Instigator.SetAnimAction(WeaponReloadAnim);
}
}
else if(bIsReloading && !bReloadEffectDone && Level.TimeSeconds - ReloadTimer >= ReloadRate / 2)
{
bReloadEffectDone = true;
ClientReloadEffects();
}
}
}
defaultproperties
{
SkinRefs(0)="KF_Weapons2_Trip_T.Special.AA12_cmb"
SleeveNum=1
WeaponReloadAnim=Reload_AA12
IdleAimAnim=Idle_Iron
MagCapacity=20
ReloadRate=3.133
ReloadAnim="Reload"
ReloadAnimRate=1.000000
Weight=10.000000
bModeZeroCanDryFire=True
FireModeClass(0)=Class'KFMod.AA12Fire'
FireModeClass(1)=Class'KFMod.NoFire'
PutDownAnim="PutDown"
SelectSoundRef="KF_AA12Snd.AA12_Select"
SelectForce="SwitchToAssaultRifle"
bShowChargingBar=True
Description="An advanced automatic shotgun. Fires steel ball shot in semi or full auto."
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
Priority=200
InventoryGroup=4
GroupOffset=10
PickupClass=Class'KFMod.AA12Pickup'
PlayerViewOffset=(X=25.000000,Y=20.000000,Z=-2.000000)
//PlayerViewPivot=(Pitch=400)
BobDamping=6.000000
AttachmentClass=Class'KFMod.AA12Attachment'
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
ItemName="AA12"
MeshRef="KF_Weapons2_Trip.AA12_Trip"
DrawScale=1.00000
TransientSoundVolume=1.250000
AmbientGlow=0
AIRating=0.55
CurrentRating=0.55
DisplayFOV=65.000000
StandardDisplayFOV=65.0//60.0
PlayerIronSightFOV=80
ZoomTime=0.25
FastZoomOutTime=0.2
ZoomInRotation=(Pitch=-910,Yaw=0,Roll=2910)
bHasAimingMode=true
ZoomedDisplayFOV=45
HudImageRef="KillingFloor2HUD.WeaponSelect.AA12_unselected"
SelectedHudImageRef="KillingFloor2HUD.WeaponSelect.AA12"
TraderInfoTexture=texture'KillingFloor2HUD.Trader_Weapon_Icons.Trader_AA12'
// Achievement Helpers
bIsTier3Weapon=true
}

View file

@ -0,0 +1,27 @@
//=============================================================================
// AA12 Shotgun Bullet
//=============================================================================
class AA12Bullet extends ShotgunBullet;
defaultproperties
{
DamageAtten=5.000000
MaxPenetrations=2
PenDamageReduction=0.750000
HeadShotDamageMult=1.500000
Speed=3500.000000
MaxSpeed=4000.000000
bSwitchToZeroCollision=True
Damage=30.000000
DamageRadius=0.000000
MomentumTransfer=60000.000000
MyDamageType=Class'KFMod.DamTypeAA12Shotgun'
ExplosionDecal=Class'KFMod.ShotgunDecal'
DrawType=DT_StaticMesh
StaticMesh=StaticMesh'kf_generic_sm.Shotgun_Pellet'
CullDistance=3000.000000
LifeSpan=3.000000
DrawScale=1.5
Style=STY_Alpha
ImpactEffect=class'ROBulletHitEffect'
}

View file

@ -0,0 +1,184 @@
//=============================================================================
// Shotgun Fire
//=============================================================================
class AA12Fire extends KFShotgunFire;
var() class<Emitter> ShellEjectClass; // class of the shell eject emitter
var() Emitter ShellEjectEmitter; // The shell eject emitter
var() name ShellEjectBoneName; // name of the shell eject bone
simulated function bool AllowFire()
{
if(KFWeapon(Weapon).bIsReloading)
return false;
if(KFPawn(Instigator).SecondaryItem!=none)
return false;
if(KFPawn(Instigator).bThrowingNade)
return false;
if(KFWeapon(Weapon).MagAmmoRemaining < 1)
{
if( Level.TimeSeconds - LastClickTime>FireRate )
{
LastClickTime = Level.TimeSeconds;
}
if( AIController(Instigator.Controller)!=None )
KFWeapon(Weapon).ReloadMeNow();
return false;
}
return super(WeaponFire).AllowFire();
}
simulated function InitEffects()
{
super.InitEffects();
// don't even spawn on server
if ( (Level.NetMode == NM_DedicatedServer) || (AIController(Instigator.Controller) != None) )
return;
if ( (ShellEjectClass != None) && ((ShellEjectEmitter == None) || ShellEjectEmitter.bDeleteMe) )
{
ShellEjectEmitter = Weapon.Spawn(ShellEjectClass);
Weapon.AttachToBone(ShellEjectEmitter, ShellEjectBoneName);
}
}
function DrawMuzzleFlash(Canvas Canvas)
{
super.DrawMuzzleFlash(Canvas);
// Draw shell ejects
if (ShellEjectEmitter != None )
{
Canvas.DrawActor( ShellEjectEmitter, false, false, Weapon.DisplayFOV );
}
}
function FlashMuzzleFlash()
{
super.FlashMuzzleFlash();
if (ShellEjectEmitter != None)
{
ShellEjectEmitter.Trigger(Weapon, Instigator);
}
}
simulated function DestroyEffects()
{
super.DestroyEffects();
if (ShellEjectEmitter != None)
ShellEjectEmitter.Destroy();
}
function DoFireEffect()
{
local Vector StartProj, StartTrace, X,Y,Z;
local Rotator R, Aim;
local Vector HitLocation, HitNormal;
local Actor Other;
local int p;
local int SpawnCount;
local float theta;
Instigator.MakeNoise(1.0);
Weapon.GetViewAxes(X,Y,Z);
StartTrace = Instigator.Location + Instigator.EyePosition();// + X*Instigator.CollisionRadius;
StartProj = StartTrace + X*ProjSpawnOffset.X;
if ( !Weapon.WeaponCentered() && !KFWeap.bAimingRifle )
StartProj = StartProj + Weapon.Hand * Y*ProjSpawnOffset.Y + Z*ProjSpawnOffset.Z;
// check if projectile would spawn through a wall and adjust start location accordingly
Other = Weapon.Trace(HitLocation, HitNormal, StartProj, StartTrace, false);
// Collision attachment debugging
/* if( Other.IsA('ROCollisionAttachment'))
{
log(self$"'s trace hit "$Other.Base$" Collision attachment");
}*/
if (Other != None)
{
StartProj = HitLocation;
}
Aim = AdjustAim(StartProj, AimError);
SpawnCount = Max(1, ProjPerFire * int(Load));
switch (SpreadStyle)
{
case SS_Random:
X = Vector(Aim);
for (p = 0; p < SpawnCount; p++)
{
R.Yaw = Spread * (FRand()-0.5);
R.Pitch = Spread * (FRand()-0.5);
R.Roll = Spread * (FRand()-0.5);
SpawnProjectile(StartProj, Rotator(X >> R));
}
break;
case SS_Line:
for (p = 0; p < SpawnCount; p++)
{
theta = Spread*PI/32768*(p - float(SpawnCount-1)/2.0);
X.X = Cos(theta);
X.Y = Sin(theta);
X.Z = 0.0;
SpawnProjectile(StartProj, Rotator(X >> Aim));
}
break;
default:
SpawnProjectile(StartProj, Aim);
}
if (Instigator != none )
{
// Really boost the momentum for low grav. AA12 only gets momentum on low grav
if( Instigator.Physics == PHYS_Falling
&& Instigator.PhysicsVolume.Gravity.Z > class'PhysicsVolume'.default.Gravity.Z)
{
Instigator.AddVelocity((KickMomentum * 10.0) >> Instigator.GetViewRotation());
}
}
}
defaultproperties
{
KickMomentum=(X=-35.000000,Z=5.000000)
ProjPerFire=5
bAttachSmokeEmitter=True
TransientSoundVolume=2.0
TransientSoundRadius=500.000000
FireSoundRef="KF_AA12Snd.AA12_Fire"
StereoFireSoundRef="KF_AA12Snd.AA12_FireST"
NoAmmoSoundRef="KF_AA12Snd.AA12_DryFire"
FireRate=0.2//0.83//1.500000
FireAnimRate=1.0
AmmoClass=Class'KFMod.AA12Ammo'
ProjectileClass=Class'KFMod.AA12Bullet'
BotRefireRate=0.250000
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stKar'
aimerror=1.000000
Spread=1125.0//1500.000000
maxVerticalRecoilAngle=1000
maxHorizontalRecoilAngle=500
FireAimedAnim=Fire_Iron
//** View shake **//
ShakeOffsetMag=(X=6.0,Y=2.0,Z=6.0)
ShakeOffsetRate=(X=1000.0,Y=1000.0,Z=1000.0)
ShakeOffsetTime=1.25
ShakeRotMag=(X=50.0,Y=50.0,Z=250.0)
ShakeRotRate=(X=12500.0,Y=12500.0,Z=12500.0)
ShakeRotTime=3.0
bWaitForRelease=false
ShellEjectClass=class'ROEffects.KFShellEjectShotty'
ShellEjectBoneName=Shell_eject
bRandomPitchFireSound=false
}

View file

@ -0,0 +1,32 @@
//=============================================================================
// AA12 Shotgun Pickup.
//=============================================================================
class AA12Pickup extends KFWeaponPickup;
defaultproperties
{
Weight=10.000000
cost=4000
AmmoCost=40
BuyClipSize=20
PowerValue=85
SpeedValue=65
RangeValue=20
Description="An advanced fully automatic shotgun."
ItemName="AA12 Shotgun"
ItemShortName="AA12 Shotgun"
AmmoItemName="12-gauge drum"
AmmoMesh=none
InventoryType=Class'KFMod.AA12AutoShotgun'
PickupMessage="You got the AA12 auto shotgun."
PickupForce="AssaultRiflePickup"
StaticMesh=StaticMesh'KF_pickups2_Trip.AA12_Pickup'
DrawType=DT_StaticMesh
CollisionRadius=35.000000
CollisionHeight=5.000000
PickupSound=Sound'KF_AA12Snd.AA12_Pickup'
EquipmentCategoryID=3
CorrespondingPerkIndex=1
VariantClasses[0]=class'KFMod.GoldenAA12Pickup'
}

View file

@ -0,0 +1,55 @@
class ACTION_AddInventory extends ScriptedAction;
var() name InvTag;
var() class<Inventory> InventoryType;
function bool InitActionFor(ScriptedController C)
{
local Inventory NewInv;
local Pawn P;
local class<Pickup> PickupClass;
local PlayerController PC, OPC;
local Controller CLC;
if( InventoryType == none )
{
return false;
}
P = C.GetInstigator();
if( P == none || P.FindInventoryType(InventoryType) != none )
{
return true; // stop right there!
}
NewInv = C.Spawn(InventoryType,P,InvTag,P.Location);
if( NewInv == none )
{
return false;
}
NewInv.GiveTo( P );
OPC = PlayerController( P.Controller );
PickupClass = InventoryType.default.PickupClass;
if( PickupClass != none )
{
P.PlaySound( PickupClass.default.PickupSound, SLOT_Interact );
for( CLC = P.Level.ControllerList; CLC != None; CLC = CLC.NextController )
{
PC = PlayerController(CLC);
if(PC != none)
{
PC.ReceiveLocalizedMessage(PickupClass.default.MessageClass,1,OPC.PlayerReplicationInfo);
}
}
}
return false;
}
defaultproperties
{
ActionString="Add Inventory"
}

View file

@ -0,0 +1,21 @@
//=============================================================================
// ACTION_IfMonsterHasEnemy.
// Conditional on Pawn.Controller.Enemy != None
// by SuperApe -- Dec 2005
//=============================================================================
class ACTION_IfMonsterHasEnemy extends ScriptedAction;
function ProceedToNextAction( ScriptedController C )
{
if ( !C.Pawn.IsA('Monster') )
ProceedToSectionEnd( C );
C.ActionNum += 1;
if ( C.Pawn.Controller.Enemy == None )
ProceedToSectionEnd( C );
}
function bool StartsSection()
{
return true;
}

View file

@ -0,0 +1,23 @@
//=============================================================================
// ACTION_IfMonsterIsHurt.
// Conditional on Pawn.Health < HealthThreshold
// by SuperApe -- Dec 2005
//=============================================================================
class ACTION_IfMonsterIsHurt extends ScriptedAction;
var() int HealthThreshold;
function ProceedToNextAction( ScriptedController C )
{
if ( !C.Pawn.IsA('Monster') )
ProceedToSectionEnd( C );
C.ActionNum += 1;
if ( C.Pawn.Health > HealthThreshold )
ProceedToSectionEnd( C );
}
function bool StartsSection()
{
return true;
}

View file

@ -0,0 +1,21 @@
//=============================================================================
// ACTION_IfMonsterSeesEnemy.
// Conditional on MonsterController.bEnemyIsVisible
// by SuperApe -- Dec 2005
//=============================================================================
class ACTION_IfMonsterSeesEnemy extends ScriptedAction;
function ProceedToNextAction( ScriptedController C )
{
if ( !C.Pawn.IsA('Monster') || MonsterController( C.Pawn.Controller ) == None )
ProceedToSectionEnd( C );
C.ActionNum += 1;
if ( !MonsterController(C.Pawn.Controller).bEnemyIsVisible )
ProceedToSectionEnd( C );
}
function bool StartsSection()
{
return true;
}

View file

@ -0,0 +1,23 @@
class ACTION_KFHardChangeMap extends ScriptedAction;
function bool InitActionFor(ScriptedController C)
{
local PlayerController CP;
ForEach C.AllActors(class'PlayerController',CP)
{
CP.ConsoleCommand("DISCONNECT");
//CP.ConsoleCommand("OPEN Entry?Game=KFMod.KFCinematicGame");
return false;
}
}
function string GetActionString()
{
return ActionString;
}
defaultproperties
{
ActionString="Main menu"
}

View file

@ -0,0 +1,29 @@
//=============================================================================
// ACTION_Monsterize.
// Spawn a MonsterController for this Pawn and have it possess the Pawn.
// by SuperApe -- Dec 2005
//=============================================================================
class ACTION_Monsterize extends ScriptedAction;
var() name MonsterControllerTag;
var() class<Controller> ControllerToSpawnFor;
function bool InitActionFor( ScriptedController C )
{
local Controller SpawnedController;
local Pawn P;
P = C.Pawn;
if( P==None )
return false;
if( ControllerToSpawnFor==None && Monster(P)!=None && Monster(P).ControllerClass!=None )
ControllerToSpawnFor = Monster(P).ControllerClass;
SpawnedController = C.spawn( ControllerToSpawnFor, None );
if( SpawnedController==None )
return false;
SpawnedController.Tag = MonsterControllerTag;
C.Pawn.Controller = None;
C.Pawn = None;
SpawnedController.Possess(P);
return false;
}

View file

@ -0,0 +1,33 @@
/*
--------------------------------------------------------------
ACTION_PlayKFReplicatedAnim
--------------------------------------------------------------
Fully Replicated Version of ACTION_PlayAnim for use with KFPawns
Author : Alex Quick
--------------------------------------------------------------
*/
class ACTION_PlayKFReplicatedAnim extends ACTION_PlayAnim;
function bool PawnPlayBaseAnim(ScriptedController C, bool bFirstPlay)
{
local KFPawn KFP;
KFP = KFPawn(C.Pawn);
if(KFP == none)
{
log("Warning - Cannot use KFReplicatedAnim Actions with actors that are not children of KFPawn");
return false;
}
if ( BaseAnim == '' )
return false;
C.bControlAnimations = true;
KFP.SetScriptedAnimData(BaseAnim,BlendInTime,BlendOutTime,AnimRate,AnimIterations,bLoopAnim,StartFrame);
return false;
}

View file

@ -0,0 +1,37 @@
//=============================================================================
// ACTION_PossessPawn.
// Possess the Pawn with the PawnTag. Destroy any previous MonsterController.
// by SuperApe -- Dec 2005
//=============================================================================
class ACTION_PossessPawn extends ScriptedAction;
var() name PawnTag;
var bool bPawnExists;
function bool InitActionFor( ScriptedController C )
{
local Pawn P;
local MonsterController MC;
bPawnExists = false;
forEach C.DynamicActors( class'Pawn', P, PawnTag )
{
bPawnExists = true;
if ( P.Controller.IsA('MonsterController') )
MC = MonsterController( P.Controller );
P.Controller.Unpossess();
if ( P.Health > 0 )
{
C.Possess( P );
P.Controller = C;
P.AIScriptTag = C.Tag;
}
else P.AIScriptTag = '';
if ( MC != None )
MC.Destroy();
}
if ( !bPawnExists )
Warn("No Pawn with tag "$PawnTag$" exists!");
return false;
}

View file

@ -0,0 +1,17 @@
//=============================================================================
// AK47 Ammo.
//=============================================================================
class AK47Ammo extends KFAmmunition;
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
//duplicated by goldenak47ammo
defaultproperties
{
MaxAmmo=300
InitialAmount=120
AmmoPickupAmount=30
PickupClass=Class'KFMod.AK47AmmoPickup'
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
IconCoords=(X1=336,Y1=82,X2=382,Y2=125)
ItemName="AK47 bullets"
}

View file

@ -0,0 +1,11 @@
class AK47AmmoPickup extends KFAmmoPickup;
//duplicated by goldenak47ammopickup
defaultproperties
{
AmmoAmount=30
InventoryType=Class'KFMod.AK47Ammo'
PickupMessage="Rounds 7.62mm"
PickupForce="AssaultAmmoPickup"
DrawType=DT_StaticMesh
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
}

View file

@ -0,0 +1,143 @@
//=============================================================================
// AK47 Inventory class
//=============================================================================
class AK47AssaultRifle extends KFWeapon
config(user);
#exec OBJ LOAD FILE=KillingFloorWeapons.utx
#exec OBJ LOAD FILE=KillingFloorHUD.utx
#exec OBJ LOAD FILE=Inf_Weapons_Foley.uax
// Use alt fire to switch fire modes
simulated function AltFire(float F)
{
if(ReadyToFire(0))
{
DoToggle();
}
}
function bool RecommendRangedAttack()
{
return true;
}
//TODO: LONG ranged?
function bool RecommendLongRangedAttack()
{
return true;
}
function float SuggestAttackStyle()
{
return -1.0;
}
exec function SwitchModes()
{
DoToggle();
}
function float GetAIRating()
{
local Bot B;
B = Bot(Instigator.Controller);
if ( (B == None) || (B.Enemy == None) )
return AIRating;
return AIRating;
}
function byte BestMode()
{
return 0;
}
simulated function SetZoomBlendColor(Canvas c)
{
local Byte val;
local Color clr;
local Color fog;
clr.R = 255;
clr.G = 255;
clr.B = 255;
clr.A = 255;
if( Instigator.Region.Zone.bDistanceFog )
{
fog = Instigator.Region.Zone.DistanceFogColor;
val = 0;
val = Max( val, fog.R);
val = Max( val, fog.G);
val = Max( val, fog.B);
if( val > 128 )
{
val -= 128;
clr.R -= val;
clr.G -= val;
clr.B -= val;
}
}
c.DrawColor = clr;
}
defaultproperties
{
SkinRefs(0)="KF_Weapons2_Trip_T.Rifles.AK47_cmb"
SleeveNum=1
WeaponReloadAnim=Reload_AK47
IdleAimAnim=Idle_Iron
CustomCrosshair=11
CustomCrossHairTextureName="Crosshairs.HUD.Crosshair_Cross5"
MagCapacity=30
ReloadRate=3.0
ReloadAnim="Reload"
ReloadAnimRate=1.000000
Weight=6.000000
bModeZeroCanDryFire=True
FireModeClass(0)=Class'KFMod.AK47Fire'
FireModeClass(1)=Class'KFMod.NoFire'
PutDownAnim="PutDown"
SelectSoundRef="KF_AK47Snd.AK47_Select"
SelectForce="SwitchToAssaultRifle"
bShowChargingBar=True
Description="A classic Russian assault rifle. Can be fired in semi or full auto with nice knock down power but not great accuracy."
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
Priority=95
InventoryGroup=3
GroupOffset=7
PickupClass=Class'KFMod.AK47Pickup'
PlayerViewOffset=(X=18.000000,Y=22.000000,Z=-6.000000)
//PlayerViewPivot=(Pitch=400)
BobDamping=6.000000
AttachmentClass=Class'KFMod.AK47Attachment'
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
ItemName="AK47"
MeshRef="KF_Weapons2_Trip.AK47_Trip"
DrawScale=1.00000
TransientSoundVolume=1.250000
AmbientGlow=0
AIRating=0.55
CurrentRating=0.55
DisplayFOV=60.000000
StandardDisplayFOV=60.0
PlayerIronSightFOV=65
ZoomTime=0.25
FastZoomOutTime=0.2
ZoomInRotation=(Pitch=-910,Yaw=0,Roll=2910)
bHasAimingMode=true
ZoomedDisplayFOV=32
HudImageRef="KillingFloor2HUD.WeaponSelect.Ak_47_unselected"
SelectedHudImageRef="KillingFloor2HUD.WeaponSelect.Ak_47"
TraderInfoTexture=texture'KillingFloor2HUD.Trader_Weapon_Icons.Trader_AK_47'
bIsTier2Weapon=true
}

View file

@ -0,0 +1,74 @@
class AK47Attachment extends KFWeaponAttachment;
defaultproperties
{
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdMP'
mTracerClass=Class'KFMod.KFNewTracer'
mShellCaseEmitterClass=Class'KFMod.KFShellSpewer'
bRapidFire=True
bAltRapidFire=True
SplashEffect=Class'BulletSplashEmitter'
CullDistance=5000.000000
MeshRef="KF_Weapons3rd_Trip.AK47_3rd"
MovementAnims(0)=JogF_AK47
MovementAnims(1)=JogB_AK47
MovementAnims(2)=JogL_AK47
MovementAnims(3)=JogR_AK47
CrouchAnims(0)=CHwalkF_AK47
CrouchAnims(1)=CHwalkB_AK47
CrouchAnims(2)=CHwalkL_AK47
CrouchAnims(3)=CHwalkR_AK47
WalkAnims(0)=WalkF_AK47
WalkAnims(1)=WalkB_AK47
WalkAnims(2)=WalkL_AK47
WalkAnims(3)=WalkR_AK47
AirStillAnim=JumpF_Mid
AirAnims(0)=JumpF_Mid
AirAnims(1)=JumpF_Mid
AirAnims(2)=JumpL_Mid
AirAnims(3)=JumpR_Mid
TakeoffStillAnim=JumpF_Takeoff
TakeoffAnims(0)=JumpF_Takeoff
TakeoffAnims(1)=JumpF_Takeoff
TakeoffAnims(2)=JumpL_Takeoff
TakeoffAnims(3)=JumpR_Takeoff
LandAnims(0)=JumpF_Land
LandAnims(1)=JumpF_Land
LandAnims(2)=JumpL_Land
LandAnims(3)=JumpR_Land
TurnRightAnim=TurnR_AK47
TurnLeftAnim=TurnL_AK47
CrouchTurnRightAnim=CH_TurnR_AK47
CrouchTurnLeftAnim=CH_TurnL_AK47
IdleRestAnim=Idle_AK47//Idle_Rest
IdleCrouchAnim=CHIdle_AK47
IdleSwimAnim=Swim_Tread
IdleWeaponAnim=Idle_AK47//Idle_Rifle
IdleHeavyAnim=Idle_AK47//Idle_Biggun
IdleRifleAnim=Idle_AK47//Idle_Rifle
IdleChatAnim=Idle_AK47
FireAnims(0)=Fire_AK47
FireAnims(1)=Fire_AK47
FireAnims(2)=Fire_AK47
FireAnims(3)=Fire_AK47
FireAltAnims(0)=Fire_AK47
FireAltAnims(1)=Fire_AK47
FireAltAnims(2)=Fire_AK47
FireAltAnims(3)=Fire_AK47
FireCrouchAnims(0)=CHFire_AK47
FireCrouchAnims(1)=CHFire_AK47
FireCrouchAnims(2)=CHFire_AK47
FireCrouchAnims(3)=CHFire_AK47
FireCrouchAltAnims(0)=CHFire_AK47
FireCrouchAltAnims(1)=CHFire_AK47
FireCrouchAltAnims(2)=CHFire_AK47
FireCrouchAltAnims(3)=CHFire_AK47
HitAnims(0)=HitF_AK47
HitAnims(1)=HitB_AK47
HitAnims(2)=HitL_AK47
HitAnims(3)=HitR_AK47
PostFireBlendStandAnim=Blend_AK47
PostFireBlendCrouchAnim=CHBlend_AK47
}

View file

@ -0,0 +1,47 @@
//=============================================================================
//AK47 Fire
//=============================================================================
class AK47Fire extends KFFire;
defaultproperties
{
FireAimedAnim=Fire_Iron
FireSoundRef="KF_AK47Snd.AK47_Fire"
StereoFireSoundRef="KF_AK47Snd.AK47_FireST"
NoAmmoSoundRef="KF_AK47Snd.AK47_DryFire"
DamageType=Class'KFMod.DamTypeAK47AssaultRifle'
DamageMin=35
DamageMax=45
Momentum=8500.000000
bPawnRapidFireAnim=True
TransientSoundVolume=1.8
FireLoopAnim="Fire"
FireForce="AssaultRifleFire"
FireRate=0.109//0.085//0.077
RecoilRate=0.07
maxVerticalRecoilAngle=500
maxHorizontalRecoilAngle=250
TweenTime=0.025
bAccuracyBonusForSemiAuto=true
bRecoilRightOnly=true
AmmoClass=Class'KFMod.AK47Ammo'
AmmoPerFire=1
BotRefireRate=0.990000
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stSTG'
aimerror=42.000000
Spread=0.015//0.0085
SpreadStyle=SS_Random
//** View shake **//
ShakeOffsetMag=(X=6.0,Y=3.0,Z=7.5)
ShakeOffsetRate=(X=1000.0,Y=1000.0,Z=1000.0)
ShakeOffsetTime=1.25
ShakeRotMag=(X=50.0,Y=50.0,Z=350.0)
ShakeRotRate=(X=5000.0,Y=5000.0,Z=5000.0)
ShakeRotTime=0.75
ShellEjectClass=class'ROEffects.KFShellEjectAK'
ShellEjectBoneName=Shell_eject
bRandomPitchFireSound=false
}

View file

@ -0,0 +1,34 @@
//=============================================================================
// AK47 Pickup.
//=============================================================================
class AK47Pickup extends KFWeaponPickup;
defaultproperties
{
Weight=6.000000
cost=1000
AmmoCost=10
BuyClipSize=30
PowerValue=40
SpeedValue=80
RangeValue=50
Description="Standard issue military rifle. Equipped with an integrated 2X scope."
ItemName="AK47"
ItemShortName="AK47"
AmmoItemName="7.62mm Ammo"
AmmoMesh=StaticMesh'KillingFloorStatics.L85Ammo'
InventoryType=Class'KFMod.AK47AssaultRifle'
PickupMessage="You got the AK47"
PickupForce="AssaultRiflePickup"
DrawType=DT_StaticMesh
StaticMesh=StaticMesh'KF_pickups_Trip.AK47_pickup'
DrawScale=1.000000
CollisionRadius=25.000000
CollisionHeight=5.000000
PickupSound=Sound'KF_AK47Snd.AK47_Pickup'
EquipmentCategoryID=2
CorrespondingPerkIndex=3
VariantClasses[0]=class'KFMod.GoldenAK47Pickup'
VariantClasses[1]=class'KFMod.NeonAK47Pickup'
}

View file

@ -0,0 +1,38 @@
//=============================================================================
// SteampunkBerserkerSpecies
//=============================================================================
// Species type for civilian players with Berserker sleeves
//=============================================================================
// Killing Floor Source
// Copyright (C) 2009 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class AshHardingSpecies extends CivilianSpecies;
defaultproperties
{
// KFTODO: Replace this
//GibGroup="KFmod.KFGibGroup"
MaleSoundGroup="KFmod.KFMaleSoundGroup"
SpeciesName="Civilian"
RaceNum=4
MaleVoice="KFMod.KFVoicePackFemale"
FemaleVoice="KFMod.KFVoicePackFemale"
FemaleSoundGroup="XGame.xMercFemaleSoundGroup"
AirControl=+1.0
GroundSpeed=+1.0
WaterSpeed=+1.0
JumpZ=+1.0
ReceivedDamageScaling=+1.0
DamageScaling=+1.0
AccelRate=+1.0
WalkingPct=+1.0
CrouchedPct=+1.0
DodgeSpeedFactor=+1.0
DodgeSpeedZ=+1.0
SleeveTexture=Texture'KF_Weapons6_Trip_T.First_Sleeves.Female_Soldier_FirstPersonSleeve_D'
DetachedArmClass = class'SeveredArmAsh'
DetachedLegClass = class'SeveredLegAsh'
}

View file

@ -0,0 +1,30 @@
// Changed base class, since this is 99,99 % same as TurretController, why not use it then?
class AutoGunAI extends TurretController;
function bool IsTargetRelevant( Pawn Target )
{
if ( (Target != None) && (Target.Controller != None) && !Target.IsA('KFHumanPawn')
&& (Target.Health > 0) && VSize(Target.Location-Pawn.Location) < Pawn.SightRadius*1.25 )
return true;
return false;
}
function bool IsTurretFiring()
{
return Pawn.IsFiring();
}
auto state Searching
{
event SeeMonster( Pawn Seen )
{
if ( IsTargetRelevant( Seen ) )
{
Enemy = Seen;
GotoState('Engaged');
}
}
}
defaultproperties
{
}

View file

@ -0,0 +1,25 @@
//=============================================================================
// AvoidMarker_MedicNade
// AvoidMarkerthat the medic grenade creates, overridden to not affect the
// ringmaster
//=============================================================================
class AvoidMarker_MedicNade extends AvoidMarker
placeable;
function bool RelevantTo(Pawn P)
{
local bool bRelevant;
bRelevant = Super.RelevantTo(P);
if( bRelevant && P.GetTeamNum() > 0 )
{
bRelevant = false;
}
return bRelevant;
}
defaultproperties
{
}

View file

@ -0,0 +1,45 @@
//=============================================================================
// Axe Inventory class
//=============================================================================
class Axe extends KFMeleeGun;
defaultproperties
{
Skins(0)=Combiner'KF_Weapons_Trip_T.melee.axe_cmb'
weaponRange=80.000000
BloodyMaterial=Combiner'KF_Weapons_Trip_T.melee.axe_bloody_cmb'
bSpeedMeUp=True
Weight=5.000000
FireModeClass(0)=Class'KFMod.AxeFire'
FireModeClass(1)=Class'KFMod.AxeFireB'
Description="A common two-handed fireman's axe."
Priority=55
GroupOffset=3
PickupClass=Class'KFMod.AxePickup'
BobDamping=8.000000
AttachmentClass=Class'KFMod.AxeAttachment'
IconCoords=(X1=169,Y1=39,X2=241,Y2=77)
ItemName="Axe"
Mesh=SkeletalMesh'KF_Weapons_Trip.Axe_Trip'
AmbientGlow=0
AIRating=0.3
CurrentRating=0.5
ChopSlowRate = 0.2
BloodSkinSwitchArray=0
DisplayFOV=75.000000
StandardDisplayFOV=75.0
HudImage=Texture'KillingFloorHUD.WeaponSelect.Axe_unselected'
SelectedHudImage=Texture'KillingFloorHUD.WeaponSelect.Axe'
SelectSound=Sound'KF_AxeSnd.Axe_Select'
TraderInfoTexture=texture'KillingFloorHUD.Trader_Weapon_Images.Trader_Axe'
bIsTier2Weapon=true
}

View file

@ -0,0 +1,67 @@
class AxeAttachment extends KFMeleeAttachment;
defaultproperties
{
Mesh=SkeletalMesh'KF_Weapons3rd_Trip.Axe_3rd'
MovementAnims(0)=JogF_Axe
MovementAnims(1)=JogB_Axe
MovementAnims(2)=JogL_Axe
MovementAnims(3)=JogR_Axe
CrouchAnims(0)=CHwalkF_Axe
CrouchAnims(1)=CHwalkB_Axe
CrouchAnims(2)=CHwalkL_Axe
CrouchAnims(3)=CHwalkR_Axe
// WalkAnims(0)=WalkF
// WalkAnims(1)=WalkB
// WalkAnims(2)=WalkL
// WalkAnims(3)=WalkR
AirStillAnim=JumpF_Mid
AirAnims(0)=JumpF_Mid
AirAnims(1)=JumpF_Mid
AirAnims(2)=JumpL_Mid
AirAnims(3)=JumpR_Mid
TakeoffStillAnim=JumpF_Takeoff
TakeoffAnims(0)=JumpF_Takeoff
TakeoffAnims(1)=JumpF_Takeoff
TakeoffAnims(2)=JumpL_Takeoff
TakeoffAnims(3)=JumpR_Takeoff
LandAnims(0)=JumpF_Land
LandAnims(1)=JumpF_Land
LandAnims(2)=JumpL_Land
LandAnims(3)=JumpR_Land
TurnRightAnim=TurnR_Axe
TurnLeftAnim=TurnL_Axe
CrouchTurnRightAnim=CH_TurnR_Axe
CrouchTurnLeftAnim=CH_TurnL_Axe
IdleRestAnim=Idle_Axe//Idle_Rest
IdleCrouchAnim=CHIdle_Axe
IdleSwimAnim=Swim_Tread
IdleWeaponAnim=Idle_Axe//Idle_Rifle
IdleHeavyAnim=Idle_Axe//Idle_Biggun
IdleRifleAnim=Idle_Axe//Idle_Rifle
IdleChatAnim=Idle_Axe
FireAnims(0)=Attack1_Axe
FireAnims(1)=Attack2_Axe
FireAnims(2)=Attack3_Axe
FireAnims(3)=Attack3_Axe
FireAltAnims(0)=Attack1_Axe
FireAltAnims(1)=Attack2_Axe
FireAltAnims(2)=Attack3_Axe
FireAltAnims(3)=Attack3_Axe
FireCrouchAnims(0)=CHAttack1_Axe
FireCrouchAnims(1)=CHAttack2_Axe
FireCrouchAnims(2)=CHAttack3_Axe
FireCrouchAnims(3)=CHAttack3_Axe
FireCrouchAltAnims(0)=CHAttack1_Axe
FireCrouchAltAnims(1)=CHAttack2_Axe
FireCrouchAltAnims(2)=CHAttack3_Axe
FireCrouchAltAnims(3)=CHAttack3_Axe
HitAnims(0)=HitF_Axe
HitAnims(1)=HitB_Axe
HitAnims(2)=HitL_Axe
HitAnims(3)=HitR_Axe
PostFireBlendStandAnim=Blend_Axe
PostFireBlendCrouchAnim=CHBlend_Axe
}

View file

@ -0,0 +1,38 @@
// Axe Fire //
class AxeFire extends KFMeleeFire;
var() array<name> FireAnims;
simulated event ModeDoFire()
{
local int AnimToPlay;
if(FireAnims.length > 0)
{
AnimToPlay = rand(FireAnims.length);
FireAnim = FireAnims[AnimToPlay];
}
Super.ModeDoFire();
}
defaultproperties
{
FireAnims(0)="fire"
FireAnims(1)="fire2"
FireAnims(2)="fire3"
FireAnims(3)="fire4"
MeleeDamage=175
WideDamageMinHitAngle=0.65
ProxySize=0.150000
weaponRange=90.000000
DamagedelayMin=0.60//0.800000
DamagedelayMax=0.60//0.800000
hitDamageClass=Class'KFMod.DamTypeAxe'
FireRate=1.1
BotRefireRate=0.850000
MeleeHitSounds(0)=Sound'KF_AxeSnd.Axe_HitFlesh'
HitEffectClass=class'AxeHitEffect'
}

View file

@ -0,0 +1,20 @@
//-----------------------------------------------------------
//
//-----------------------------------------------------------
class AxeFireB extends KFMeleeFire;
DefaultProperties
{
MeleeDamage=275
WideDamageMinHitAngle=0.9
ProxySize=0.150000
weaponRange=90.000000
DamagedelayMin=0.76//0.800000
DamagedelayMax=0.76//0.800000
hitDamageClass=Class'KFMod.DamTypeAxe'
FireRate=1.333
FireAnim="PowerAttack"
BotRefireRate=0.850000
MeleeHitSounds(0)=Sound'KF_AxeSnd.Axe_HitFlesh'
HitEffectClass=class'AxeHitEffect'
}

View file

@ -0,0 +1,37 @@
//=============================================================================
// AxeHitEffect
//=============================================================================
// Hit effect class for axe hits
//=============================================================================
// Killing Floor Source
// Copyright (C) 20099 John "Ramm-Jaeger" Gibson
//=============================================================================
class AxeHitEffect extends KFMeleeHitEffect;
//=============================================================================
// defaultproperties
//=============================================================================
defaultproperties
{
HitEffects(0)=(HitDecal=class'KnifeHitDirt',HitEffect=class'ROBulletHitRockEffect',HitSound=sound'KF_AxeSnd.Axe_HitDefault') // Default (Dirt?)
HitEffects(1)=(HitDecal=class'KnifeHitDirt',HitEffect=class'ROBulletHitRockEffect',HitSound=sound'KF_AxeSnd.Axe_HitDirt') // Rock
HitEffects(2)=(HitDecal=class'KnifeHitDirt',HitEffect=class'ROBulletHitDirtEffect',HitSound=sound'KF_AxeSnd.Axe_HitDirt') // Dirt
HitEffects(3)=(HitDecal=class'KnifeHitDirt',HitEffect=class'ROBulletHitMetalEffect',HitSound=sound'KF_AxeSnd.Axe_HitMetal') // Metal
HitEffects(4)=(HitDecal=class'KnifeHitDirt',HitEffect=class'ROBulletHitWoodEffect',HitSound=sound'KF_AxeSnd.Axe_HitWood') // Wood
HitEffects(5)=(HitDecal=class'KnifeHitDirt',HitEffect=class'ROBulletHitGrassEffect',HitSound=sound'KF_AxeSnd.Axe_HitDirt') // Plant
HitEffects(6)=(HitDecal=class'KnifeHitDirt',HitEffect=class'ROBulletHitFleshEffect',HitSound=sound'KF_AxeSnd.Axe_HitFlesh') // Flesh (dead animals)
HitEffects(7)=(HitDecal=class'KnifeHitDirt',HitEffect=class'ROBulletHitIceEffect',HitSound=sound'KF_AxeSnd.Axe_HitDirt') // Ice
HitEffects(8)=(HitDecal=class'KnifeHitDirt',HitEffect=class'ROBulletHitSnowEffect',HitSound=sound'KF_AxeSnd.Axe_HitDirt') // Snow
HitEffects(9)=(HitEffect=class'ROBulletHitWaterEffect',HitSound=sound'KF_AxeSnd.Axe_HitDefault') // Water
HitEffects(10)=(HitDecal=class'KnifeHitDirt',HitEffect=class'ROBreakingGlass',HitSound=sound'KF_AxeSnd.Axe_HitDefault') // Glass
HitEffects(11)=(HitDecal=class'KnifeHitDirt',HitEffect=class'ROBulletHitGravelEffect',HitSound=sound'KF_AxeSnd.Axe_HitDirt') // Gravel
HitEffects(12)=(HitDecal=class'KnifeHitDirt',HitEffect=class'ROBulletHitConcreteEffect',HitSound=sound'KF_AxeSnd.Axe_HitConc') // Concrete
HitEffects(13)=(HitDecal=class'KnifeHitDirt',HitEffect=class'ROBulletHitWoodEffect',HitSound=sound'KF_AxeSnd.Axe_HitWood') // HollowWood
HitEffects(14)=(HitDecal=class'KnifeHitDirt',HitEffect=class'ROBulletHitMudEffect',HitSound=sound'KF_AxeSnd.Axe_HitDirt') // Mud
HitEffects(15)=(HitDecal=class'KnifeHitDirt',HitEffect=class'ROBulletHitMetalArmorEffect',HitSound=sound'KF_AxeSnd.Axe_HitMetal') // MetalArmor
HitEffects(16)=(HitDecal=class'KnifeHitDirt',HitEffect=class'ROBulletHitPaperEffect',HitSound=sound'KF_AxeSnd.Axe_HitDirt') // Paper
HitEffects(17)=(HitDecal=class'KnifeHitDirt',HitEffect=class'ROBulletHitClothEffect',HitSound=sound'KF_AxeSnd.Axe_HitDirt') // Cloth
HitEffects(18)=(HitDecal=class'KnifeHitDirt',HitEffect=class'ROBulletHitRubberEffect',HitSound=sound'KF_AxeSnd.Axe_HitDirt') // Rubber
HitEffects(19)=(HitDecal=class'KnifeHitDirt',HitEffect=class'ROBulletHitMudEffect',HitSound=sound'KF_AxeSnd.Axe_HitDirt') // Poop
}

View file

@ -0,0 +1,25 @@
//=============================================================================
// Axe Pickup.
//=============================================================================
class AxePickup extends KFWeaponPickup;
defaultproperties
{
Weight=5.000000
cost=1000
PowerValue=56
SpeedValue=32
RangeValue=-20
Description="A sturdy fireman's axe."
ItemName="Axe"
ItemShortName="Axe"
InventoryType=Class'KFMod.Axe'
PickupMessage="You got the Fire Axe."
PickupForce="AssaultRiflePickup"
StaticMesh=StaticMesh'KF_pickups_Trip.Axe_Pickup'
CollisionRadius=27.000000
CollisionHeight=5.000000
PickupSound=Sound'KF_AxeSnd.Axe_Pickup'
EquipmentCategoryID=0
CorrespondingPerkIndex=4
}

View file

@ -0,0 +1,46 @@
//==============================================
// BEControlTrigger - Slinky - 4/28/05
//==============================================
// Enables/disables a single trigger/whatever
// by replacing its event tag with ''/putting
// it back.
//==============================================
// Black Ether Studios, 2005.
//==============================================
class BEControlTrigger extends Triggers;
var(Events) bool bInitiallyDisable; //Required if you want
//to use this trigger
//to activate object
var Actor ControlledActor;
var name stolenEvent;
function PostBeginPlay()
{
Super.PostBeginPlay();
if ( Event != '' )
ForEach AllActors(class'Actor',ControlledActor, Event)
break;
if ( ControlledActor != None)
{
stolenEvent = ControlledActor.Event;
if(bInitiallyDisable)
ControlledActor.Event = '';
}
}
function Trigger( actor Other, pawn EventInstigator )
{
ControlledActor.Event = stolenEvent;
}
function Untrigger(Actor Other, pawn EventInstigator)
{
ControlledActor.Event = '';
}
defaultproperties
{
}

View file

@ -0,0 +1,43 @@
//==============================================
// BEPhaseTrigger - Slinky - 4/28/05
//==============================================
// Trigger which calls target object back to
// its original location/rotation when triggered
// DO NOT use this class on dynamically generated
// actors. And one Actor per trigger.
//==============================================
// Black Ether Studios, 2005
//==============================================
class BEPhaseTrigger extends Triggers;
var Actor PhaseActor;
var vector PhaseLocation;
var rotator PhaseRotation;
function PostBeginPlay()
{
Super.PostBeginPlay();
if ( Event != '' )
ForEach AllActors(class'Actor',PhaseActor, Event)
break;
if ( PhaseActor != None )
{
PhaseLocation = PhaseActor.Location;
PhaseRotation = PhaseActor.Rotation;
}
}
event Trigger( Actor Other, Pawn EventInstigator )
{
if(PhaseActor != None)
{
PhaseActor.SetRotation(PhaseRotation);
PhaseActor.SetLocation(PhaseLocation);
}
}
defaultproperties
{
}

View file

@ -0,0 +1,101 @@
//=================================================
// BEResettableCounter - Slinky - 4/28/05
//=================================================
// Just like Counter, but resets itself when
// untriggered.
//=================================================
// Black Ether Studios, 2005.
//=================================================
class BEResettableCounter extends Counter;
var () int CountDownInterval; // time between each decrement of the counter when it is in state_TimedCountDown
var () string TimeUpMessage;
var bool bCounting; // True when counter is counting down. False when it has been halted, via another trigger call.
event Untrigger( Actor Other, Pawn EventInstigator )
{
Reset();
}
// Counter was triggered.
// Other trigger turns this on.
function Trigger( actor Other, pawn EventInstigator )
{
local string S;
local string Num;
if( NumToCount > 0 )
{
if( --NumToCount == 0 )
{
// Trigger all matching actors.
if( bShowMessage && (CompleteMessage != ""))
Level.Game.Broadcast(Self,CompleteMessage,'CriticalEvent');
TriggerEvent(Event,Other,EventInstigator);
}
else if( bShowMessage && CountMessage != "" )
{
// Still counting down.
switch( NumToCount )
{
case 1: Num="one"; break;
case 2: Num="two"; break;
case 3: Num="three"; break;
case 4: Num="four"; break;
case 5: Num="five"; break;
case 6: Num="six"; break;
default: Num=string(NumToCount); break;
}
S = CountMessage;
ReplaceText(S,"%i",Num);
Level.Game.Broadcast(Self,S,'CriticalEvent');
}
}
}
function Timer()
{
if (!bCounting)
return;
NumToCount --;
// Counter made it to zero. we failed.
if(NumToCount <= 0)
{
if( TimeUpMessage!="" )
Level.Game.Broadcast(Self,TimeUpMessage,'CriticalEvent');
TriggerEvent(Event,self,Instigator);
SetTimer(0,false);
bCounting = false;
}
else Level.Game.Broadcast(Self,"00:"$NumToCount,'CriticalEvent');
}
// Other trigger turns this on.
state() TimedCountDown
{
function Trigger( actor Other, pawn EventInstigator )
{
Instigator = EventInstigator;
// If we ARE counting down, start the timer. Otherwise, we've been asked to halt. Let the timer know, so it can
// stop itself in the next iteration.
if (!bCounting)
{
SetTimer(CountDownInterval,true);
bCounting = true;
}
else if(bCounting)
{
bCounting = false;
SetTimer(0,false);
}
}
}
defaultproperties
{
CountDownInterval=1
TimeUpMessage="TIME UP"
}

View file

@ -0,0 +1,33 @@
//=========================================
// BESpawnVolume - Slinky - 4/28/05
//=========================================
// Spawns an actor of the associated type
// on trigger. Good for various things.
//=========================================
// Black Ether Studios, 2005.
//=========================================
class BESpawnVolume extends Volume;
var(Events) class<Actor> CreateOnTrigger;
var(Events) bool SpawnObjectAtStart;
var Actor myActor;
function PostBeginPlay()
{
Super.PostBeginPlay();
if(SpawnObjectAtStart && CreateOnTrigger != None)
myActor = Spawn(CreateOnTrigger);
}
event Trigger( Actor Other, Pawn EventInstigator )
{
if(myActor != None)
myActor.Destroy();
if(CreateOnTrigger != None)
myActor = Spawn(CreateOnTrigger);
}
defaultproperties
{
}

View file

@ -0,0 +1,33 @@
//=========================================================
// BETimedTrigger - Slinky - 4/28/05
//=========================================================
// Triggers the associated event after the listed delay.
// Only one delayed event per trigger may be processed
// simultaneously.
//=========================================================
// Black Ether Studios, 2005.
//=========================================================
class BETimedTrigger extends Triggers;
var(Events) float eventDelay;
var bool processingTrigger;
function Trigger( actor Other, pawn EventInstigator )
{
if( processingTrigger )
return;
Instigator = EventInstigator;
processingTrigger = true;
SetTimer(eventDelay,false);
}
event Timer()
{
TriggerEvent(Event,Self,Instigator);
processingTrigger = false;
}
defaultproperties
{
eventDelay=1.000000
}

View file

@ -0,0 +1,29 @@
//======================================
// BEUntrigger - Slinky - 4/28/05
//======================================
// Used as a trigger inverter, for when
// you need to pick up untrigger messages
// coming from a trigger. Allows filters.
//======================================
// Black Ether Studios, 2005.
//======================================
class BEUntrigger extends Triggers;
var(Events) bool bSendUntrigger,bSendTrigger;
event Trigger( Actor Other, Pawn EventInstigator )
{
if(bSendUntrigger)
UntriggerEvent(Event,Other,EventInstigator);
}
event Untrigger( Actor Other, Pawn EventInstigator )
{
if(bSendTrigger)
TriggerEvent(Event,Other,EventInstigator);
}
defaultproperties
{
bSendUntrigger=True
bSendTrigger=True
}

View file

@ -0,0 +1,7 @@
class BZombieAmmo extends Ammunition;
defaultproperties
{
bSplashDamage=True
ProjectileClass=Class'KFMod.KFBloatVomit'
}

View file

@ -0,0 +1,41 @@
//=============================================================================
// Bat Inventory class
//=============================================================================
class Bat extends KFMeleeGun;
defaultproperties
{
weaponRange=80.000000
bSpeedMeUp=True
BloodyMaterial=Shader'KillingFloorWeapons.Bat.BatBloodyShader'
BloodSkinSwitchArray=0
Skins(0)=Shader'KillingFloorWeapons.Bat.BatShineShader'
Skins(1)=Combiner'KF_Weapons_Trip_T.hands.hands_1stP_military_cmb'
Weight=3.000000
FireModeClass(0)=Class'KFMod.BatFire'
FireModeClass(1)=Class'KFMod.NoFire'
Description="This bit of broken pipe looks like it was pried from a gas-line."
Priority=3
//SmallViewOffset=(X=13.000000,Y=18.000000,Z=-10.000000)
GroupOffset=2
PickupClass=Class'KFMod.BatPickup'
PlayerViewOffset=(X=0.000000,Y=0.000000,Z=0.000000)
//PlayerViewPivot=(Pitch=400)
BobDamping=8.000000
AttachmentClass=Class'KFMod.BatAttachment'
IconCoords=(Y1=407,X2=118,Y2=442)
ItemName="Broken Pipe"
Mesh=SkeletalMesh'KF_Weapons_Trip.Pipe_Trip'
AmbientGlow=0
AIRating=0.4
CurrentRating=0.4
ChopSlowRate = 0.35
DisplayFOV=70.000000
StandardDisplayFOV=70.0
HudImage=texture'KillingFloorHUD.WeaponSelect.machette'
}

View file

@ -0,0 +1,53 @@
class BatAttachment extends KFMeleeAttachment ;
defaultproperties
{
Mesh=SkeletalMesh'KF_Weapons3rd_Trip.Pipe_3rd'
MovementAnims(0)=JogF_Pipe
MovementAnims(1)=JogB_Pipe
MovementAnims(2)=JogL_Pipe
MovementAnims(3)=JogR_Pipe
CrouchAnims(0)=CHwalkF_Pipe
CrouchAnims(1)=CHwalkB_Pipe
CrouchAnims(2)=CHwalkL_Pipe
CrouchAnims(3)=CHwalkR_Pipe
// WalkAnims(0)=WalkF
// WalkAnims(1)=WalkB
// WalkAnims(2)=WalkL
// WalkAnims(3)=WalkR
AirStillAnim=JumpF_Mid
AirAnims(0)=JumpF_Mid
AirAnims(1)=JumpF_Mid
AirAnims(2)=JumpL_Mid
AirAnims(3)=JumpR_Mid
TakeoffStillAnim=JumpF_Takeoff
TakeoffAnims(0)=JumpF_Takeoff
TakeoffAnims(1)=JumpF_Takeoff
TakeoffAnims(2)=JumpL_Takeoff
TakeoffAnims(3)=JumpR_Takeoff
LandAnims(0)=JumpF_Land
LandAnims(1)=JumpF_Land
LandAnims(2)=JumpL_Land
LandAnims(3)=JumpR_Land
TurnRightAnim=TurnR_Pipe
TurnLeftAnim=TurnL_Pipe
CrouchTurnRightAnim=CH_TurnR_Pipe
CrouchTurnLeftAnim=CH_TurnL_Pipe
IdleRestAnim=Idle_Pipe//Idle_Rest
IdleCrouchAnim=CHIdle_Pipe
IdleSwimAnim=Swim_Tread
IdleWeaponAnim=Idle_Pipe//Idle_Rifle
IdleHeavyAnim=Idle_Pipe//Idle_Biggun
IdleRifleAnim=Idle_Pipe//Idle_Rifle
IdleChatAnim=Idle_Pipe
FireAnims(0)=Attack1_Pipe
FireAnims(1)=Attack2_Pipe
FireAnims(2)=Attack3_Pipe
FireAnims(3)=Attack4_Pipe
FireAltAnims(0)=Attack1_Pipe
FireAltAnims(1)=Attack2_Pipe
FireAltAnims(2)=Attack3_Pipe
FireAltAnims(3)=Attack4_Pipe
}

View file

@ -0,0 +1,33 @@
// Bat Fire //
class BatFire extends KFMeleeFire;
var() Name FireAnim2;
function PlayFiring()
{
local name fa;
if( FRand()<0.7 ) // Randomly swap animations.
{
fa = FireAnim2;
FireAnim2 = FireAnim;
FireAnim = fa;
}
Super.PlayFiring();
}
defaultproperties
{
FireAnim2="Fire2"
MeleeDamage=70
ProxySize=0.120000
DamagedelayMin=0.500000
DamagedelayMax=0.500000
hitDamageClass=Class'KFMod.DamTypeBat'
FireRate=0.710000
BotRefireRate=0.710000
MeleeHitSounds(0)=Sound'KFPawnDamageSound.MeleeDamageSounds.bathitflesh'
MeleeHitSounds(1)=Sound'KFPawnDamageSound.MeleeDamageSounds.bathitflesh2'
MeleeHitSounds(2)=Sound'KFPawnDamageSound.MeleeDamageSounds.bathitflesh3'
}

View file

@ -0,0 +1,25 @@
//=============================================================================
// Bat Pickup.
//=============================================================================
class BatPickup extends KFWeaponPickup;
defaultproperties
{
Weight=3.000000
cost=100
PowerValue=35
SpeedValue=56
RangeValue=-20
Description="This bit of broken pipe looks like it was pried from a gas-line."
ItemName="Broken Pipe"
ItemShortName="Broken Pipe"
InventoryType=Class'KFMod.Bat'
PickupMessage="You got a broken pipe."
PickupSound=Sound'PatchSounds.pickupm2-2'
PickupForce="AssaultRiflePickup"
StaticMesh=StaticMesh'KillingFloorStatics.BatGround'
CollisionRadius=28.000000
CollisionHeight=5.000000
EquipmentCategoryID=0
CorrespondingPerkIndex=4
}

View file

@ -0,0 +1,20 @@
//=============================================================================
// BenelliAmmo
//=============================================================================
// Ammo for the Benelli shotgun primary fire
//=============================================================================
// Killing Floor Source
// Copyright (C) 2011 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class BenelliAmmo extends KFAmmunition;
//duplicated by goldenbenelliammo
defaultproperties
{
MaxAmmo=48
InitialAmount=24
AmmoPickupAmount=6
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
IconCoords=(X1=451,Y1=445,X2=510,Y2=500)
}

View file

@ -0,0 +1,12 @@
class BenelliAmmoPickup extends KFAmmoPickup;
//duplicated by goldenbenelliammopickup
defaultproperties
{
AmmoAmount=6
InventoryType=Class'KFMod.BenelliAmmo'
PickupMessage="12-Gauge Shells"
PickupForce="AssaultAmmoPickup"
DrawType=DT_StaticMesh
StaticMesh=none
}

View file

@ -0,0 +1,79 @@
//=============================================================================
// BenelliAttachment
//=============================================================================
// Benelli M4 Shotgun third person attachment class
//=============================================================================
// Killing Floor Source
// Copyright (C) 2011 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class BenelliAttachment extends ShotgunAttachment;
defaultproperties
{
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdKar'
mShellCaseEmitterClass=Class'KFMod.KFShotgunShellSpewer'
MeshRef="KF_Weapons3rd3_Trip.Benelli_3rd"
MovementAnims(0)=JogF_Shotgun
MovementAnims(1)=JogB_Shotgun
MovementAnims(2)=JogL_Shotgun
MovementAnims(3)=JogR_Shotgun
CrouchAnims(0)=CHwalkF_Shotgun
CrouchAnims(1)=CHwalkB_Shotgun
CrouchAnims(2)=CHwalkL_Shotgun
CrouchAnims(3)=CHwalkR_Shotgun
WalkAnims(0)=WalkF_Shotgun
WalkAnims(1)=WalkB_Shotgun
WalkAnims(2)=WalkL_Shotgun
WalkAnims(3)=WalkR_Shotgun
AirStillAnim=JumpF_Mid
AirAnims(0)=JumpF_Mid
AirAnims(1)=JumpF_Mid
AirAnims(2)=JumpL_Mid
AirAnims(3)=JumpR_Mid
TakeoffStillAnim=JumpF_Takeoff
TakeoffAnims(0)=JumpF_Takeoff
TakeoffAnims(1)=JumpF_Takeoff
TakeoffAnims(2)=JumpL_Takeoff
TakeoffAnims(3)=JumpR_Takeoff
LandAnims(0)=JumpF_Land
LandAnims(1)=JumpF_Land
LandAnims(2)=JumpL_Land
LandAnims(3)=JumpR_Land
TurnRightAnim=TurnR_Shotgun
TurnLeftAnim=TurnL_Shotgun
CrouchTurnRightAnim=CH_TurnR_Shotgun
CrouchTurnLeftAnim=CH_TurnL_Shotgun
IdleRestAnim=Idle_Shotgun//Idle_Rest
IdleCrouchAnim=CHIdle_Shotgun
IdleSwimAnim=Swim_Tread
IdleWeaponAnim=Idle_Shotgun//Idle_Rifle
IdleHeavyAnim=Idle_Shotgun//Idle_Biggun
IdleRifleAnim=Idle_Shotgun//Idle_Rifle
IdleChatAnim=Idle_Shotgun
FireAnims(0)=Fire_Benelli
FireAnims(1)=Fire_Benelli
FireAnims(2)=Fire_Benelli
FireAnims(3)=Fire_Benelli
FireAltAnims(0)=Fire_Benelli
FireAltAnims(1)=Fire_Benelli
FireAltAnims(2)=Fire_Benelli
FireAltAnims(3)=Fire_Benelli
FireCrouchAnims(0)=CHFire_Benelli
FireCrouchAnims(1)=CHFire_Benelli
FireCrouchAnims(2)=CHFire_Benelli
FireCrouchAnims(3)=CHFire_Benelli
FireCrouchAltAnims(0)=CHFire_Benelli
FireCrouchAltAnims(1)=CHFire_Benelli
FireCrouchAltAnims(2)=CHFire_Benelli
FireCrouchAltAnims(3)=CHFire_Benelli
HitAnims(0)=HitF_Shotgun
HitAnims(1)=HitB_Shotgun
HitAnims(2)=HitL_Shotgun
HitAnims(3)=HitR_Shotgun
PostFireBlendStandAnim=Blend_Shotgun
PostFireBlendCrouchAnim=CHBlend_Shotgun
}

View file

@ -0,0 +1,33 @@
//=============================================================================
// BenelliBullet
//=============================================================================
// Benelli shotgun pellet
//=============================================================================
// Killing Floor Source
// Copyright (C) 2011 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class BenelliBullet extends ShotgunBullet;
defaultproperties
{
DamageAtten=5.000000
MaxPenetrations=2
PenDamageReduction=0.500000
HeadShotDamageMult=1.500000
Speed=3500.000000
MaxSpeed=4000.000000
bSwitchToZeroCollision=True
Damage=35.000000
DamageRadius=0.000000
MomentumTransfer=50000.000000
MyDamageType=Class'KFMod.DamTypeBenelli'
ExplosionDecal=Class'KFMod.ShotgunDecal'
DrawType=DT_StaticMesh
StaticMesh=StaticMesh'kf_generic_sm.Shotgun_Pellet'
CullDistance=3000.000000
LifeSpan=3.000000
DrawScale=1.0
Style=STY_Alpha
ImpactEffect=class'ROBulletHitEffect'
}

View file

@ -0,0 +1,92 @@
//=============================================================================
// BenelliFire
//=============================================================================
// Benelli shotgun primary fire class
//=============================================================================
// Killing Floor Source
// Copyright (C) 2011 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class BenelliFire extends KFShotgunFire;
var() class<Emitter> ShellEjectClass; // class of the shell eject emitter
var() Emitter ShellEjectEmitter; // The shell eject emitter
var() name ShellEjectBoneName; // name of the shell eject bone
simulated function InitEffects()
{
super.InitEffects();
// don't even spawn on server
if ( (Level.NetMode == NM_DedicatedServer) || (AIController(Instigator.Controller) != None) )
return;
if ( (ShellEjectClass != None) && ((ShellEjectEmitter == None) || ShellEjectEmitter.bDeleteMe) )
{
ShellEjectEmitter = Weapon.Spawn(ShellEjectClass);
Weapon.AttachToBone(ShellEjectEmitter, ShellEjectBoneName);
}
}
function DrawMuzzleFlash(Canvas Canvas)
{
super.DrawMuzzleFlash(Canvas);
// Draw shell ejects
if (ShellEjectEmitter != None )
{
Canvas.DrawActor( ShellEjectEmitter, false, false, Weapon.DisplayFOV );
}
}
function FlashMuzzleFlash()
{
super.FlashMuzzleFlash();
if (ShellEjectEmitter != None)
{
ShellEjectEmitter.Trigger(Weapon, Instigator);
}
}
simulated function DestroyEffects()
{
super.DestroyEffects();
if (ShellEjectEmitter != None)
ShellEjectEmitter.Destroy();
}
defaultproperties
{
KickMomentum=(X=-45.000000,Z=10.000000)
ProjPerFire=7
bAttachSmokeEmitter=True
TransientSoundVolume=2.0
TransientSoundRadius=500.000000
FireSoundRef="KF_PumpSGSnd.SG_Fire"
StereoFireSoundRef="KF_PumpSGSnd.SG_FireST"
NoAmmoSoundRef="KF_PumpSGSnd.SG_DryFire"
FireRate=0.2
FireAnimRate=1.0
AmmoClass=Class'KFMod.BenelliAmmo'
ProjectileClass=Class'KFMod.BenelliBullet'
BotRefireRate=0.200000
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stKar'
aimerror=1.000000
Spread=1125.0//1500.000000
maxVerticalRecoilAngle=1500
maxHorizontalRecoilAngle=900
FireAimedAnim=Fire_Iron
//** View shake **//
ShakeOffsetMag=(X=6.0,Y=2.0,Z=10.0)
ShakeOffsetRate=(X=1000.0,Y=1000.0,Z=1000.0)
ShakeOffsetTime=3.0
ShakeRotMag=(X=50.0,Y=50.0,Z=400.0)
ShakeRotRate=(X=12500.0,Y=12500.0,Z=12500.0)
ShakeRotTime=5.0
bWaitForRelease=true
bRandomPitchFireSound=false
ShellEjectClass=class'ROEffects.KFShellEjectBenelli'
ShellEjectBoneName=Shell_eject
}

View file

@ -0,0 +1,37 @@
//=============================================================================
// BenelliPickup
//=============================================================================
// Benellie shotgun pickup class
//=============================================================================
// Killing Floor Source
// Copyright (C) 2011 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class BenelliPickup extends KFWeaponPickup;
defaultproperties
{
Weight=8.000000
cost=2500
BuyClipSize=6
PowerValue=70
SpeedValue=60
RangeValue=15
Description="A military tactical shotgun with semi automatic fire capability. Holds up to 6 shells. "
ItemName="Combat Shotgun"
ItemShortName="Combat Shotgun"
AmmoItemName="12-gauge shells"
AmmoMesh=none
InventoryType=Class'KFMod.BenelliShotgun'
PickupMessage="You got the combat shotgun."
PickupForce="AssaultRiflePickup"
StaticMesh=StaticMesh'KF_pickups3_Trip.Benelli_Pickup'
DrawType=DT_StaticMesh
CollisionRadius=35.000000
CollisionHeight=5.000000
PickupSound=Sound'KF_M4ShotgunSnd.WEP_Benelli_Foley_Pickup'
EquipmentCategoryID=2
CorrespondingPerkIndex=1
VariantClasses[0]=class'KFMod.GoldenBenelliPickup'
}

View file

@ -0,0 +1,194 @@
//=============================================================================
// BenelliShotgun
//=============================================================================
// A Benelli M4 Shotgun
//=============================================================================
// Killing Floor Source
// Copyright (C) 2011 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class BenelliShotgun extends KFWeaponShotgun;
// Overridden to not take us out of ironsights when firing
simulated function WeaponTick(float dt)
{
local float LastSeenSeconds,ReloadMulti;
if( bForceLeaveIronsights )
{
ZoomOut(true);
if( Role < ROLE_Authority)
ServerZoomOut(false);
bForceLeaveIronsights = false;
}
if( ForceZoomOutTime > 0 )
{
if( bAimingRifle )
{
if( Level.TimeSeconds - ForceZoomOutTime > 0 )
{
ForceZoomOutTime = 0;
ZoomOut(true);
if( Role < ROLE_Authority)
ServerZoomOut(false);
}
}
else
{
ForceZoomOutTime = 0;
}
}
if ( (Level.NetMode == NM_Client) || Instigator == None || KFFriendlyAI(Instigator.Controller) == none && Instigator.PlayerReplicationInfo == None)
return;
// Turn it off on death / battery expenditure
if (FlashLight != none)
{
// Keep the 1Pweapon client beam up to date.
AdjustLightGraphic();
if (FlashLight.bHasLight)
{
if (Instigator.Health <= 0 || KFHumanPawn(Instigator).TorchBatteryLife <= 0 || Instigator.PendingWeapon != none )
{
//Log("Killing Light...you're out of batteries, or switched / dropped weapons");
KFHumanPawn(Instigator).bTorchOn = false;
ServerSpawnLight();
}
}
}
UpdateMagCapacity(Instigator.PlayerReplicationInfo);
if(!bIsReloading)
{
if(!Instigator.IsHumanControlled())
{
LastSeenSeconds = Level.TimeSeconds - Instigator.Controller.LastSeenTime;
if(MagAmmoRemaining == 0 || ((LastSeenSeconds >= 5 || LastSeenSeconds > MagAmmoRemaining) && MagAmmoRemaining < MagCapacity))
ReloadMeNow();
}
}
else
{
if((Level.TimeSeconds - ReloadTimer) >= ReloadRate)
{
if(AmmoAmount(0) <= MagCapacity && !bHoldToReload)
{
MagAmmoRemaining = AmmoAmount(0);
ActuallyFinishReloading();
}
else
{
if ( KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo) != none && KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill != none )
{
ReloadMulti = KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill.Static.GetReloadSpeedModifier(KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo), self);
}
else
{
ReloadMulti = 1.0;
}
AddReloadedAmmo();
if( bHoldToReload )
{
NumLoadedThisReload++;
}
if(MagAmmoRemaining < MagCapacity && MagAmmoRemaining < AmmoAmount(0) && bHoldToReload)
ReloadTimer = Level.TimeSeconds;
if(MagAmmoRemaining >= MagCapacity || MagAmmoRemaining >= AmmoAmount(0) || !bHoldToReload || bDoSingleReload)
ActuallyFinishReloading();
else if( Level.NetMode!=NM_Client )
Instigator.SetAnimAction(WeaponReloadAnim);
}
}
else if(bIsReloading && !bReloadEffectDone && Level.TimeSeconds - ReloadTimer >= ReloadRate / 2)
{
bReloadEffectDone = true;
ClientReloadEffects();
}
}
}
// Copied from KFWeaponShotgun to support Achievements
simulated function AddReloadedAmmo()
{
if(AmmoAmount(0) > 0)
++MagAmmoRemaining;
// Don't do this on a "Hold to reload" weapon, as it can update too quick actually and cause issues maybe - Ramm
if( !bHoldToReload )
{
ClientForceKFAmmoUpdate(MagAmmoRemaining,AmmoAmount(0));
}
if ( PlayerController(Instigator.Controller) != none && KFSteamStatsAndAchievements(PlayerController(Instigator.Controller).SteamStatsAndAchievements) != none )
{
KFSteamStatsAndAchievements(PlayerController(Instigator.Controller).SteamStatsAndAchievements).OnBenelliReloaded();
}
}
defaultproperties
{
SkinRefs(0)="KF_Weapons4_Trip_T.Weapons.Benelli_M4_cmb"
SkinRefs(1)="KF_Weapons2_Trip_T.Special.Aimpoint_sight_shdr"
SleeveNum=2
WeaponReloadAnim=Reload_Shotgun
MagCapacity=6
ReloadRate=0.9//0.80
ReloadAnim="Reload"
ReloadAnimRate=1.0
IdleAimAnim=Idle_Iron
Weight=8.000000
bModeZeroCanDryFire=True
FireModeClass(0)=Class'KFMod.BenelliFire'
FireModeClass(1)=Class'KFMod.ShotGunLightFire'
PutDownAnim="PutDown"
SelectSoundRef="KF_M4ShotgunSnd.WEP_Benelli_Foley_Select"
bShowChargingBar=True
Description="A military tactical shotgun with semi automatic fire capability. Holds up to 6 shells. "
Priority=170
InventoryGroup=3
GroupOffset=9
PickupClass=Class'KFMod.BenelliPickup'
BobDamping=7.000000
AttachmentClass=Class'KFMod.BenelliAttachment'
IconCoords=(X1=169,Y1=172,X2=245,Y2=208)
ItemName="Combat Shotgun"
MeshRef="KF_Wep_Benelli.Benelli_Trip"
TransientSoundVolume=1.000000
PlayerViewOffset=(X=20.000000,Y=18.750000,Z=-7.500000)
AmbientGlow=0
AIRating=0.6
CurrentRating=0.6
ZoomTime=0.25
FastZoomOutTime=0.2
ZoomInRotation=(Pitch=-910,Yaw=0,Roll=2910)
bHasAimingMode=true
bTorchEnabled=true
DisplayFOV=65.0
StandardDisplayFOV=65.0
PlayerIronSightFOV=70
ZoomedDisplayFOV=40
HudImageRef="KillingFloor2HUD.WeaponSelect.Beneli_unselected"
SelectedHudImageRef="KillingFloor2HUD.WeaponSelect.Beneli"
TraderInfoTexture=texture'KillingFloor2HUD.Trader_Weapon_Icons.Trader_Beneli'
FirstPersonFlashlightOffset=(X=-25.000000,Y=-18.000000,Z=8.000000)
// Achievement Helpers
bIsTier2Weapon=true
}

View file

@ -0,0 +1,332 @@
class BileExplosion extends FleshHitEmitter;
defaultproperties
{
Begin Object Class=SpriteEmitter Name=SpriteEmitter103
FadeOut=True
RespawnDeadParticles=False
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
Acceleration=(Z=-500.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
FadeOutStartTime=0.200000
MaxParticles=2
Name="SpriteEmitter103"
SizeScale(1)=(RelativeTime=0.070000,RelativeSize=1.000000)
SizeScale(2)=(RelativeTime=1.000000,RelativeSize=2.000000)
InitialParticlesPerSecond=1000.000000
DrawStyle=PTDS_AlphaBlend
Texture=Texture'kf_fx_trip_t.Gore.bloat_explode_blood'
LifetimeRange=(Min=1.000000,Max=1.000000)
StartVelocityRange=(X=(Min=-50.000000,Max=50.000000),Y=(Min=-50.000000,Max=50.000000),Z=(Min=150.000000,Max=300.000000))
End Object
Emitters(0)=SpriteEmitter'SpriteEmitter103'
Begin Object Class=MeshEmitter Name=MeshEmitter24
StaticMesh=StaticMesh'kf_gore_trip_sm.limbs.bloat_arm_resource'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
MaxCollisions=(Max=2.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=1
Name="MeshEmitter24"
StartLocationRange=(Z=(Min=10.000000,Max=64.000000))
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=1.150000,Max=1.150000),Y=(Min=1.150000,Max=1.150000),Z=(Min=1.150000,Max=1.150000))
InitialParticlesPerSecond=1000.000000
LifetimeRange=(Min=10.000000,Max=10.000000)
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=250.000000,Max=500.000000))
End Object
Emitters(1)=MeshEmitter'MeshEmitter24'
Begin Object Class=MeshEmitter Name=MeshEmitter25
StaticMesh=StaticMesh'EffectsSM.PlayerGibbs.Chunk1_Gibb'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=30
Name="MeshEmitter25"
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=0.500000,Max=2.000000),Y=(Min=0.500000,Max=2.000000),Z=(Min=0.500000,Max=2.000000))
InitialParticlesPerSecond=1000.000000
LifetimeRange=(Min=10.000000,Max=10.000000)
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=1000.000000))
VelocityLossRange=(Z=(Min=1.000000,Max=1.000000))
End Object
Emitters(2)=MeshEmitter'MeshEmitter25'
Begin Object Class=SpriteEmitter Name=SpriteEmitter109
RespawnDeadParticles=False
SpawnOnlyInDirectionOfNormal=True
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
ScaleSizeYByVelocity=True
ScaleSizeZByVelocity=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
Acceleration=(Z=-200.000000)
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=96,G=160,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=1.000000
MaxParticles=8
Name="SpriteEmitter109"
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=5.000000)
StartMassRange=(Min=11.000000,Max=11.000000)
UseRotationFrom=PTRS_Normal
SpinsPerSecondRange=(X=(Min=-0.300000,Max=0.300000))
StartSpinRange=(X=(Min=-0.500000,Max=0.500000))
SizeScale(0)=(RelativeSize=1.000000)
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=2.500000)
StartSizeRange=(X=(Min=30.000000,Max=30.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=3.000000
InitialParticlesPerSecond=500.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_b_diff'
TextureUSubdivisions=4
TextureVSubdivisions=4
LifetimeRange=(Min=0.500000,Max=0.500000)
StartVelocityRange=(X=(Min=-150.000000,Max=150.000000),Y=(Min=-150.000000,Max=150.000000),Z=(Min=100.000000,Max=100.000000))
End Object
Emitters(3)=SpriteEmitter'SpriteEmitter109'
Begin Object Class=MeshEmitter Name=MeshEmitter26
StaticMesh=StaticMesh'kf_gore_trip_sm.limbs.bloat_arm_resource'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
MaxCollisions=(Max=2.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=1
Name="MeshEmitter26"
StartLocationRange=(X=(Min=-16.000000,Max=16.000000),Y=(Min=-16.000000,Max=16.000000),Z=(Min=12.000000,Max=64.000000))
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=1.150000,Max=1.150000),Y=(Min=1.150000,Max=1.150000),Z=(Min=1.150000,Max=1.150000))
InitialParticlesPerSecond=1000.000000
LifetimeRange=(Min=10.000000,Max=10.000000)
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=250.000000,Max=500.000000))
End Object
Emitters(4)=MeshEmitter'MeshEmitter26'
Begin Object Class=MeshEmitter Name=MeshEmitter27
StaticMesh=StaticMesh'kf_gore_trip_sm.limbs.bloat_head'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
MaxCollisions=(Max=2.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=1
Name="MeshEmitter27"
StartLocationRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=90.000000,Max=90.000000))
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=1.150000,Max=1.150000),Y=(Min=1.150000,Max=1.150000),Z=(Min=1.150000,Max=1.150000))
InitialParticlesPerSecond=1000.000000
LifetimeRange=(Min=10.000000,Max=10.000000)
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=250.000000,Max=500.000000))
End Object
Emitters(5)=MeshEmitter'MeshEmitter27'
Begin Object Class=MeshEmitter Name=MeshEmitter28
StaticMesh=StaticMesh'kf_gore_trip_sm.gibbs.intestines'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
MaxCollisions=(Max=2.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=1
Name="MeshEmitter28"
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
InitialParticlesPerSecond=1000.000000
DrawStyle=PTDS_Regular
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=250.000000,Max=500.000000))
End Object
Emitters(6)=MeshEmitter'MeshEmitter28'
Begin Object Class=SpriteEmitter Name=SpriteEmitter113
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=30
Name="SpriteEmitter113"
AddLocationFromOtherEmitter=1
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=30.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(7)=SpriteEmitter'SpriteEmitter113'
Begin Object Class=SpriteEmitter Name=SpriteEmitter114
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=60
Name="SpriteEmitter114"
AddLocationFromOtherEmitter=2
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=60.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(8)=SpriteEmitter'SpriteEmitter114'
Begin Object Class=SpriteEmitter Name=SpriteEmitter115
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=30
Name="SpriteEmitter115"
AddLocationFromOtherEmitter=4
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=30.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(9)=SpriteEmitter'SpriteEmitter115'
Begin Object Class=SpriteEmitter Name=SpriteEmitter116
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=30
Name="SpriteEmitter116"
AddLocationFromOtherEmitter=5
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=30.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(10)=SpriteEmitter'SpriteEmitter116'
AutoDestroy=False
// Style=STY_Masked
bUnlit=false
bDirectional=True
bNoDelete=false
RemoteRole=ROLE_None
// bNetTemporary=true
LifeSpan = 10
}

View file

@ -0,0 +1,309 @@
class BileExplosionHeadless extends FleshHitEmitter;
defaultproperties
{
Begin Object Class=SpriteEmitter Name=SpriteEmitter136
FadeOut=True
RespawnDeadParticles=False
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
Acceleration=(Z=-500.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
FadeOutStartTime=0.200000
MaxParticles=2
Name="SpriteEmitter136"
SizeScale(1)=(RelativeTime=0.070000,RelativeSize=1.000000)
SizeScale(2)=(RelativeTime=1.000000,RelativeSize=2.000000)
InitialParticlesPerSecond=1000.000000
DrawStyle=PTDS_AlphaBlend
Texture=Texture'kf_fx_trip_t.Gore.bloat_explode_blood'
LifetimeRange=(Min=1.000000,Max=1.000000)
StartVelocityRange=(X=(Min=-50.000000,Max=50.000000),Y=(Min=-50.000000,Max=50.000000),Z=(Min=150.000000,Max=300.000000))
End Object
Emitters(0)=SpriteEmitter'SpriteEmitter136'
Begin Object Class=MeshEmitter Name=MeshEmitter38
StaticMesh=StaticMesh'kf_gore_trip_sm.limbs.bloat_arm_resource'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
MaxCollisions=(Max=2.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=1
Name="MeshEmitter38"
StartLocationRange=(Z=(Min=10.000000,Max=64.000000))
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=1.150000,Max=1.150000),Y=(Min=1.150000,Max=1.150000),Z=(Min=1.150000,Max=1.150000))
InitialParticlesPerSecond=1000.000000
LifetimeRange=(Min=10.000000,Max=10.000000)
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=250.000000,Max=500.000000))
End Object
Emitters(1)=MeshEmitter'MeshEmitter38'
Begin Object Class=MeshEmitter Name=MeshEmitter39
StaticMesh=StaticMesh'EffectsSM.PlayerGibbs.Chunk1_Gibb'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=30
Name="MeshEmitter39"
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=0.500000,Max=2.000000),Y=(Min=0.500000,Max=2.000000),Z=(Min=0.500000,Max=2.000000))
InitialParticlesPerSecond=1000.000000
LifetimeRange=(Min=10.000000,Max=10.000000)
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=1000.000000))
VelocityLossRange=(Z=(Min=1.000000,Max=1.000000))
End Object
Emitters(2)=MeshEmitter'MeshEmitter39'
Begin Object Class=SpriteEmitter Name=SpriteEmitter137
RespawnDeadParticles=False
SpawnOnlyInDirectionOfNormal=True
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
ScaleSizeYByVelocity=True
ScaleSizeZByVelocity=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
Acceleration=(Z=-200.000000)
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=96,G=160,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=1.000000
MaxParticles=8
Name="SpriteEmitter137"
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=5.000000)
StartMassRange=(Min=11.000000,Max=11.000000)
UseRotationFrom=PTRS_Normal
SpinsPerSecondRange=(X=(Min=-0.300000,Max=0.300000))
StartSpinRange=(X=(Min=-0.500000,Max=0.500000))
SizeScale(0)=(RelativeSize=1.000000)
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=2.500000)
StartSizeRange=(X=(Min=30.000000,Max=30.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=3.000000
InitialParticlesPerSecond=500.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_b_diff'
TextureUSubdivisions=4
TextureVSubdivisions=4
LifetimeRange=(Min=0.500000,Max=0.500000)
StartVelocityRange=(X=(Min=-150.000000,Max=150.000000),Y=(Min=-150.000000,Max=150.000000),Z=(Min=100.000000,Max=100.000000))
End Object
Emitters(3)=SpriteEmitter'SpriteEmitter137'
Begin Object Class=MeshEmitter Name=MeshEmitter40
StaticMesh=StaticMesh'kf_gore_trip_sm.limbs.bloat_arm_resource'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
MaxCollisions=(Max=2.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=1
Name="MeshEmitter40"
StartLocationRange=(X=(Min=-16.000000,Max=16.000000),Y=(Min=-16.000000,Max=16.000000),Z=(Min=12.000000,Max=64.000000))
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=1.150000,Max=1.150000),Y=(Min=1.150000,Max=1.150000),Z=(Min=1.150000,Max=1.150000))
InitialParticlesPerSecond=1000.000000
LifetimeRange=(Min=10.000000,Max=10.000000)
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=250.000000,Max=500.000000))
End Object
Emitters(4)=MeshEmitter'MeshEmitter40'
Begin Object Class=MeshEmitter Name=MeshEmitter42
StaticMesh=StaticMesh'kf_gore_trip_sm.gibbs.intestines'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
MaxCollisions=(Max=2.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=1
Name="MeshEmitter42"
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
InitialParticlesPerSecond=1000.000000
DrawStyle=PTDS_Regular
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=250.000000,Max=500.000000))
End Object
Emitters(5)=MeshEmitter'MeshEmitter42'
Begin Object Class=SpriteEmitter Name=SpriteEmitter138
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=30
Name="SpriteEmitter138"
AddLocationFromOtherEmitter=1
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=30.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(6)=SpriteEmitter'SpriteEmitter138'
Begin Object Class=SpriteEmitter Name=SpriteEmitter139
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=60
Name="SpriteEmitter139"
AddLocationFromOtherEmitter=2
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=60.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(7)=SpriteEmitter'SpriteEmitter139'
Begin Object Class=SpriteEmitter Name=SpriteEmitter140
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=30
Name="SpriteEmitter140"
AddLocationFromOtherEmitter=4
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=30.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(8)=SpriteEmitter'SpriteEmitter140'
Begin Object Class=SpriteEmitter Name=SpriteEmitter141
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=30
Name="SpriteEmitter141"
AddLocationFromOtherEmitter=5
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=30.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(9)=SpriteEmitter'SpriteEmitter141'
AutoDestroy=True
// Style=STY_Masked
bUnlit=false
bDirectional=True
bNoDelete=false
RemoteRole=ROLE_None
bNetTemporary=true
LifeSpan = 10
}

View file

@ -0,0 +1,309 @@
class BileExplosionHeadless_Circus extends FleshHitEmitter;
defaultproperties
{
Begin Object Class=SpriteEmitter Name=SpriteEmitter136
FadeOut=True
RespawnDeadParticles=False
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
Acceleration=(Z=-500.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
FadeOutStartTime=0.200000
MaxParticles=2
Name="SpriteEmitter136"
SizeScale(1)=(RelativeTime=0.070000,RelativeSize=1.000000)
SizeScale(2)=(RelativeTime=1.000000,RelativeSize=2.000000)
InitialParticlesPerSecond=1000.000000
DrawStyle=PTDS_AlphaBlend
Texture=Texture'kf_fx_trip_t.Gore.bloat_explode_blood'
LifetimeRange=(Min=1.000000,Max=1.000000)
StartVelocityRange=(X=(Min=-50.000000,Max=50.000000),Y=(Min=-50.000000,Max=50.000000),Z=(Min=150.000000,Max=300.000000))
End Object
Emitters(0)=SpriteEmitter'SpriteEmitter136'
Begin Object Class=MeshEmitter Name=MeshEmitter38
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.bloat_clown_Arm_Gore'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
MaxCollisions=(Max=2.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=1
Name="MeshEmitter38"
StartLocationRange=(Z=(Min=10.000000,Max=64.000000))
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=1.150000,Max=1.150000),Y=(Min=1.150000,Max=1.150000),Z=(Min=1.150000,Max=1.150000))
InitialParticlesPerSecond=1000.000000
LifetimeRange=(Min=10.000000,Max=10.000000)
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=250.000000,Max=500.000000))
End Object
Emitters(1)=MeshEmitter'MeshEmitter38'
Begin Object Class=MeshEmitter Name=MeshEmitter39
StaticMesh=StaticMesh'EffectsSM.PlayerGibbs.Chunk1_Gibb'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=30
Name="MeshEmitter39"
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=0.500000,Max=2.000000),Y=(Min=0.500000,Max=2.000000),Z=(Min=0.500000,Max=2.000000))
InitialParticlesPerSecond=1000.000000
LifetimeRange=(Min=10.000000,Max=10.000000)
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=1000.000000))
VelocityLossRange=(Z=(Min=1.000000,Max=1.000000))
End Object
Emitters(2)=MeshEmitter'MeshEmitter39'
Begin Object Class=SpriteEmitter Name=SpriteEmitter137
RespawnDeadParticles=False
SpawnOnlyInDirectionOfNormal=True
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
ScaleSizeYByVelocity=True
ScaleSizeZByVelocity=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
Acceleration=(Z=-200.000000)
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=96,G=160,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=1.000000
MaxParticles=8
Name="SpriteEmitter137"
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=5.000000)
StartMassRange=(Min=11.000000,Max=11.000000)
UseRotationFrom=PTRS_Normal
SpinsPerSecondRange=(X=(Min=-0.300000,Max=0.300000))
StartSpinRange=(X=(Min=-0.500000,Max=0.500000))
SizeScale(0)=(RelativeSize=1.000000)
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=2.500000)
StartSizeRange=(X=(Min=30.000000,Max=30.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=3.000000
InitialParticlesPerSecond=500.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_b_diff'
TextureUSubdivisions=4
TextureVSubdivisions=4
LifetimeRange=(Min=0.500000,Max=0.500000)
StartVelocityRange=(X=(Min=-150.000000,Max=150.000000),Y=(Min=-150.000000,Max=150.000000),Z=(Min=100.000000,Max=100.000000))
End Object
Emitters(3)=SpriteEmitter'SpriteEmitter137'
Begin Object Class=MeshEmitter Name=MeshEmitter40
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.bloat_clown_Arm_Gore'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
MaxCollisions=(Max=2.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=1
Name="MeshEmitter40"
StartLocationRange=(X=(Min=-16.000000,Max=16.000000),Y=(Min=-16.000000,Max=16.000000),Z=(Min=12.000000,Max=64.000000))
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=1.150000,Max=1.150000),Y=(Min=1.150000,Max=1.150000),Z=(Min=1.150000,Max=1.150000))
InitialParticlesPerSecond=1000.000000
LifetimeRange=(Min=10.000000,Max=10.000000)
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=250.000000,Max=500.000000))
End Object
Emitters(4)=MeshEmitter'MeshEmitter40'
Begin Object Class=MeshEmitter Name=MeshEmitter42
StaticMesh=StaticMesh'kf_gore_trip_sm.gibbs.intestines'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
MaxCollisions=(Max=2.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=1
Name="MeshEmitter42"
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
InitialParticlesPerSecond=1000.000000
DrawStyle=PTDS_Regular
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=250.000000,Max=500.000000))
End Object
Emitters(5)=MeshEmitter'MeshEmitter42'
Begin Object Class=SpriteEmitter Name=SpriteEmitter138
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=30
Name="SpriteEmitter138"
AddLocationFromOtherEmitter=1
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=30.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(6)=SpriteEmitter'SpriteEmitter138'
Begin Object Class=SpriteEmitter Name=SpriteEmitter139
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=60
Name="SpriteEmitter139"
AddLocationFromOtherEmitter=2
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=60.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(7)=SpriteEmitter'SpriteEmitter139'
Begin Object Class=SpriteEmitter Name=SpriteEmitter140
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=30
Name="SpriteEmitter140"
AddLocationFromOtherEmitter=4
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=30.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(8)=SpriteEmitter'SpriteEmitter140'
Begin Object Class=SpriteEmitter Name=SpriteEmitter141
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=30
Name="SpriteEmitter141"
AddLocationFromOtherEmitter=5
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=30.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(9)=SpriteEmitter'SpriteEmitter141'
AutoDestroy=True
// Style=STY_Masked
bUnlit=false
bDirectional=True
bNoDelete=false
RemoteRole=ROLE_None
bNetTemporary=true
LifeSpan = 10
}

View file

@ -0,0 +1,309 @@
class BileExplosionHeadless_Halloween extends FleshHitEmitter;
defaultproperties
{
Begin Object Class=SpriteEmitter Name=SpriteEmitter136
FadeOut=True
RespawnDeadParticles=False
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
Acceleration=(Z=-500.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
FadeOutStartTime=0.200000
MaxParticles=2
Name="SpriteEmitter136"
SizeScale(1)=(RelativeTime=0.070000,RelativeSize=1.000000)
SizeScale(2)=(RelativeTime=1.000000,RelativeSize=2.000000)
InitialParticlesPerSecond=1000.000000
DrawStyle=PTDS_AlphaBlend
Texture=Texture'kf_fx_trip_t.Gore.bloat_explode_blood'
LifetimeRange=(Min=1.000000,Max=1.000000)
StartVelocityRange=(X=(Min=-50.000000,Max=50.000000),Y=(Min=-50.000000,Max=50.000000),Z=(Min=150.000000,Max=300.000000))
End Object
Emitters(0)=SpriteEmitter'SpriteEmitter136'
Begin Object Class=MeshEmitter Name=MeshEmitter38
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Bloat.Bloat_RedneckZombie_ArmGore'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
MaxCollisions=(Max=2.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=1
Name="MeshEmitter38"
StartLocationRange=(Z=(Min=10.000000,Max=64.000000))
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=1.150000,Max=1.150000),Y=(Min=1.150000,Max=1.150000),Z=(Min=1.150000,Max=1.150000))
InitialParticlesPerSecond=1000.000000
LifetimeRange=(Min=10.000000,Max=10.000000)
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=250.000000,Max=500.000000))
End Object
Emitters(1)=MeshEmitter'MeshEmitter38'
Begin Object Class=MeshEmitter Name=MeshEmitter39
StaticMesh=StaticMesh'EffectsSM.PlayerGibbs.Chunk1_Gibb'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=30
Name="MeshEmitter39"
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=0.500000,Max=2.000000),Y=(Min=0.500000,Max=2.000000),Z=(Min=0.500000,Max=2.000000))
InitialParticlesPerSecond=1000.000000
LifetimeRange=(Min=10.000000,Max=10.000000)
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=1000.000000))
VelocityLossRange=(Z=(Min=1.000000,Max=1.000000))
End Object
Emitters(2)=MeshEmitter'MeshEmitter39'
Begin Object Class=SpriteEmitter Name=SpriteEmitter137
RespawnDeadParticles=False
SpawnOnlyInDirectionOfNormal=True
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
ScaleSizeYByVelocity=True
ScaleSizeZByVelocity=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
Acceleration=(Z=-200.000000)
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=96,G=160,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=1.000000
MaxParticles=8
Name="SpriteEmitter137"
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=5.000000)
StartMassRange=(Min=11.000000,Max=11.000000)
UseRotationFrom=PTRS_Normal
SpinsPerSecondRange=(X=(Min=-0.300000,Max=0.300000))
StartSpinRange=(X=(Min=-0.500000,Max=0.500000))
SizeScale(0)=(RelativeSize=1.000000)
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=2.500000)
StartSizeRange=(X=(Min=30.000000,Max=30.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=3.000000
InitialParticlesPerSecond=500.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_b_diff'
TextureUSubdivisions=4
TextureVSubdivisions=4
LifetimeRange=(Min=0.500000,Max=0.500000)
StartVelocityRange=(X=(Min=-150.000000,Max=150.000000),Y=(Min=-150.000000,Max=150.000000),Z=(Min=100.000000,Max=100.000000))
End Object
Emitters(3)=SpriteEmitter'SpriteEmitter137'
Begin Object Class=MeshEmitter Name=MeshEmitter40
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Bloat.Bloat_RedneckZombie_ArmGore'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
MaxCollisions=(Max=2.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=1
Name="MeshEmitter40"
StartLocationRange=(X=(Min=-16.000000,Max=16.000000),Y=(Min=-16.000000,Max=16.000000),Z=(Min=12.000000,Max=64.000000))
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=1.150000,Max=1.150000),Y=(Min=1.150000,Max=1.150000),Z=(Min=1.150000,Max=1.150000))
InitialParticlesPerSecond=1000.000000
LifetimeRange=(Min=10.000000,Max=10.000000)
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=250.000000,Max=500.000000))
End Object
Emitters(4)=MeshEmitter'MeshEmitter40'
Begin Object Class=MeshEmitter Name=MeshEmitter42
StaticMesh=StaticMesh'kf_gore_trip_sm.gibbs.intestines'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
MaxCollisions=(Max=2.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=1
Name="MeshEmitter42"
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
InitialParticlesPerSecond=1000.000000
DrawStyle=PTDS_Regular
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=250.000000,Max=500.000000))
End Object
Emitters(5)=MeshEmitter'MeshEmitter42'
Begin Object Class=SpriteEmitter Name=SpriteEmitter138
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=30
Name="SpriteEmitter138"
AddLocationFromOtherEmitter=1
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=30.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(6)=SpriteEmitter'SpriteEmitter138'
Begin Object Class=SpriteEmitter Name=SpriteEmitter139
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=60
Name="SpriteEmitter139"
AddLocationFromOtherEmitter=2
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=60.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(7)=SpriteEmitter'SpriteEmitter139'
Begin Object Class=SpriteEmitter Name=SpriteEmitter140
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=30
Name="SpriteEmitter140"
AddLocationFromOtherEmitter=4
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=30.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(8)=SpriteEmitter'SpriteEmitter140'
Begin Object Class=SpriteEmitter Name=SpriteEmitter141
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=30
Name="SpriteEmitter141"
AddLocationFromOtherEmitter=5
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=30.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(9)=SpriteEmitter'SpriteEmitter141'
AutoDestroy=True
// Style=STY_Masked
bUnlit=false
bDirectional=True
bNoDelete=false
RemoteRole=ROLE_None
bNetTemporary=true
LifeSpan = 10
}

View file

@ -0,0 +1,332 @@
class BileExplosion_Circus extends FleshHitEmitter;
defaultproperties
{
Begin Object Class=SpriteEmitter Name=SpriteEmitter103
FadeOut=True
RespawnDeadParticles=False
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
Acceleration=(Z=-500.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
FadeOutStartTime=0.200000
MaxParticles=2
Name="SpriteEmitter103"
SizeScale(1)=(RelativeTime=0.070000,RelativeSize=1.000000)
SizeScale(2)=(RelativeTime=1.000000,RelativeSize=2.000000)
InitialParticlesPerSecond=1000.000000
DrawStyle=PTDS_AlphaBlend
Texture=Texture'kf_fx_trip_t.Gore.bloat_explode_blood'
LifetimeRange=(Min=1.000000,Max=1.000000)
StartVelocityRange=(X=(Min=-50.000000,Max=50.000000),Y=(Min=-50.000000,Max=50.000000),Z=(Min=150.000000,Max=300.000000))
End Object
Emitters(0)=SpriteEmitter'SpriteEmitter103'
Begin Object Class=MeshEmitter Name=MeshEmitter24
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.bloat_clown_Arm_Gore'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
MaxCollisions=(Max=2.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=1
Name="MeshEmitter24"
StartLocationRange=(Z=(Min=10.000000,Max=64.000000))
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=1.150000,Max=1.150000),Y=(Min=1.150000,Max=1.150000),Z=(Min=1.150000,Max=1.150000))
InitialParticlesPerSecond=1000.000000
LifetimeRange=(Min=10.000000,Max=10.000000)
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=250.000000,Max=500.000000))
End Object
Emitters(1)=MeshEmitter'MeshEmitter24'
Begin Object Class=MeshEmitter Name=MeshEmitter25
StaticMesh=StaticMesh'EffectsSM.PlayerGibbs.Chunk1_Gibb'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=30
Name="MeshEmitter25"
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=0.500000,Max=2.000000),Y=(Min=0.500000,Max=2.000000),Z=(Min=0.500000,Max=2.000000))
InitialParticlesPerSecond=1000.000000
LifetimeRange=(Min=10.000000,Max=10.000000)
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=1000.000000))
VelocityLossRange=(Z=(Min=1.000000,Max=1.000000))
End Object
Emitters(2)=MeshEmitter'MeshEmitter25'
Begin Object Class=SpriteEmitter Name=SpriteEmitter109
RespawnDeadParticles=False
SpawnOnlyInDirectionOfNormal=True
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
ScaleSizeYByVelocity=True
ScaleSizeZByVelocity=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
Acceleration=(Z=-200.000000)
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=96,G=160,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=1.000000
MaxParticles=8
Name="SpriteEmitter109"
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=5.000000)
StartMassRange=(Min=11.000000,Max=11.000000)
UseRotationFrom=PTRS_Normal
SpinsPerSecondRange=(X=(Min=-0.300000,Max=0.300000))
StartSpinRange=(X=(Min=-0.500000,Max=0.500000))
SizeScale(0)=(RelativeSize=1.000000)
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=2.500000)
StartSizeRange=(X=(Min=30.000000,Max=30.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=3.000000
InitialParticlesPerSecond=500.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_b_diff'
TextureUSubdivisions=4
TextureVSubdivisions=4
LifetimeRange=(Min=0.500000,Max=0.500000)
StartVelocityRange=(X=(Min=-150.000000,Max=150.000000),Y=(Min=-150.000000,Max=150.000000),Z=(Min=100.000000,Max=100.000000))
End Object
Emitters(3)=SpriteEmitter'SpriteEmitter109'
Begin Object Class=MeshEmitter Name=MeshEmitter26
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.bloat_clown_Arm_Gore'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
MaxCollisions=(Max=2.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=1
Name="MeshEmitter26"
StartLocationRange=(X=(Min=-16.000000,Max=16.000000),Y=(Min=-16.000000,Max=16.000000),Z=(Min=12.000000,Max=64.000000))
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=1.150000,Max=1.150000),Y=(Min=1.150000,Max=1.150000),Z=(Min=1.150000,Max=1.150000))
InitialParticlesPerSecond=1000.000000
LifetimeRange=(Min=10.000000,Max=10.000000)
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=250.000000,Max=500.000000))
End Object
Emitters(4)=MeshEmitter'MeshEmitter26'
Begin Object Class=MeshEmitter Name=MeshEmitter27
StaticMesh=StaticMesh'kf_gore_trip_sm_CIRCUS.limbs.bloat_clown_Head_Gore'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
MaxCollisions=(Max=2.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=1
Name="MeshEmitter27"
StartLocationRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=90.000000,Max=90.000000))
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=1.150000,Max=1.150000),Y=(Min=1.150000,Max=1.150000),Z=(Min=1.150000,Max=1.150000))
InitialParticlesPerSecond=1000.000000
LifetimeRange=(Min=10.000000,Max=10.000000)
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=250.000000,Max=500.000000))
End Object
Emitters(5)=MeshEmitter'MeshEmitter27'
Begin Object Class=MeshEmitter Name=MeshEmitter28
StaticMesh=StaticMesh'kf_gore_trip_sm.gibbs.intestines'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
MaxCollisions=(Max=2.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=1
Name="MeshEmitter28"
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
InitialParticlesPerSecond=1000.000000
DrawStyle=PTDS_Regular
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=250.000000,Max=500.000000))
End Object
Emitters(6)=MeshEmitter'MeshEmitter28'
Begin Object Class=SpriteEmitter Name=SpriteEmitter113
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=30
Name="SpriteEmitter113"
AddLocationFromOtherEmitter=1
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=30.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(7)=SpriteEmitter'SpriteEmitter113'
Begin Object Class=SpriteEmitter Name=SpriteEmitter114
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=60
Name="SpriteEmitter114"
AddLocationFromOtherEmitter=2
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=60.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(8)=SpriteEmitter'SpriteEmitter114'
Begin Object Class=SpriteEmitter Name=SpriteEmitter115
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=30
Name="SpriteEmitter115"
AddLocationFromOtherEmitter=4
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=30.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(9)=SpriteEmitter'SpriteEmitter115'
Begin Object Class=SpriteEmitter Name=SpriteEmitter116
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=30
Name="SpriteEmitter116"
AddLocationFromOtherEmitter=5
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=30.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(10)=SpriteEmitter'SpriteEmitter116'
AutoDestroy=False
// Style=STY_Masked
bUnlit=false
bDirectional=True
bNoDelete=false
RemoteRole=ROLE_None
// bNetTemporary=true
LifeSpan = 10
}

View file

@ -0,0 +1,332 @@
class BileExplosion_Halloween extends FleshHitEmitter;
defaultproperties
{
Begin Object Class=SpriteEmitter Name=SpriteEmitter103
FadeOut=True
RespawnDeadParticles=False
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
Acceleration=(Z=-500.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
FadeOutStartTime=0.200000
MaxParticles=2
Name="SpriteEmitter103"
SizeScale(1)=(RelativeTime=0.070000,RelativeSize=1.000000)
SizeScale(2)=(RelativeTime=1.000000,RelativeSize=2.000000)
InitialParticlesPerSecond=1000.000000
DrawStyle=PTDS_AlphaBlend
Texture=Texture'kf_fx_trip_t.Gore.bloat_explode_blood'
LifetimeRange=(Min=1.000000,Max=1.000000)
StartVelocityRange=(X=(Min=-50.000000,Max=50.000000),Y=(Min=-50.000000,Max=50.000000),Z=(Min=150.000000,Max=300.000000))
End Object
Emitters(0)=SpriteEmitter'SpriteEmitter103'
Begin Object Class=MeshEmitter Name=MeshEmitter24
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Bloat.Bloat_RedneckZombie_ArmGore'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
MaxCollisions=(Max=2.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=1
Name="MeshEmitter24"
StartLocationRange=(Z=(Min=10.000000,Max=64.000000))
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=1.150000,Max=1.150000),Y=(Min=1.150000,Max=1.150000),Z=(Min=1.150000,Max=1.150000))
InitialParticlesPerSecond=1000.000000
LifetimeRange=(Min=10.000000,Max=10.000000)
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=250.000000,Max=500.000000))
End Object
Emitters(1)=MeshEmitter'MeshEmitter24'
Begin Object Class=MeshEmitter Name=MeshEmitter25
StaticMesh=StaticMesh'EffectsSM.PlayerGibbs.Chunk1_Gibb'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=30
Name="MeshEmitter25"
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=0.500000,Max=2.000000),Y=(Min=0.500000,Max=2.000000),Z=(Min=0.500000,Max=2.000000))
InitialParticlesPerSecond=1000.000000
LifetimeRange=(Min=10.000000,Max=10.000000)
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=1000.000000))
VelocityLossRange=(Z=(Min=1.000000,Max=1.000000))
End Object
Emitters(2)=MeshEmitter'MeshEmitter25'
Begin Object Class=SpriteEmitter Name=SpriteEmitter109
RespawnDeadParticles=False
SpawnOnlyInDirectionOfNormal=True
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
ScaleSizeYByVelocity=True
ScaleSizeZByVelocity=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
Acceleration=(Z=-200.000000)
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=96,G=160,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=1.000000
MaxParticles=8
Name="SpriteEmitter109"
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=5.000000)
StartMassRange=(Min=11.000000,Max=11.000000)
UseRotationFrom=PTRS_Normal
SpinsPerSecondRange=(X=(Min=-0.300000,Max=0.300000))
StartSpinRange=(X=(Min=-0.500000,Max=0.500000))
SizeScale(0)=(RelativeSize=1.000000)
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=2.500000)
StartSizeRange=(X=(Min=30.000000,Max=30.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=3.000000
InitialParticlesPerSecond=500.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_b_diff'
TextureUSubdivisions=4
TextureVSubdivisions=4
LifetimeRange=(Min=0.500000,Max=0.500000)
StartVelocityRange=(X=(Min=-150.000000,Max=150.000000),Y=(Min=-150.000000,Max=150.000000),Z=(Min=100.000000,Max=100.000000))
End Object
Emitters(3)=SpriteEmitter'SpriteEmitter109'
Begin Object Class=MeshEmitter Name=MeshEmitter26
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Bloat.Bloat_RedneckZombie_ArmGore'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
MaxCollisions=(Max=2.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=1
Name="MeshEmitter26"
StartLocationRange=(X=(Min=-16.000000,Max=16.000000),Y=(Min=-16.000000,Max=16.000000),Z=(Min=12.000000,Max=64.000000))
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=1.150000,Max=1.150000),Y=(Min=1.150000,Max=1.150000),Z=(Min=1.150000,Max=1.150000))
InitialParticlesPerSecond=1000.000000
LifetimeRange=(Min=10.000000,Max=10.000000)
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=250.000000,Max=500.000000))
End Object
Emitters(4)=MeshEmitter'MeshEmitter26'
Begin Object Class=MeshEmitter Name=MeshEmitter27
StaticMesh=StaticMesh'kf_gore_trip_sm_HALLOWEEN.Redneck_Bloat.Bloat_RedneckZombie_HeadGore'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
MaxCollisions=(Max=2.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=1
Name="MeshEmitter27"
StartLocationRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=90.000000,Max=90.000000))
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSizeRange=(X=(Min=1.150000,Max=1.150000),Y=(Min=1.150000,Max=1.150000),Z=(Min=1.150000,Max=1.150000))
InitialParticlesPerSecond=1000.000000
LifetimeRange=(Min=10.000000,Max=10.000000)
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=250.000000,Max=500.000000))
End Object
Emitters(5)=MeshEmitter'MeshEmitter27'
Begin Object Class=MeshEmitter Name=MeshEmitter28
StaticMesh=StaticMesh'kf_gore_trip_sm.gibbs.intestines'
UseCollision=True
RespawnDeadParticles=False
SpinParticles=True
DampRotation=True
AutomaticInitialSpawning=False
Acceleration=(Z=-1000.000000)
DampingFactorRange=(X=(Min=0.200000,Max=0.500000),Y=(Min=0.200000,Max=0.500000),Z=(Min=0.200000,Max=0.500000))
MaxCollisions=(Max=2.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
MaxParticles=1
Name="MeshEmitter28"
SpinsPerSecondRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
InitialParticlesPerSecond=1000.000000
DrawStyle=PTDS_Regular
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=250.000000,Max=500.000000))
End Object
Emitters(6)=MeshEmitter'MeshEmitter28'
Begin Object Class=SpriteEmitter Name=SpriteEmitter113
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=30
Name="SpriteEmitter113"
AddLocationFromOtherEmitter=1
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=30.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(7)=SpriteEmitter'SpriteEmitter113'
Begin Object Class=SpriteEmitter Name=SpriteEmitter114
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=60
Name="SpriteEmitter114"
AddLocationFromOtherEmitter=2
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=60.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(8)=SpriteEmitter'SpriteEmitter114'
Begin Object Class=SpriteEmitter Name=SpriteEmitter115
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=30
Name="SpriteEmitter115"
AddLocationFromOtherEmitter=4
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=30.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(9)=SpriteEmitter'SpriteEmitter115'
Begin Object Class=SpriteEmitter Name=SpriteEmitter116
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
FadeOutStartTime=0.850000
MaxParticles=30
Name="SpriteEmitter116"
AddLocationFromOtherEmitter=5
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=30.000000
DrawStyle=PTDS_Modulated
Texture=Texture'kf_fx_trip_t.Gore.kf_bloodspray_e_diff'
TextureUSubdivisions=8
TextureVSubdivisions=4
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(10)=SpriteEmitter'SpriteEmitter116'
AutoDestroy=False
// Style=STY_Masked
bUnlit=false
bDirectional=True
bNoDelete=false
RemoteRole=ROLE_None
// bNetTemporary=true
LifeSpan = 10
}

View file

@ -0,0 +1,37 @@
//-----------------------------------------------------------
//
//-----------------------------------------------------------
class BileJet extends Actor;
var() rotator BileRotation;
function PostBeginPlay()
{
settimer(0.1, false);
}
simulated function timer()
{
local vector X,Y,Z;
local int i;
local rotator R;
GetAxes(Rotation,X,Y,Z);
// Randomly chuch out vomit globs
for (i = 0; i < 4; i++)
{
R.Yaw = BileRotation.Yaw * FRand();
R.Pitch = BileRotation.Pitch;
R.Roll = BileRotation.Roll;
Spawn(Class'KFMod.KFBloatVomit',,,Location,Rotator(X >> R));
}
}
defaultproperties
{
bHidden=True
LifeSpan=2.500000
BileRotation=(Pitch=2000,Yaw=65535,Roll=0)
}

View file

@ -0,0 +1,16 @@
class Blinds extends Decoration;
simulated function PostBeginPlay()
{
if( Level.NetMode!=NM_DedicatedServer )
LoopAnim('bLow');
}
defaultproperties
{
bStatic=False
bStasis=False
Mesh=SkeletalMesh'KFMapObjects.Blinds'
bNoDelete=True
RemoteRole=ROLE_None
}

View file

@ -0,0 +1,15 @@
class BloodySheet extends Decoration;
simulated function PostBeginPlay()
{
if( Level.NetMode!=NM_DedicatedServer )
LoopAnim('Sway');
}
defaultproperties
{
bStatic=False
Mesh=SkeletalMesh'KFMapObjects.BloodySheet'
bNoDelete=True
RemoteRole=ROLE_None
}

View file

@ -0,0 +1,18 @@
//=============================================================================
// BlowerBileAltProjectile
//=============================================================================
// Projectile class for the bloat bile thrower secondary fire
//=============================================================================
// Killing Floor Source
// Copyright (C) 2013 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class BlowerBileAltProjectile extends BlowerBileProjectile;
defaultproperties
{
Speed=500.0
MaxSpeed=500.0
TossZ=+100.0
}

View file

@ -0,0 +1,203 @@
//=============================================================================
// BlowerBileProjectile
//=============================================================================
// Projectile class for the bloat bile thrower
//=============================================================================
// Killing Floor Source
// Copyright (C) 2013 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class BlowerBileProjectile extends ShotgunBullet;
var Emitter ExtraTrail;
simulated function PostBeginPlay()
{
SetTimer(0.2, true);
Velocity = Speed * Vector(Rotation);
if ( Level.NetMode != NM_DedicatedServer )
{
if ( !PhysicsVolume.bWaterVolume )
{
ExtraTrail = Spawn(class'BlowerThrowerSecondaryEmitter',self);
Trail = Spawn(class'BlowerThrowerPrimaryEmitter',self);
}
}
Velocity.z += TossZ;
}
simulated function PostNetBeginPlay()
{
local PlayerController PC;
Super.PostNetBeginPlay();
if ( Level.NetMode == NM_DedicatedServer )
{
return;
}
if ( Level.bDropDetail || (Level.DetailMode == DM_Low) )
{
bDynamicLight = false;
LightType = LT_None;
}
else
{
PC = Level.GetLocalPlayerController();
if ( (Instigator != None) && (PC == Instigator.Controller) )
{
return;
}
if ( (PC == None) || (PC.ViewTarget == None) || (VSize(PC.ViewTarget.Location - Location) > 3000) )
{
bDynamicLight = false;
LightType = LT_None;
}
}
}
simulated function Landed( vector HitNormal )
{
Explode(Location,HitNormal);
}
simulated function Explode(vector HitLocation,vector HitNormal)
{
if ( Role == ROLE_Authority )
{
HurtRadius(Damage, DamageRadius, MyDamageType, MomentumTransfer, HitLocation );
}
PlaySound(ImpactSound, SLOT_Misc);
if ( KFHumanPawn(Instigator) != none )
{
if ( EffectIsRelevant(Location,false) )
{
Spawn(ExplosionDecal,self,,Location, rotator(-HitNormal));
Spawn(class'KFMod.VomGroundSplash',self,,HitLocation,rotator(HitNormal));
}
}
SetCollisionSize(0.0, 0.0);
Destroy();
}
simulated function Destroyed()
{
if ( Trail != none )
{
Trail.mRegen=False;
Trail.SetPhysics(PHYS_None);
}
if ( ExtraTrail != none )
{
ExtraTrail.Kill();
ExtraTrail.SetPhysics(PHYS_None);
}
Super.Destroyed();
}
function ProcessTouch (Actor Other, vector HitLocation)
{
if ( Other == none || Other == Instigator || Other.Base == Instigator )
return;
// Don't spawn an explosion if low gore is on
if ( Other != Instigator && class'GameInfo'.static.UseLowGore() && Other.IsA('KFMonster') )
{
if ( Role == ROLE_Authority )
{
HurtRadius(Damage, DamageRadius, MyDamageType, MomentumTransfer, HitLocation );
}
if ( KFHumanPawn(Instigator) != none )
{
if ( EffectIsRelevant(Location,false) )
{
Spawn(ExplosionDecal,self,,Location, Rotator(-Location));
}
}
SetCollisionSize(0.0, 0.0);
Destroy();
}
else if ( Other != Instigator && !Other.IsA('FlameTendril') && !Other.IsA('FuelFlame') && !Other.IsA('PhysicsVolume') )
{
Explode(self.Location,self.Location);
}
}
simulated singular function HitWall(vector HitNormal, actor Wall)
{
if ( Role == ROLE_Authority )
{
if ( !Wall.bStatic && !Wall.bWorldGeometry )
{
if ( Instigator == None || Instigator.Controller == None )
{
Wall.SetDelayedDamageInstigatorController( InstigatorController );
}
Wall.TakeDamage( Damage, instigator, Location, MomentumTransfer * Normal(Velocity), MyDamageType);
if ( DamageRadius > 0 && Vehicle(Wall) != None && Vehicle(Wall).Health > 0 )
{
Vehicle(Wall).DriverRadiusDamage(Damage, DamageRadius, InstigatorController, MyDamageType, MomentumTransfer, Location);
}
HurtWall = Wall;
}
MakeNoise(1.0);
}
Explode(Location + ExploWallOut * HitNormal, HitNormal);
HurtWall = None;
}
simulated function Timer()
{
if ( ExtraTrail != none )
{
ExtraTrail.SetDrawScale(ExtraTrail.DrawScale * 1.5);
}
}
defaultproperties
{
MaxPenetrations=1
PenDamageReduction=0
HeadShotDamageMult=1.0
Speed=1000.0
MaxSpeed=1000.0
bSwitchToZeroCollision=True
Damage=30
DamageRadius=120.000000
MomentumTransfer=0.000000
MyDamageType=class'KFMod.DamTypeBlowerThrower'
ExplosionDecal=class'KFMod.VomitDecal'
DrawType=DT_None
StaticMesh=none
CullDistance=3000.000000
LifeSpan=5
DrawScale=5.000000
Style=STY_None
Physics=PHYS_Falling
TossZ=+200.0
RemoteRole=ROLE_SimulatedProxy
bBlockHitPointTraces=false
ImpactSound=Sound'KF_EnemiesFinalSnd.Bloat_AcidSplash'
}

View file

@ -0,0 +1,193 @@
//=============================================================================
// BlowerThrower
//=============================================================================
// Weapon class for the bloat bile thrower
//=============================================================================
// Killing Floor Source
// Copyright (C) 2013 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class BlowerThrower extends KFWeapon;
simulated function bool StartFire(int Mode)
{
if( Mode == 1 )
return super.StartFire(Mode);
if( !super.StartFire(Mode) ) // returns false when mag is empty
return false;
if( AmmoAmount(0) <= 0 )
{
return false;
}
AnimStopLooping();
if( !FireMode[Mode].IsInState('FireLoop') && (AmmoAmount(0) > 0) )
{
FireMode[Mode].StartFiring();
return true;
}
else
{
return false;
}
return true;
}
// Allow this weapon to auto reload on alt fire
simulated function AltFire(float F)
{
if( MagAmmoRemaining < 1 && !bIsReloading &&
FireMode[1].NextFireTime <= Level.TimeSeconds )
{
// We're dry, ask the server to autoreload
ServerRequestAutoReload();
PlayOwnedSound(FireMode[1].NoAmmoSound,SLOT_None,2.0,,,,false);
}
super.AltFire(F);
}
simulated function AnimEnd(int channel)
{
if(!FireMode[0].IsInState('FireLoop'))
{
Super.AnimEnd(channel);
}
}
function bool RecommendRangedAttack()
{
return true;
}
function float SuggestAttackStyle()
{
return -1.0;
}
//TODO: LONG ranged?
function bool RecommendLongRangedAttack()
{
return true;
}
simulated function bool ConsumeAmmo( int Mode, float Load, optional bool bAmountNeededIsMax )
{
local Inventory Inv;
local bool bOutOfAmmo;
local KFWeapon KFWeap;
if ( Super(Weapon).ConsumeAmmo(Mode, Load, bAmountNeededIsMax) )
{
if ( Load > 0 && (Mode == 0 || bReduceMagAmmoOnSecondaryFire) )
MagAmmoRemaining -= Load;
NetUpdateTime = Level.TimeSeconds - 1;
if ( FireMode[Mode].AmmoPerFire > 0 && InventoryGroup > 0 && !bMeleeWeapon && bConsumesPhysicalAmmo &&
(Ammo[0] == none || FireMode[0] == none || FireMode[0].AmmoPerFire <= 0 || Ammo[0].AmmoAmount < FireMode[0].AmmoPerFire) &&
(Ammo[1] == none || FireMode[1] == none || FireMode[1].AmmoPerFire <= 0 || Ammo[1].AmmoAmount < FireMode[1].AmmoPerFire) )
{
bOutOfAmmo = true;
for ( Inv = Instigator.Inventory; Inv != none; Inv = Inv.Inventory )
{
KFWeap = KFWeapon(Inv);
if ( Inv.InventoryGroup > 0 && KFWeap != none && !KFWeap.bMeleeWeapon && KFWeap.bConsumesPhysicalAmmo &&
((KFWeap.Ammo[0] != none && KFWeap.FireMode[0] != none && KFWeap.FireMode[0].AmmoPerFire > 0 &&KFWeap.Ammo[0].AmmoAmount >= KFWeap.FireMode[0].AmmoPerFire) ||
(KFWeap.Ammo[1] != none && KFWeap.FireMode[1] != none && KFWeap.FireMode[1].AmmoPerFire > 0 && KFWeap.Ammo[1].AmmoAmount >= KFWeap.FireMode[1].AmmoPerFire)) )
{
bOutOfAmmo = false;
break;
}
}
if ( bOutOfAmmo )
{
PlayerController(Instigator.Controller).Speech('AUTO', 3, "");
}
}
return true;
}
return false;
}
defaultproperties
{
SkinRefs(0)="KF_IJC_Halloween_Weapons2.BlowerThrower.BlowerThrower_cmb"
SleeveNum=1
WeaponReloadAnim=Reload_IJC_BlowerThrower
MagCapacity=50
ReloadRate=4.14
ReloadAnim="Reload"
ReloadAnimRate=1.0
Weight=6.000000
bModeZeroCanDryFire=True
FireModeClass(0)=Class'KFMod.BlowerThrowerFire'
FireModeClass(1)=Class'KFMod.BlowerThrowerAltFire'
SelectSoundRef="KF_FY_BlowerThrowerSND.WEP_Bile_Foley_Select"
PutDownAnim="PutDown"
SelectSound=none//Sound'KFPlayerSound.getweaponout'
Description="A leaf blower modified to launch deadly bloat bile. Spray it around and watch 'em burn!"
Priority=103
InventoryGroup=3
GroupOffset=21
PickupClass=Class'KFMod.BlowerThrowerPickup'
BobDamping=6.000000
AttachmentClass=Class'KFMod.BlowerThrowerAttachment'
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
ItemName="BlowerThrower"
MeshRef="KF_IJC_Halloween_Weps_2.BlowerThrower"
DrawScale=1.0
TransientSoundVolume=1.250000
AmbientGlow=0
PutDownTime = 0.5
PutDownAnimRate=1.3636
QuickPutDownTime=0.25
PlayerViewOffset=(X=15.000000,Y=20.000000,Z=-3.000000)
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
AIRating=0.7
CurrentRating=0.7
MinimumFireRange = 300
ZoomTime=0.25
FastZoomOutTime=0.2
ZoomInRotation=(Pitch=-1000,Yaw=0,Roll=1500)
bHasAimingMode=true
IdleAimAnim=Idle
DisplayFOV=70.000000
StandardDisplayFOV=70.0
PlayerIronSightFOV=75
ZoomedDisplayFOV=60
HudImageRef="KF_IJC_HUD.WeaponSelect.BlowerThrower_unselected"
SelectedHudImageRef="KF_IJC_HUD.WeaponSelect.BlowerThrower"
TraderInfoTexture=texture'KF_IJC_HUD.Trader_Weapon_Images.Trader_BlowerThrower'
bIsTier2Weapon=true
AppID=258751
}

View file

@ -0,0 +1,127 @@
//=============================================================================
// BlowerThrowerAltFire
//=============================================================================
// Secondary fire mode class for the bloat bile thrower
//=============================================================================
// Killing Floor Source
// Copyright (C) 2013 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class BlowerThrowerAltFire extends KFShotgunFire;
simulated function bool AllowFire()
{
if(KFWeapon(Weapon).bIsReloading)
return false;
if(KFPawn(Instigator).SecondaryItem!=none)
return false;
if(KFPawn(Instigator).bThrowingNade)
return false;
if(KFWeapon(Weapon).MagAmmoRemaining < 1)
{
if( Level.TimeSeconds - LastClickTime>FireRate )
{
LastClickTime = Level.TimeSeconds;
}
if( AIController(Instigator.Controller)!=None )
KFWeapon(Weapon).ReloadMeNow();
return false;
}
return super(WeaponFire).AllowFire();
}
// Handle setting new recoil
simulated function HandleRecoil(float Rec)
{
local rotator NewRecoilRotation;
local KFPlayerController KFPC;
local KFPawn KFPwn;
local vector AdjustedVelocity;
local float AdjustedSpeed;
if( Instigator != none )
{
KFPC = KFPlayerController(Instigator.Controller);
KFPwn = KFPawn(Instigator);
}
if( KFPC == none || KFPwn == none )
return;
if( !KFPC.bFreeCamera )
{
if( Weapon.GetFireMode(1).bIsFiring )
{
NewRecoilRotation.Pitch = RandRange( maxVerticalRecoilAngle * 0.5, maxVerticalRecoilAngle );
NewRecoilRotation.Yaw = RandRange( maxHorizontalRecoilAngle * 0.5, maxHorizontalRecoilAngle );
if( Rand( 2 ) == 1 )
NewRecoilRotation.Yaw *= -1;
if( Weapon.Owner != none && Weapon.Owner.Physics == PHYS_Falling &&
Weapon.Owner.PhysicsVolume.Gravity.Z > class'PhysicsVolume'.default.Gravity.Z )
{
AdjustedVelocity = Weapon.Owner.Velocity;
// Ignore Z velocity in low grav so we don't get massive recoil
AdjustedVelocity.Z = 0;
AdjustedSpeed = VSize(AdjustedVelocity);
//log("AdjustedSpeed = "$AdjustedSpeed$" scale = "$(AdjustedSpeed* RecoilVelocityScale * 0.5));
// Reduce the falling recoil in low grav
NewRecoilRotation.Pitch += (AdjustedSpeed* 3 * 0.5);
NewRecoilRotation.Yaw += (AdjustedSpeed* 3 * 0.5);
}
else
{
//log("Velocity = "$VSize(Weapon.Owner.Velocity)$" scale = "$(VSize(Weapon.Owner.Velocity)* RecoilVelocityScale));
NewRecoilRotation.Pitch += (VSize(Weapon.Owner.Velocity)* 3);
NewRecoilRotation.Yaw += (VSize(Weapon.Owner.Velocity)* 3);
}
NewRecoilRotation.Pitch += (Instigator.HealthMax / Instigator.Health * 5);
NewRecoilRotation.Yaw += (Instigator.HealthMax / Instigator.Health * 5);
NewRecoilRotation *= Rec;
KFPC.SetRecoil(NewRecoilRotation,RecoilRate * (default.FireRate/FireRate));
}
}
}
defaultproperties
{
KickMomentum=(X=-85.000000,Z=15.000000)
ProjPerFire=1
bAttachSmokeEmitter=True
TransientSoundVolume=2.0
TransientSoundRadius=500.000000
FireSoundRef="KF_FY_BlowerThrowerSND.WEP_Blower_Secondary_Fire_M"
StereoFireSoundRef="KF_FY_BlowerThrowerSND.WEP_Blower_Secondary_Fire_S"
NoAmmoSound=Sound'KF_PumpSGSnd.SG_DryFire'
FireRate=0.965
FireAnimRate=0.95
AmmoClass=Class'KFMod.BlowerThrowerAmmo'
ProjectileClass=Class'KFMod.BlowerBileAltProjectile'
BotRefireRate=1.500000
FlashEmitterClass=Class'KFMod.BlowerThroweraAltMuzzleFlash1P'
aimerror=1.000000
Spread=2000.0
SpreadStyle=SS_Line
maxVerticalRecoilAngle=1500
maxHorizontalRecoilAngle=900
FireAnim=FireALL
FireAimedAnim=FireALL_Iron
AmmoPerFire=7
//** View shake **//
ShakeOffsetMag=(X=6.0,Y=2.0,Z=10.0)
ShakeOffsetRate=(X=1000.0,Y=1000.0,Z=1000.0)
ShakeOffsetTime=3.0
ShakeRotMag=(X=50.0,Y=50.0,Z=400.0)
ShakeRotRate=(X=12500.0,Y=12500.0,Z=12500.0)
ShakeRotTime=5.0
bWaitForRelease=true
bRandomPitchFireSound=false
}

View file

@ -0,0 +1,23 @@
//=============================================================================
// BlowerThrowerAmmo
//=============================================================================
// Ammunition class for the bloat bile thrower
//=============================================================================
// Killing Floor Source
// Copyright (C) 2013 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class BlowerThrowerAmmo extends KFAmmunition;
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
defaultproperties
{
MaxAmmo=300
InitialAmount=150
AmmoPickupAmount=25
PickupClass=Class'KFMod.BlowerThrowerAmmoPickup'
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
IconCoords=(X1=336,Y1=82,X2=382,Y2=125)
ItemName="Bloat Bile Canisters"
}

View file

@ -0,0 +1,11 @@
class BlowerThrowerAmmoPickup extends KFAmmoPickup;
defaultproperties
{
AmmoAmount=25
InventoryType=Class'KFMod.BlowerThrowerAmmo'
PickupMessage="ML of Bloat Bile"
PickupForce="AssaultAmmoPickup"
DrawType=DT_StaticMesh
StaticMesh=StaticMesh'KillingFloorStatics.FT_AmmoMesh'
}

View file

@ -0,0 +1,83 @@
//=============================================================================
// BlowerThrowerAttachment
//=============================================================================
// Third person attachment class for the bloat bile thrower
//=============================================================================
// Killing Floor Source
// Copyright (C) 2013 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class BlowerThrowerAttachment extends KFWeaponAttachment;
// No dynamic light when firing this
simulated function WeaponLight(){}
defaultproperties
{
mMuzFlashClass=Class'KFMod.BlowerThrowerMuzzleFlash3P'
mShellCaseEmitterClass=none
MeshRef="KF_Weapons3rd3_IJC.BlowerThrower_3rd"
MovementAnims(0)=JogF_IJC_BlowerThrower
MovementAnims(1)=JogB_IJC_BlowerThrower
MovementAnims(2)=JogL_IJC_BlowerThrower
MovementAnims(3)=JogR_IJC_BlowerThrower
CrouchAnims(0)=CHwalkF_IJC_BlowerThrower
CrouchAnims(1)=CHwalkB_IJC_BlowerThrower
CrouchAnims(2)=CHwalkL_IJC_BlowerThrower
CrouchAnims(3)=CHwalkR_IJC_BlowerThrower
WalkAnims(0)=WalkF_IJC_BlowerThrower
WalkAnims(1)=WalkB_IJC_BlowerThrower
WalkAnims(2)=WalkL_IJC_BlowerThrower
WalkAnims(3)=WalkR_IJC_BlowerThrower
AirStillAnim=JumpF_Mid
AirAnims(0)=JumpF_Mid
AirAnims(1)=JumpF_Mid
AirAnims(2)=JumpL_Mid
AirAnims(3)=JumpR_Mid
TakeoffStillAnim=JumpF_Takeoff
TakeoffAnims(0)=JumpF_Takeoff
TakeoffAnims(1)=JumpF_Takeoff
TakeoffAnims(2)=JumpL_Takeoff
TakeoffAnims(3)=JumpR_Takeoff
LandAnims(0)=JumpF_Land
LandAnims(1)=JumpF_Land
LandAnims(2)=JumpL_Land
LandAnims(3)=JumpR_Land
TurnRightAnim=TurnR_IJC_BlowerThrower
TurnLeftAnim=TurnL_IJC_BlowerThrower
CrouchTurnRightAnim=CH_TurnR_IJC_BlowerThrower
CrouchTurnLeftAnim=CH_TurnL_IJC_BlowerThrower
IdleRestAnim=Idle_IJC_BlowerThrower//Idle_Rest
IdleCrouchAnim=CHIdle_IJC_BlowerThrower
IdleSwimAnim=Swim_Tread
IdleWeaponAnim=Idle_IJC_BlowerThrower//Idle_Rifle
IdleHeavyAnim=Idle_IJC_BlowerThrower//Idle_Biggun
IdleRifleAnim=Idle_IJC_BlowerThrower//Idle_Rifle
IdleChatAnim=Idle_IJC_BlowerThrower
FireAnims(0)=Fire_IJC_BlowerThrower
FireAnims(1)=Fire_IJC_BlowerThrower
FireAnims(2)=Fire_IJC_BlowerThrower
FireAnims(3)=Fire_IJC_BlowerThrower
FireAltAnims(0)=Fire_IJC_BlowerThrower
FireAltAnims(1)=Fire_IJC_BlowerThrower
FireAltAnims(2)=Fire_IJC_BlowerThrower
FireAltAnims(3)=Fire_IJC_BlowerThrower
FireCrouchAnims(0)=CHFire_IJC_BlowerThrower
FireCrouchAnims(1)=CHFire_IJC_BlowerThrower
FireCrouchAnims(2)=CHFire_IJC_BlowerThrower
FireCrouchAnims(3)=CHFire_IJC_BlowerThrower
FireCrouchAltAnims(0)=CHFire_IJC_BlowerThrower
FireCrouchAltAnims(1)=CHFire_IJC_BlowerThrower
FireCrouchAltAnims(2)=CHFire_IJC_BlowerThrower
FireCrouchAltAnims(3)=CHFire_IJC_BlowerThrower
HitAnims(0)=HitF_IJC_BlowerThrower
HitAnims(1)=HitB_IJC_BlowerThrower
HitAnims(2)=HitL_IJC_BlowerThrower
HitAnims(3)=HitR_IJC_BlowerThrower
PostFireBlendStandAnim=Blend_IJC_BlowerThrower
PostFireBlendCrouchAnim=CHBlend_IJC_BlowerThrower
WeaponAmbientScale=2.0
}

View file

@ -0,0 +1,226 @@
//=============================================================================
// BlowerThrowerFire
//=============================================================================
// Primary fire mode class for the bloat bile thrower
//=============================================================================
// Killing Floor Source
// Copyright (C) 2013 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class BlowerThrowerFire extends CrossbowFire ;
// sound
var sound FireEndSound; // The sound to play at the end of the ambient fire sound
var sound FireEndStereoSound; // The sound to play at the end of the ambient fire sound in first person stereo
var float AmbientFireSoundRadius; // The sound radius for the ambient fire sound
var sound AmbientFireSound; // How loud to play the looping ambient fire sound
var byte AmbientFireVolume; // The ambient fire sound
var string FireEndSoundRef;
var string FireEndStereoSoundRef;
var string AmbientFireSoundRef;
static function PreloadAssets(LevelInfo LevelInfo, optional KFShotgunFire Spawned)
{
super.PreloadAssets(LevelInfo, Spawned);
if ( default.FireEndSoundRef != "" )
{
default.FireEndSound = sound(DynamicLoadObject(default.FireEndSoundRef, class'sound', true));
}
if ( LevelInfo.bLowSoundDetail || (default.FireEndStereoSoundRef == "" && default.FireEndStereoSound == none) )
{
default.FireEndStereoSound = default.FireEndSound;
}
else
{
default.FireEndStereoSound = sound(DynamicLoadObject(default.FireEndStereoSoundRef, class'Sound', true));
}
if ( default.AmbientFireSoundRef != "" )
{
default.AmbientFireSound = sound(DynamicLoadObject(default.AmbientFireSoundRef, class'sound', true));
}
if ( BlowerThrowerFire(Spawned) != none )
{
BlowerThrowerFire(Spawned).FireEndSound = default.FireEndSound;
BlowerThrowerFire(Spawned).FireEndStereoSound = default.FireEndStereoSound;
BlowerThrowerFire(Spawned).AmbientFireSound = default.AmbientFireSound;
}
}
static function bool UnloadAssets()
{
super.UnloadAssets();
default.FireEndSound = none;
default.FireEndStereoSound = none;
default.AmbientFireSound = none;
return true;
}
// Sends the fire class to the looping state
function StartFiring()
{
GotoState('FireLoop');
}
// Handles toggling the weapon attachment's ambient sound on and off
function PlayAmbientSound(Sound aSound)
{
local WeaponAttachment WA;
WA = WeaponAttachment(Weapon.ThirdPersonActor);
if ( Weapon == none || (WA == none))
return;
if(aSound == None)
{
WA.SoundVolume = WA.default.SoundVolume;
WA.SoundRadius = WA.default.SoundRadius;
}
else
{
WA.SoundVolume = AmbientFireVolume;
WA.SoundRadius = AmbientFireSoundRadius;
}
WA.AmbientSound = aSound;
}
// Make sure we are in the fire looping state when we fire
event ModeDoFire()
{
if( AllowFire() && IsInState('FireLoop'))
{
Super.ModeDoFire();
}
}
simulated function bool AllowFire()
{
if(KFWeapon(Weapon).bIsReloading)
return false;
if(KFWeapon(Weapon).MagAmmoRemaining < 1)
{
if(Level.TimeSeconds - LastClickTime > FireRate)
{
Weapon.PlayOwnedSound(NoAmmoSound, SLOT_Interact, TransientSoundVolume,,,, false);
LastClickTime = Level.TimeSeconds;
if(Weapon.HasAnim(EmptyAnim))
weapon.PlayAnim(EmptyAnim, EmptyAnimRate, 0.0);
}
return false;
}
LastClickTime = Level.TimeSeconds;
return Super.AllowFire();
}
/* =================================================================================== *
* FireLoop
* This state handles looping the firing animations and ambient fire sounds as well
* as firing rounds.
*
* modified by: Ramm 1/17/05
* =================================================================================== */
state FireLoop
{
function BeginState()
{
NextFireTime = Level.TimeSeconds - 0.1; //fire now!
Weapon.LoopAnim(FireLoopAnim, FireLoopAnimRate, TweenTime);
PlayAmbientSound(AmbientFireSound);
}
// Overriden because we play an anbient fire sound
function PlayFiring() {}
function ServerPlayFiring() {}
function EndState()
{
Weapon.AnimStopLooping();
PlayAmbientSound(none);
if( Weapon.Instigator != none && Weapon.Instigator.IsLocallyControlled() &&
Weapon.Instigator.IsFirstPerson() && StereoFireSound != none )
{
Weapon.PlayOwnedSound(FireEndStereoSound,SLOT_None,AmbientFireVolume/127,,AmbientFireSoundRadius,,false);
}
else
{
Weapon.PlayOwnedSound(FireEndSound,SLOT_None,AmbientFireVolume/127,,AmbientFireSoundRadius);
}
Weapon.StopFire(ThisModeNum);
}
function StopFiring()
{
GotoState('');
}
function ModeTick(float dt)
{
Super.ModeTick(dt);
if ( !bIsFiring || !AllowFire() ) // stopped firing, magazine empty
{
GotoState('');
return;
}
}
}
function float MaxRange()
{
return 1500;
}
defaultproperties
{
KickMomentum=(X=0,Z=0)
ProjPerFire=1
bAttachSmokeEmitter=True
TransientSoundVolume=1.000000
TransientSoundRadius=500.000000
FireSound=none
FireRate=0.07
AmmoClass=Class'KFMod.BlowerThrowerAmmo'
ProjectileClass=Class'KFMod.BlowerBileProjectile'
BotRefireRate=0.070000
aimerror=1.000000
Spread=1500
FlashEmitterClass=Class'KFMod.BlowerThrowerMuzzleFlash1P'
SpreadStyle=SS_Random
ShakeOffsetMag=(X=0.000000,Y=0.000000,Z=0.000000)
ShakeRotMag=(X=0.000000,Y=0.000000,Z=0.000000)
ShakeRotRate=(X=0.000000,Y=0.000000,Z=0.000000)
ShakeOffsetRate=(X=0.000000,Y=0.000000,Z=0.000000)
ProjSpawnOffset=(X=25,Y=5,Z=-6)
EffectiveRange=1500.000000
bSplashDamage=true
bRecommendSplashDamage=true
maxVerticalRecoilAngle=300
maxHorizontalRecoilAngle=150
bWaitForRelease=false
FireEndSoundRef="KF_FY_BlowerThrowerSND.WEP_Bile_Fire_End_M"
FireEndStereoSoundRef="KF_FY_BlowerThrowerSND.WEP_Bile_Fire_End_S"
NoAmmoSoundRef="KF_FlamethrowerSnd.FT_DryFire"
AmbientFireSoundRadius=500
AmbientFireSoundRef="KF_FY_BlowerThrowerSND.BlowerThrower_Fire_LP"
AmbientFireVolume=255
FireLoopAnim=Fire
FireEndAnim=Fire_End
FireAnim=''
bRandomPitchFireSound=false
}

View file

@ -0,0 +1,51 @@
//=============================================================================
// BlowerThrowerMuzzleFlash1P
//=============================================================================
// First person muzzle flash class for the bloat bile thrower
//=============================================================================
// Killing Floor Source
// Copyright (C) 2013 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class BlowerThrowerMuzzleFlash1P extends ROMuzzleFlash1st;
simulated function Trigger(Actor Other, Pawn EventInstigator)
{
Emitters[0].SpawnParticle(5);
}
defaultproperties
{
Begin Object Class=SpriteEmitter Name=SpriteEmitter1
UseDirectionAs=PTDU_Up
ProjectionNormal=(Y=1.000000,Z=0.000000)
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
Acceleration=(Z=-100.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
FadeOutStartTime=1.000000
MaxParticles=50
Name="SpriteEmitter1"
StartLocationRange=(X=(Min=10.000000,Max=10.000000))
UseRotationFrom=PTRS_Actor
SpinsPerSecondRange=(X=(Min=-0.100000,Max=0.100000))
StartSpinRange=(X=(Min=-0.200000,Max=0.200000))
SizeScale(0)=(RelativeSize=0.500000)
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=2.000000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=10.000000,Max=20.000000),Z=(Min=10.000000,Max=20.000000))
DrawStyle=PTDS_AlphaBlend
Texture=Texture'kf_fx_trip_t.Gore.bloat_vomit_spray_anim'
TextureUSubdivisions=8
TextureVSubdivisions=4
LifetimeRange=(Min=0.700000,Max=0.700000)
StartVelocityRange=(X=(Min=10.000000,Max=10.000000),Z=(Max=10.000000))
End Object
Emitters(0)=SpriteEmitter'SpriteEmitter1'
}

View file

@ -0,0 +1,51 @@
//=============================================================================
// BlowerThrowerMuzzleFlash3P
//=============================================================================
// Third person muzzle flash class for the bloat bile thrower
//=============================================================================
// Killing Floor Source
// Copyright (C) 2013 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class BlowerThrowerMuzzleFlash3P extends ROMuzzleFlash3rd;
simulated function Trigger(Actor Other, Pawn EventInstigator)
{
Emitters[0].SpawnParticle(10);
}
defaultproperties
{
Begin Object Class=SpriteEmitter Name=SpriteEmitter1
UseDirectionAs=PTDU_Up
ProjectionNormal=(Y=1.000000,Z=0.000000)
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
Acceleration=(Z=-100.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
FadeOutStartTime=1.000000
MaxParticles=50
Name="SpriteEmitter1"
StartLocationRange=(X=(Min=10.000000,Max=10.000000))
UseRotationFrom=PTRS_Actor
SpinsPerSecondRange=(X=(Min=-0.100000,Max=0.100000))
StartSpinRange=(X=(Min=-0.200000,Max=0.200000))
SizeScale(0)=(RelativeSize=0.500000)
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=2.000000)
StartSizeRange=(X=(Min=5.000000,Max=25.000000),Y=(Min=5.000000,Max=25.000000),Z=(Min=5.000000,Max=25.000000))
DrawStyle=PTDS_AlphaBlend
Texture=Texture'kf_fx_trip_t.Gore.bloat_vomit_spray_anim'
TextureUSubdivisions=8
TextureVSubdivisions=4
LifetimeRange=(Min=0.700000,Max=0.700000)
StartVelocityRange=(X=(Min=10.000000,Max=10.000000),Z=(Max=10.000000))
End Object
Emitters(0)=SpriteEmitter'SpriteEmitter1'
}

View file

@ -0,0 +1,37 @@
//=============================================================================
// BlowerThrowerPickup
//=============================================================================
// Pickup class for the bloat bile thrower
//=============================================================================
// Killing Floor Source
// Copyright (C) 2013 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class BlowerThrowerPickup extends KFWeaponPickup;
defaultproperties
{
Weight=6.000000
cost=1000
AmmoCost=15
BuyClipSize=25
PowerValue=50
SpeedValue=80
RangeValue=20
Description="A leaf blower modified to launch deadly bloat bile. Spray it around and watch 'em burn!"
ItemName="Blower Thrower Bile Launcher"
ItemShortName="Blower Thrower"
AmmoItemName="Bile"
AmmoMesh=StaticMesh'KillingFloorStatics.FT_AmmoMesh'
InventoryType=Class'KFMod.BlowerThrower'
PickupMessage="You got the BlowerThrower"
PickupForce="AssaultRiflePickup"
DrawType=DT_StaticMesh
StaticMesh=StaticMesh'KF_IJC_Halloween_Weps2.BlowerThrower_pickup'
DrawScale=0.900000
CollisionRadius=30.000000
CollisionHeight=5.000000
EquipmentCategoryID=3
PickupSound=Sound'KF_FY_BlowerThrowerSND.WEP_Bile_Foley_Pickup'
CorrespondingPerkIndex=0
}

View file

@ -0,0 +1,76 @@
//=============================================================================
// BlowerThrowerPrimaryEmitter
//=============================================================================
// Primary emitter for the bloat bile thrower projectile
//=============================================================================
// Killing Floor Source
// Copyright (C) 2013 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class BlowerThrowerPrimaryEmitter extends HitFlameBig;
var float LastFlameSpawnTime;
var () float FlameSpawnInterval;
var Emitter SecondaryFlame;
state Ticking
{
simulated function Tick( float dt )
{
if( LifeSpan < 2.0 )
{
mRegenRange[0] *= LifeSpan * 0.5;
mRegenRange[1] = mRegenRange[0];
SoundVolume = byte(float(SoundVolume) * (LifeSpan * 0.5));
}
if (Level.TimeSeconds - LastFlameSpawnTime > FlameSpawnInterval)
{
if( SecondaryFlame != none )
{
SecondaryFlame.Kill();
}
SecondaryFlame = Spawn(class'BlowerThrowerSecondaryEmitter',self);
}
}
}
simulated function Destroyed()
{
if( SecondaryFlame != none )
{
SecondaryFlame.Kill();
}
}
defaultproperties
{
mParticleType=PT_Stream
mDirDev=(X=0.000000,Y=0.000000,Z=0.000000)
mPosDev=(X=0.000000,Y=0.000000,Z=0.000000)
mSpeedRange(0)=0.000000
mSpeedRange(1)=0.000000
mRegen=True
mRegenRange(0)=60.000000
mRegenRange(1)=60.000000
mRegenDist=0.000000
mStartParticles=0
mAttenuate=true
Physics=PHYS_Trailer
lifespan=2.9
mNumTileColumns=1
mNumTileRows=1
mSpawnVecB=(X=20.0,Y=0.0,Z=0.0)
mMaxParticles=100
mLifeRange(0)=0.300000
mLifeRange(1)=0.300000
mGrowthRate=6.000000
mColorRange(0)=(B=255,G=255,R=255,A=255)
mColorRange(1)=(B=255,G=255,R=255,A=255)
mAttenKa=0.000000
mSizeRange(0)=6.000000
mSizeRange(1)=6.000000
Skins(0)=Texture'kf_fx_trip_t.Misc.vomit_trail_d'
Style=STY_Alpha
}

View file

@ -0,0 +1,51 @@
//=============================================================================
// BlowerThrowerSecondaryEmitter
//=============================================================================
// Secondary emitter for the bloat bile thrower projectile
//=============================================================================
// Killing Floor Source
// Copyright (C) 2013 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class BlowerThrowerSecondaryEmitter extends Emitter;
defaultproperties
{
Begin Object Class=SpriteEmitter Name=SpriteEmitter3
UseDirectionAs=PTDU_Up
ProjectionNormal=(Y=1.000000,Z=0.000000)
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
BlendBetweenSubdivisions=True
Acceleration=(Z=-100.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
FadeOutStartTime=.500000
Name="SpriteEmitter3"
UseRotationFrom=PTRS_Actor
SpinsPerSecondRange=(X=(Min=-0.100000,Max=0.100000))
StartSpinRange=(X=(Min=-0.200000,Max=0.200000))
SizeScale(0)=(RelativeSize=0.500000)
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=2.000000)
StartSizeRange=(X=(Min=8.000000,Max=20.000000),Y=(Min=8.000000,Max=20.000000),Z=(Min=8.000000,Max=20.000000))
DrawStyle=PTDS_AlphaBlend
Texture=Texture'kf_fx_trip_t.Gore.bloat_vomit_spray_anim'
TextureUSubdivisions=8
TextureVSubdivisions=4
LifetimeRange=(Min=0.750000,Max=1.000000)
End Object
Emitters(0)=SpriteEmitter'SpriteEmitter3'
bNetTemporary=True
RemoteRole=ROLE_None
bNoDelete=false
Physics=PHYS_Trailer
DrawScale = 1.0
}

View file

@ -0,0 +1,51 @@
//=============================================================================
// BlowerThroweraAltMuzzleFlash1P
//=============================================================================
// First person muzzle flash class for the bloat bile thrower secondary fire mode
//=============================================================================
// Killing Floor Source
// Copyright (C) 2013 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class BlowerThroweraAltMuzzleFlash1P extends ROMuzzleFlash1st;
simulated function Trigger(Actor Other, Pawn EventInstigator)
{
Emitters[0].SpawnParticle(5);
}
defaultproperties
{
Begin Object Class=SpriteEmitter Name=SpriteEmitter1
UseDirectionAs=PTDU_Up
ProjectionNormal=(Y=1.000000,Z=0.000000)
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
Acceleration=(Z=-100.000000)
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
FadeOutStartTime=1.000000
MaxParticles=50
Name="SpriteEmitter1"
StartLocationRange=(X=(Min=10.000000,Max=10.000000))
UseRotationFrom=PTRS_Actor
SpinsPerSecondRange=(X=(Min=-0.100000,Max=0.100000))
StartSpinRange=(X=(Min=-0.200000,Max=0.200000))
SizeScale(0)=(RelativeSize=0.500000)
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=2.000000)
StartSizeRange=(X=(Min=10.000000,Max=20.000000),Y=(Min=10.000000,Max=20.000000),Z=(Min=10.000000,Max=20.000000))
DrawStyle=PTDS_AlphaBlend
Texture=Texture'kf_fx_trip_t.Gore.bloat_vomit_spray_anim'
TextureUSubdivisions=8
TextureVSubdivisions=4
LifetimeRange=(Min=0.700000,Max=0.700000)
StartVelocityRange=(X=(Min=10.000000,Max=10.000000),Z=(Max=10.000000))
End Object
Emitters(0)=SpriteEmitter'SpriteEmitter1'
}

View file

@ -0,0 +1,8 @@
class BoardAttachment extends Actor;
defaultproperties
{
DrawType=DT_StaticMesh
StaticMesh=StaticMesh'KillingFloorLabStatics.ClipBoardProp'
DrawScale=0.400000
}

View file

@ -0,0 +1,41 @@
Class BodyAttacher extends KBSJoint
Transient;
var vector AttachEndPoint;
simulated function PostBeginPlay()
{
SetTimer(1,False);
}
simulated function Timer()
{
Destroy();
}
simulated function Tick( float Delta )
{
if( Owner==None )
{
Destroy();
Return;
}
if( Physics==PHYS_Karma || Owner.Physics!=PHYS_KarmaRagdoll )
Return;
KConstraintActor1 = Owner;
KPos1 = (Location-AttachEndPoint)/50.f;
KPos2 = AttachEndPoint/50.f;
KPriAxis1 = vect(1,0,0);
KSecAxis1 = vect(0,0,1);
KPriAxis2 = vect(1,0,0);
KSecAxis2 = vect(0,0,1);
SetPhysics(PHYS_Karma);
SetTimer(0,False);
}
defaultproperties
{
RemoteRole=ROLE_None
bHidden=True
bNoDelete=False
Physics=PHYS_None
LifeSpan=20
}

View file

@ -0,0 +1,6 @@
class BodySplash extends FleshHitEmitter;
defaultproperties
{
}

View file

@ -0,0 +1,46 @@
class BodySplashFX extends FleshHitEmitter;
defaultproperties
{
// Begin Object Class=SpriteEmitter Name=SpriteEmitterSp
// FadeOut=True
// RespawnDeadParticles=False
// SpawnOnlyInDirectionOfNormal=True
// SpinParticles=True
// UseSizeScale=True
// UseRegularSizeScale=False
// UniformSize=True
// ScaleSizeYByVelocity=True
// ScaleSizeZByVelocity=True
// AutomaticInitialSpawning=False
// BlendBetweenSubdivisions=True
// UseRandomSubdivision=True
// Acceleration=(Z=-600.000000)
// ColorScale(0)=(Color=(G=255))
// ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
// ColorScale(2)=(RelativeTime=0.750000,Color=(B=96,G=255,R=255))
// ColorScale(3)=(RelativeTime=1.000000)
// ColorMultiplierRange=(Z=(Min=0.670000))
// FadeOutStartTime=0.255000
// MaxParticles=80
// Name="SpriteEmitter0"
// StartLocationShape=PTLS_Sphere
// SphereRadiusRange=(Max=5.000000)
// StartMassRange=(Min=11.000000,Max=11.000000)
// UseRotationFrom=PTRS_Normal
// SpinsPerSecondRange=(X=(Max=1.000000))
// SizeScale(0)=(RelativeTime=1.000000,RelativeSize=3.500000)
// StartSizeRange=(X=(Min=14.000000,Max=17.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
// ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
// ScaleSizeByVelocityMax=3.000000
// InitialParticlesPerSecond=504.949005
// DrawStyle=PTDS_Modulated
// Texture=Texture'KFX.BloodySpray'
// TextureUSubdivisions=4
// TextureVSubdivisions=4
// LifetimeRange=(Min=0.500000,Max=0.750000)
// StartVelocityRange=(X=(Min=-150.000000,Max=150.000000),Y=(Min=-150.000000,Max=150.000000),Z=(Min=100.000000,Max=300.000000))
// End Object
// Emitters(0)=SpriteEmitter'SpriteEmitterSp'
// LifeSpan=1.5
}

View file

@ -0,0 +1,17 @@
//=============================================================================
// BombSquadSpecies
//=============================================================================
// Species type for bomb squad players
//=============================================================================
// Killing Floor Source
// Copyright (C) 2009 Tripwire Interactive LLC
// - John "Ramm-Jaeger" Gibson
//=============================================================================
class BombSquadSpecies extends HazmatSpecies;
defaultproperties
{
SleeveTexture=Texture'KF_Weapons2_Trip_T.hands.Bombsquad_Hands_1st_P'
DetachedArmClass = class'SeveredArmBombSquad'
DetachedLegClass = class'SeveredLegBombSquad'
}

View file

@ -0,0 +1,272 @@
//=============================================================================
// BoomStick Inventory class
//=============================================================================
class BoomStick extends KFWeaponShotgun;
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
var bool bWaitingToLoadShotty;
var float CurrentReloadCountDown;
var() float ReloadCountDown;
var int SingleShotCount;
var float SingleShotReplicateCountdown;
replication
{
reliable if(Role == ROLE_Authority)
ClientSetSingleShotCount;
}
simulated function WeaponTick(float dt)
{
super.WeaponTick(dt);
if( Role == ROLE_Authority )
{
if( bWaitingToLoadShotty )
{
CurrentReloadCountDown -= dt;
if( CurrentReloadCountDown <= 0 )
{
if( AmmoAmount(0) > 0 )
{
MagAmmoRemaining = Min(AmmoAmount(0), 2);
SingleShotCount = MagAmmoRemaining;
ClientSetSingleShotCount(SingleShotCount);
NetUpdateTime = Level.TimeSeconds - 1;
bWaitingToLoadShotty = false;
}
}
}
if( SingleShotReplicateCountdown > 0 )
{
SingleShotReplicateCountdown -= dt;
if( SingleShotReplicateCountdown <= 0 )
{
ClientSetSingleShotCount(SingleShotCount);
}
}
}
}
// When someone holding an empty gun picks up ammo, make sure and tell the
// weapon that is has some shots it can take
function AmmoPickedUp()
{
if( SingleShotCount == 0 )
{
MagAmmoRemaining = Min(AmmoAmount(0), 2);
SingleShotCount = MagAmmoRemaining;
ClientSetSingleShotCount(SingleShotCount);
NetUpdateTime = Level.TimeSeconds - 1;
}
}
simulated function SetPendingReload()
{
bWaitingToLoadShotty = true;
CurrentReloadCountDown = ReloadCountDown;
}
// Replicate the SingleShotCount on a slight delay. This prevents
// it from replicating from the server before the client does
// its shooting animation/sound effects which would prevent
// those from playing
function SetSingleShotReplication()
{
SingleShotReplicateCountdown=0.05;
}
simulated function ClientSetSingleShotCount(float NewSingleShotCount)
{
SingleShotCount = NewSingleShotCount;
}
// Overriden to support the special single firing or dual firing of the shotty
simulated function bool ConsumeAmmo( int Mode, float Load, optional bool bAmountNeededIsMax )
{
if( super(Weapon).ConsumeAmmo(0, Load, bAmountNeededIsMax) )
{
MagAmmoRemaining -= Load;
NetUpdateTime = Level.TimeSeconds - 1;
return true;
}
return false;
}
//// client only ////
// Overriden to force a single shot if we only have 1 in the pipe
simulated event ClientStartFire(int Mode)
{
if ( Pawn(Owner).Controller.IsInState('GameEnded') || Pawn(Owner).Controller.IsInState('RoundEnded') )
return;
if (Role < ROLE_Authority)
{
if( Mode == 1 && MagAmmoRemaining == 1 )
{
Mode = 0;
}
if (StartFire(Mode))
{
ServerStartFire(Mode);
}
}
else
{
if( Mode == 1 && MagAmmoRemaining == 1 )
{
Mode = 0;
}
StartFire(Mode);
}
}
// Overriden to allow switching between single/dual firing mode on the fly
simulated event ClientStopFire(int Mode)
{
if( Mode == 0 && Instigator != none && Instigator.Controller != none )
{
if( Instigator.Controller.bAltFire == 1 )
return;
}
if (Role < ROLE_Authority)
{
StopFire(Mode);
}
ServerStopFire(Mode);
}
simulated function bool StartFire(int Mode)
{
if ( super.StartFire(Mode) )
{
if ( Instigator != none && PlayerController(Instigator.Controller) != none &&
KFSteamStatsAndAchievements(PlayerController(Instigator.Controller).SteamStatsAndAchievements) != none )
{
KFSteamStatsAndAchievements(PlayerController(Instigator.Controller).SteamStatsAndAchievements).OnShotHuntingShotgun();
}
return true;
}
return false;
}
simulated function int AmmoAmount(int mode)
{
if ( bNoAmmoInstances )
{
if ( AmmoClass[0] == AmmoClass[mode] )
return AmmoCharge[0];
return AmmoCharge[mode];
}
if ( Ammo[0] != None )
return Ammo[0].AmmoAmount;
return 0;
}
function bool AllowReload()
{
if ( MagAmmoRemaining == 1 )
{
return false;
}
return super.AllowReload();
}
function GiveAmmo(int m, WeaponPickup WP, bool bJustSpawned)
{
super.GiveAmmo(m,WP,bJustSpawned);
// Update the singleshotcount if we pick this weapon up
if( WP != none )
{
if( m == 0 && AmmoAmount(0) < 2 )
{
SingleShotCount = AmmoAmount(0);
ClientSetSingleShotCount(SingleShotCount);
}
else if( BoomStickPickup(WP) != none )
{
SingleShotCount = BoomStickPickup(WP).SingleShotCount;
ClientSetSingleShotCount(SingleShotCount);
}
}
}
function GiveTo( pawn Other, optional Pickup Pickup )
{
super.GiveTo( Other, Pickup );
if( MagAmmoRemaining == 0 && AmmoAmount(0) > 0 )
{
MagAmmoRemaining = Min(AmmoAmount(0), 2);
SingleShotCount = MagAmmoRemaining;
ClientSetSingleShotCount(SingleShotCount);
NetUpdateTime = Level.TimeSeconds - 1;
bWaitingToLoadShotty = false;
}
}
defaultproperties
{
SkinRefs(0)="KF_Weapons_Trip_T.Shotguns.boomstick_cmb"
WeaponReloadAnim=Reload_HuntingShotgun
MagCapacity=2
IdleAimAnim=Idle_Iron
ReloadRate=0.010000
ReloadAnim="Reload"
ReloadAnimRate=0.900000
FireModeClass(0)=Class'KFMod.BoomStickAltFire'
FireModeClass(1)=Class'KFMod.BoomStickFire'
PutDownAnim="PutDown"
SelectSoundRef="KF_DoubleSGSnd.2Barrel_Select"
Description="A double barreled shotgun used by big game hunters. It fires two slugs simultaneously and can bring down even the largest targets, quickly."
Priority=160
InventoryGroup=4
GroupOffset=2
PickupClass=Class'KFMod.BoomStickPickup'
BobDamping=6.000000
AttachmentClass=Class'KFMod.BoomStickAttachment'
ItemName="Hunting Shotgun"
bUseDynamicLights=True
MeshRef="KF_Weapons_Trip.BoomStick_Trip"
TransientSoundVolume=1.000000
AIRating=0.9
CurrentRating=0.9
bSniping=False
ZoomTime=0.25
FastZoomOutTime=0.2
PlayerViewOffset=(X=8.0,Y=14,Z=-8.0)
ZoomInRotation=(Pitch=-910,Yaw=0,Roll=2910)
bHasAimingMode=true
ForceZoomOutOnFireTime=0.01
ForceZoomOutOnAltFireTime=0.01
DisplayFOV=55.000000
StandardDisplayFOV=55.0
PlayerIronSightFOV=70
ZoomedDisplayFOV=40
HudImageRef="KillingFloorHUD.WeaponSelect.BoomStic_unselected"
SelectedHudImageRef="KillingFloorHUD.WeaponSelect.BoomStick"
TraderInfoTexture=texture'KillingFloorHUD.Trader_Weapon_Images.Trader_Hunting_Shotgun'
ReloadCountDown=2.5
SingleShotCount=2
bIsTier2Weapon=true
}

View file

@ -0,0 +1,326 @@
//=============================================================================
// BoomStick Single Fire
//=============================================================================
class BoomStickAltFire extends KFShotgunFire;
var() name FireLastAnim;
var() name FireLastAimedAnim;
var() float FireLastRate;
var() Emitter Flash2Emitter;
var() name MuzzleBoneLeft;
var() name MuzzleBoneRight;
var bool bVeryLastShotAnim;
simulated function InitEffects()
{
// don't even spawn on server
if ( (Level.NetMode == NM_DedicatedServer) || (AIController(Instigator.Controller) != None) )
return;
if ( (FlashEmitterClass != None) && ((FlashEmitter == None) || FlashEmitter.bDeleteMe) )
{
FlashEmitter = Weapon.Spawn(FlashEmitterClass);
Weapon.AttachToBone(FlashEmitter, MuzzleBoneLeft);
}
if ( (FlashEmitterClass != None) && ((Flash2Emitter == None) || Flash2Emitter.bDeleteMe) )
{
Flash2Emitter = Weapon.Spawn(FlashEmitterClass);
Weapon.AttachToBone(Flash2Emitter, MuzzleBoneRight);
}
if ( (SmokeEmitterClass != None) && ((SmokeEmitter == None) || SmokeEmitter.bDeleteMe) )
{
SmokeEmitter = Weapon.Spawn(SmokeEmitterClass);
}
}
simulated function DestroyEffects()
{
super.DestroyEffects();
if (Flash2Emitter != None)
Flash2Emitter.Destroy();
}
function FlashMuzzleFlash()
{
if( KFWeap.MagAmmoRemaining == 2)
{
if (Flash2Emitter != None)
Flash2Emitter.Trigger(Weapon, Instigator);
}
else
{
if (FlashEmitter != None)
FlashEmitter.Trigger(Weapon, Instigator);
}
}
simulated function bool AllowFire()
{
return (BoomStick(Weapon).SingleShotCount >= 1);
}
// Overridden to support special anim functionality of the double barreled shotgun
function PlayFiring()
{
local float RandPitch;
if ( Weapon.Mesh != None )
{
if ( FireCount > 0 )
{
if( KFWeap.bAimingRifle )
{
if ( Weapon.HasAnim(FireLoopAimedAnim) )
{
Weapon.PlayAnim(FireLoopAimedAnim, FireLoopAnimRate, 0.0);
}
else if( Weapon.HasAnim(FireAimedAnim) )
{
Weapon.PlayAnim(FireAimedAnim, FireAnimRate, TweenTime);
}
else
{
Weapon.PlayAnim(FireAnim, FireAnimRate, TweenTime);
}
}
else
{
if ( Weapon.HasAnim(FireLoopAnim) )
{
Weapon.PlayAnim(FireLoopAnim, FireLoopAnimRate, 0.0);
}
else
{
Weapon.PlayAnim(FireAnim, FireAnimRate, TweenTime);
}
}
}
else
{
if( KFWeap.bAimingRifle )
{
if( !bVeryLastShotAnim && BoomStick(Weapon).SingleShotCount == 0 && Weapon.HasAnim(FireLastAimedAnim))
{
Weapon.PlayAnim(FireLastAimedAnim, FireAnimRate, TweenTime);
}
else if( Weapon.HasAnim(FireAimedAnim) )
{
Weapon.PlayAnim(FireAimedAnim, FireAnimRate, TweenTime);
}
else
{
Weapon.PlayAnim(FireAnim, FireAnimRate, TweenTime);
}
}
else
{
if( !bVeryLastShotAnim && BoomStick(Weapon).SingleShotCount == 0 && Weapon.HasAnim(FireLastAnim))
{
Weapon.PlayAnim(FireLastAnim, FireAnimRate, TweenTime);
}
else
{
Weapon.PlayAnim(FireAnim, FireAnimRate, TweenTime);
}
}
}
}
if( Weapon.Instigator != none && Weapon.Instigator.IsLocallyControlled() &&
Weapon.Instigator.IsFirstPerson() && StereoFireSound != none )
{
if( bRandomPitchFireSound )
{
RandPitch = FRand() * RandomPitchAdjustAmt;
if( FRand() < 0.5 )
{
RandPitch *= -1.0;
}
}
Weapon.PlayOwnedSound(StereoFireSound,SLOT_Interact,TransientSoundVolume * 0.85,,TransientSoundRadius,(1.0 + RandPitch),false);
}
else
{
if( bRandomPitchFireSound )
{
RandPitch = FRand() * RandomPitchAdjustAmt;
if( FRand() < 0.5 )
{
RandPitch *= -1.0;
}
}
Weapon.PlayOwnedSound(FireSound,SLOT_Interact,TransientSoundVolume,,TransientSoundRadius,(1.0 + RandPitch),false);
}
ClientPlayForceFeedback(FireForce); // jdf
FireCount++;
}
// Overridden to support special anim functionality of the double barreled shotgun
event ModeDoFire()
{
local float Rec;
if (!AllowFire())
return;
Spread = Default.Spread;
Rec = 1;
if ( KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo) != none && KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill != none )
{
Spread *= KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill.Static.ModifyRecoilSpread(KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo), self, Rec);
}
if( !bFiringDoesntAffectMovement )
{
if (FireRate > 0.25)
{
Instigator.Velocity.x *= 0.1;
Instigator.Velocity.y *= 0.1;
}
else
{
Instigator.Velocity.x *= 0.5;
Instigator.Velocity.y *= 0.5;
}
}
// Code from WeaponFire we have to override
if (MaxHoldTime > 0.0)
HoldTime = FMin(HoldTime, MaxHoldTime);
BoomStick(Weapon).SingleShotCount--;
bVeryLastShotAnim = Weapon.AmmoAmount(0) <= AmmoPerFire;
// server
if (Weapon.Role == ROLE_Authority)
{
if( BoomStick(Weapon).SingleShotCount < 1 )
{
BoomStick(Weapon).SetPendingReload();
}
Weapon.ConsumeAmmo(ThisModeNum, Load);
DoFireEffect();
BoomStick(Weapon).SetSingleShotReplication();
HoldTime = 0; // if bot decides to stop firing, HoldTime must be reset first
if ( (Instigator == None) || (Instigator.Controller == None) )
return;
if ( AIController(Instigator.Controller) != None )
AIController(Instigator.Controller).WeaponFireAgain(BotRefireRate, true);
Instigator.DeactivateSpawnProtection();
}
// client
if (Instigator.IsLocallyControlled())
{
ShakeView();
PlayFiring();
FlashMuzzleFlash();
StartMuzzleSmoke();
}
else // server
{
ServerPlayFiring();
}
Weapon.IncrementFlashCount(ThisModeNum);
// set the next firing time. must be careful here so client and server do not get out of sync
if (bFireOnRelease)
{
if( BoomStick(Weapon).SingleShotCount == 0 )
{
if (bIsFiring)
NextFireTime += MaxHoldTime + FireLastRate;
else
NextFireTime = Level.TimeSeconds + FireLastRate;
}
else
{
if (bIsFiring)
NextFireTime += MaxHoldTime + FireRate;
else
NextFireTime = Level.TimeSeconds + FireRate;
}
}
else
{
if( BoomStick(Weapon).SingleShotCount == 0 )
{
NextFireTime += FireLastRate;
NextFireTime = FMax(NextFireTime, Level.TimeSeconds);
}
else
{
NextFireTime += FireRate;
NextFireTime = FMax(NextFireTime, Level.TimeSeconds);
}
}
Load = AmmoPerFire;
HoldTime = 0;
if (Instigator.PendingWeapon != Weapon && Instigator.PendingWeapon != None)
{
bIsFiring = false;
Weapon.PutDown();
}
// end code from WeaponFire
// client
if (Instigator.IsLocallyControlled())
{
HandleRecoil(Rec);
}
}
defaultproperties
{
bModeExclusive=true
KickMomentum=(X=-50.000000,Z=22.000000)
ProjPerFire=10
FireAnim=Fire
FireAimedAnim=Fire_Iron
FireLastAnim=Fire_Last
FireLastAimedAnim=Fire_Last_Iron
bAttachSmokeEmitter=True
TransientSoundVolume=1.8
TransientSoundRadius=500.000000
FireSoundRef="KF_DoubleSGSnd.2Barrel_Fire"
StereoFireSoundRef="KF_DoubleSGSnd.2Barrel_FireST"
NoAmmoSoundRef="KF_DoubleSGSnd.2Barrel_DryFire"
FireRate=0.25//1.250000
FireLastRate=2.75//1.75
AmmoClass=Class'KFMod.DBShotgunAmmo'
AmmoPerFire=1
ProjectileClass=Class'KFMod.BoomStickBullet'
BotRefireRate=2.500000
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stKar'//Class'ROEffects.MuzzleFlash1stPTRD'
MuzzleBoneLeft=Tip_Left
MuzzleBoneRight=Tip_Right
aimerror=2.000000
Spread=3000
RecoilRate=0.07
maxVerticalRecoilAngle=1500
maxHorizontalRecoilAngle=900
//** View shake **//
ShakeOffsetMag=(X=6.0,Y=2.0,Z=10.0)
ShakeOffsetRate=(X=1000.0,Y=1000.0,Z=1000.0)
ShakeOffsetTime=3.0
ShakeRotMag=(X=50.0,Y=50.0,Z=400.0)
ShakeRotRate=(X=12500.0,Y=12500.0,Z=12500.0)
ShakeRotTime=5.0
bWaitForRelease=true
}

View file

@ -0,0 +1,69 @@
class BoomStickAttachment extends KFWeaponAttachment;
defaultproperties
{
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdKar'
mShellCaseEmitterClass=Class'KFMod.KFShotgunShellSpewer'
MeshRef="KF_Weapons3rd_Trip.HuntingShot_3rd"
MovementAnims(0)=JogF_HuntingShotgun
MovementAnims(1)=JogB_HuntingShotgun
MovementAnims(2)=JogL_HuntingShotgun
MovementAnims(3)=JogR_HuntingShotgun
CrouchAnims(0)=CHwalkF_HuntingShotgun
CrouchAnims(1)=CHwalkB_HuntingShotgun
CrouchAnims(2)=CHwalkL_HuntingShotgun
CrouchAnims(3)=CHwalkR_HuntingShotgun
WalkAnims(0)=WalkF_HuntingShotgun
WalkAnims(1)=WalkB_HuntingShotgun
WalkAnims(2)=WalkL_HuntingShotgun
WalkAnims(3)=WalkR_HuntingShotgun
AirStillAnim=JumpF_Mid
AirAnims(0)=JumpF_Mid
AirAnims(1)=JumpF_Mid
AirAnims(2)=JumpL_Mid
AirAnims(3)=JumpR_Mid
TakeoffStillAnim=JumpF_Takeoff
TakeoffAnims(0)=JumpF_Takeoff
TakeoffAnims(1)=JumpF_Takeoff
TakeoffAnims(2)=JumpL_Takeoff
TakeoffAnims(3)=JumpR_Takeoff
LandAnims(0)=JumpF_Land
LandAnims(1)=JumpF_Land
LandAnims(2)=JumpL_Land
LandAnims(3)=JumpR_Land
TurnRightAnim=TurnR_HuntingShotgun
TurnLeftAnim=TurnL_HuntingShotgun
CrouchTurnRightAnim=CH_TurnR_HuntingShotgun
CrouchTurnLeftAnim=CH_TurnL_HuntingShotgun
IdleRestAnim=Idle_HuntingShotgun//Idle_Rest
IdleCrouchAnim=CHIdle_HuntingShotgun
IdleSwimAnim=Swim_Tread
IdleWeaponAnim=Idle_HuntingShotgun//Idle_Rifle
IdleHeavyAnim=Idle_HuntingShotgun//Idle_Biggun
IdleRifleAnim=Idle_HuntingShotgun//Idle_Rifle
IdleChatAnim=Idle_HuntingShotgun
FireAnims(0)=Fire_HuntingShotgun
FireAnims(1)=Fire_HuntingShotgun
FireAnims(2)=Fire_HuntingShotgun
FireAnims(3)=Fire_HuntingShotgun
FireAltAnims(0)=Fire_HuntingShotgun
FireAltAnims(1)=Fire_HuntingShotgun
FireAltAnims(2)=Fire_HuntingShotgun
FireAltAnims(3)=Fire_HuntingShotgun
FireCrouchAnims(0)=CHFire_HuntingShotgun
FireCrouchAnims(1)=CHFire_HuntingShotgun
FireCrouchAnims(2)=CHFire_HuntingShotgun
FireCrouchAnims(3)=CHFire_HuntingShotgun
FireCrouchAltAnims(0)=CHFire_HuntingShotgun
FireCrouchAltAnims(1)=CHFire_HuntingShotgun
FireCrouchAltAnims(2)=CHFire_HuntingShotgun
FireCrouchAltAnims(3)=CHFire_HuntingShotgun
HitAnims(0)=HitF_HuntingShotgun
HitAnims(1)=HitB_HuntingShotgun
HitAnims(2)=HitL_HuntingShotgun
HitAnims(3)=HitR_HuntingShotgun
PostFireBlendStandAnim=Blend_HuntingShotgun
PostFireBlendCrouchAnim=CHBlend_HuntingShotgun
}

View file

@ -0,0 +1,12 @@
//=============================================================================
// THIS IS MAH BOOMSTICK!
//=============================================================================
class BoomStickBullet extends ShotgunBullet;
defaultproperties
{
PenDamageReduction=0.650000
Damage=50.000000
MomentumTransfer=60000.000000
MyDamageType=class'KFMod.DamTypeDBShotgun'
}

View file

@ -0,0 +1,271 @@
//=============================================================================
// BoomStick Dual Fire
//=============================================================================
class BoomStickFire extends KFShotgunFire;
var() Emitter Flash2Emitter;
var() name MuzzleBoneLeft;
var() name MuzzleBoneRight;
var() name FireLastAnim;
var() name FireLastAimedAnim;
var bool bVeryLastShotAnim;
event ModeDoFire()
{
if (!AllowFire())
return;
bVeryLastShotAnim = Weapon.AmmoAmount(0) <= AmmoPerFire;
super.ModeDoFire();
// server
if (Weapon.Role == ROLE_Authority)
{
BoomStick(Weapon).SingleShotCount = 0;
BoomStick(Weapon).SetSingleShotReplication();
BoomStick(Weapon).SetPendingReload();
}
}
// Overridden to support special anim functionality of the double barreled shotgun
function PlayFiring()
{
local float RandPitch;
if ( Weapon.Mesh != None )
{
if ( FireCount > 0 )
{
if( KFWeap.bAimingRifle )
{
if ( Weapon.HasAnim(FireLoopAimedAnim) )
{
Weapon.PlayAnim(FireLoopAimedAnim, FireLoopAnimRate, 0.0);
}
else if( Weapon.HasAnim(FireAimedAnim) )
{
Weapon.PlayAnim(FireAimedAnim, FireAnimRate, TweenTime);
}
else
{
Weapon.PlayAnim(FireAnim, FireAnimRate, TweenTime);
}
}
else
{
if ( Weapon.HasAnim(FireLoopAnim) )
{
Weapon.PlayAnim(FireLoopAnim, FireLoopAnimRate, 0.0);
}
else
{
Weapon.PlayAnim(FireAnim, FireAnimRate, TweenTime);
}
}
}
else
{
if( KFWeap.bAimingRifle )
{
if( bVeryLastShotAnim && Weapon.HasAnim(FireLastAimedAnim))
{
Weapon.PlayAnim(FireLastAimedAnim, FireAnimRate, TweenTime);
}
else if( Weapon.HasAnim(FireAimedAnim) )
{
Weapon.PlayAnim(FireAimedAnim, FireAnimRate, TweenTime);
}
else
{
Weapon.PlayAnim(FireAnim, FireAnimRate, TweenTime);
}
}
else
{
if( bVeryLastShotAnim && Weapon.HasAnim(FireLastAnim))
{
Weapon.PlayAnim(FireLastAnim, FireAnimRate, TweenTime);
}
else
{
Weapon.PlayAnim(FireAnim, FireAnimRate, TweenTime);
}
}
}
}
if( Weapon.Instigator != none && Weapon.Instigator.IsLocallyControlled() &&
Weapon.Instigator.IsFirstPerson() && StereoFireSound != none )
{
if( bRandomPitchFireSound )
{
RandPitch = FRand() * RandomPitchAdjustAmt;
if( FRand() < 0.5 )
{
RandPitch *= -1.0;
}
}
Weapon.PlayOwnedSound(StereoFireSound,SLOT_Interact,TransientSoundVolume * 0.85,,TransientSoundRadius,(1.0 + RandPitch),false);
}
else
{
if( bRandomPitchFireSound )
{
RandPitch = FRand() * RandomPitchAdjustAmt;
if( FRand() < 0.5 )
{
RandPitch *= -1.0;
}
}
Weapon.PlayOwnedSound(FireSound,SLOT_Interact,TransientSoundVolume,,TransientSoundRadius,(1.0 + RandPitch),false);
}
ClientPlayForceFeedback(FireForce); // jdf
FireCount++;
}
simulated function InitEffects()
{
// don't even spawn on server
if ( (Level.NetMode == NM_DedicatedServer) || (AIController(Instigator.Controller) != None) )
return;
if ( (FlashEmitterClass != None) && ((FlashEmitter == None) || FlashEmitter.bDeleteMe) )
{
FlashEmitter = Weapon.Spawn(FlashEmitterClass);
Weapon.AttachToBone(FlashEmitter, MuzzleBoneLeft);
}
if ( (FlashEmitterClass != None) && ((Flash2Emitter == None) || Flash2Emitter.bDeleteMe) )
{
Flash2Emitter = Weapon.Spawn(FlashEmitterClass);
Weapon.AttachToBone(Flash2Emitter, MuzzleBoneRight);
}
if ( (SmokeEmitterClass != None) && ((SmokeEmitter == None) || SmokeEmitter.bDeleteMe) )
{
SmokeEmitter = Weapon.Spawn(SmokeEmitterClass);
}
}
simulated function DestroyEffects()
{
super.DestroyEffects();
if (Flash2Emitter != None)
Flash2Emitter.Destroy();
}
function FlashMuzzleFlash()
{
super.FlashMuzzleFlash();
if (Flash2Emitter != None)
Flash2Emitter.Trigger(Weapon, Instigator);
}
simulated function bool AllowFire()
{
return (BoomStick(Weapon).SingleShotCount >= 2);
}
// Handle setting new recoil
simulated function HandleRecoil(float Rec)
{
local rotator NewRecoilRotation;
local KFPlayerController KFPC;
local KFPawn KFPwn;
local vector AdjustedVelocity;
local float AdjustedSpeed;
if( Instigator != none )
{
KFPC = KFPlayerController(Instigator.Controller);
KFPwn = KFPawn(Instigator);
}
if( KFPC == none || KFPwn == none )
return;
if( !KFPC.bFreeCamera )
{
// Overridden to support special anim functionality of the double barreled shotgun
if( Weapon.GetFireMode(1).bIsFiring )
{
NewRecoilRotation.Pitch = RandRange( maxVerticalRecoilAngle * 0.75, maxVerticalRecoilAngle );
NewRecoilRotation.Yaw = RandRange( maxHorizontalRecoilAngle * 0.5, maxHorizontalRecoilAngle );
if( Rand( 2 ) == 1 )
NewRecoilRotation.Yaw *= -1;
if( Weapon.Owner != none && Weapon.Owner.Physics == PHYS_Falling &&
Weapon.Owner.PhysicsVolume.Gravity.Z > class'PhysicsVolume'.default.Gravity.Z )
{
AdjustedVelocity = Weapon.Owner.Velocity;
// Ignore Z velocity in low grav so we don't get massive recoil
AdjustedVelocity.Z = 0;
AdjustedSpeed = VSize(AdjustedVelocity);
//log("AdjustedSpeed = "$AdjustedSpeed$" scale = "$(AdjustedSpeed* RecoilVelocityScale * 0.5));
// Reduce the falling recoil in low grav
NewRecoilRotation.Pitch += (AdjustedSpeed* 3 * 0.5);
NewRecoilRotation.Yaw += (AdjustedSpeed* 3 * 0.5);
}
else
{
//log("Velocity = "$VSize(Weapon.Owner.Velocity)$" scale = "$(VSize(Weapon.Owner.Velocity)* RecoilVelocityScale));
NewRecoilRotation.Pitch += (VSize(Weapon.Owner.Velocity)* 3);
NewRecoilRotation.Yaw += (VSize(Weapon.Owner.Velocity)* 3);
}
NewRecoilRotation.Pitch += (Instigator.HealthMax / Instigator.Health * 5);
NewRecoilRotation.Yaw += (Instigator.HealthMax / Instigator.Health * 5);
NewRecoilRotation *= Rec;
KFPC.SetRecoil(NewRecoilRotation,RecoilRate * (default.FireRate/FireRate));
}
}
}
defaultproperties
{
bModeExclusive=true
KickMomentum=(X=-105.000000,Z=55.000000)
ProjPerFire=10
FireAnim=Fire_Both
FireAimedAnim=Fire_Both_Iron
FireLastAnim=Fire
FireLastAimedAnim=Fire_Iron
bAttachSmokeEmitter=True
TransientSoundVolume=1.9
TransientSoundRadius=500.000000
FireSoundRef="KF_DoubleSGSnd.2Barrel_Fire_Dual"
StereoFireSoundRef="KF_DoubleSGSnd.2Barrel_Fire_DualST"
NoAmmoSoundRef="KF_DoubleSGSnd.2Barrel_DryFire"
FireRate=2.750000
AmmoClass=Class'KFMod.DBShotgunAmmo'
AmmoPerFire=2
ProjectileClass=Class'KFMod.BoomStickBullet'
BotRefireRate=2.500000
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stKar'//Class'ROEffects.MuzzleFlash1stPTRD'
MuzzleBoneLeft=Tip_Left
MuzzleBoneRight=Tip_Right
aimerror=2.000000
Spread=3000
RecoilRate=0.07
maxVerticalRecoilAngle=3200
maxHorizontalRecoilAngle=900
//** View shake **//
ShakeOffsetMag=(X=6.0,Y=2.0,Z=10.0)
ShakeOffsetRate=(X=1000.0,Y=1000.0,Z=1000.0)
ShakeOffsetTime=3.5
ShakeRotMag=(X=75.0,Y=75.0,Z=600.0)
ShakeRotRate=(X=12500.0,Y=12500.0,Z=12500.0)
ShakeRotTime=6.0
bWaitForRelease=true
}

View file

@ -0,0 +1,7 @@
class BoomStickMuzzFlash extends BullpupMuzzFlash;
defaultproperties
{
mLifeRange(1)=0.150000
DrawScale=2.000000
}

View file

@ -0,0 +1,47 @@
//=============================================================================
// BoomStick Pickup.
//=============================================================================
class BoomStickPickup extends KFWeaponPickup;
var int SingleShotCount;
function ShowShotgunInfo(Canvas C)
{
C.SetPos((C.SizeX - C.SizeY) / 2,0);
C.DrawTile( Texture'KillingfloorHUD.ClassMenu.Shotgun', C.SizeY, C.SizeY, 0.0, 0.0, 256, 256);
}
function InitDroppedPickupFor(Inventory Inv)
{
Super.InitDroppedPickupFor(Inv);
if ( Boomstick(Inv) != none )
{
SingleShotCount = BoomStick(Inv).SingleShotCount;
}
}
defaultproperties
{
cost=750
AmmoCost=15 // Adjusted from 25 in Balance Round 2
BuyClipSize=6
PowerValue=90
SpeedValue=30
RangeValue=12
Description="A double barreled shotgun used by big game hunters."
ItemName="Hunting Shotgun"
ItemShortName="Hunting Shotgun"
AmmoItemName="12-gauge Hunting shells"
AmmoMesh=none
InventoryType=Class'KFMod.BoomStick'
PickupMessage="You got the Hunting Shotgun"
PickupForce="AssaultRiflePickup"
StaticMesh=StaticMesh'KF_pickups_Trip.boomstick_pickup'
PickupSound=Sound'KF_DoubleSGSnd.2Barrel_Pickup'
CollisionRadius=35.000000
CollisionHeight=5.000000
EquipmentCategoryID=3
CorrespondingPerkIndex=1
SingleShotCount=2
}

View file

@ -0,0 +1,45 @@
class BreakWindowGlassEmitter extends KFHitEmitter;
#exec OBJ LOAD FILE=KFWeaponSound.uax
defaultproperties
{
ImpactSounds(0)=Sound'KFWeaponSound.bullethitglass'
ImpactSounds(1)=Sound'KFWeaponSound.bullethitglass2'
Begin Object Class=SpriteEmitter Name=GlassExplosionEmitter
UseCollision=True
FadeOut=True
RespawnDeadParticles=False
SpinParticles=True
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
UseRandomSubdivision=True
Acceleration=(Z=-800.000000)
DampingFactorRange=(X=(Min=0.000000,Max=0.800000),Y=(Min=0.000000,Max=0.800000),Z=(Min=0.000000,Max=0.400000))
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
FadeOutStartTime=1.000000
MaxParticles=20
Name="GlassExplosionEmitter"
DetailMode=DM_High
StartLocationRange=(X=(Min=-20.000000,Max=20.000000),Y=(Min=-20.000000,Max=20.000000),Z=(Min=-20.000000,Max=20.000000))
SpinsPerSecondRange=(X=(Max=0.200000))
StartSpinRange=(X=(Min=1.000000))
StartSizeRange=(X=(Min=5.000000,Max=7.000000))
ParticlesPerSecond=0
InitialParticlesPerSecond=200
DrawStyle=PTDS_AlphaBlend
Texture=Texture'KFMaterials.GlassChips'
TextureUSubdivisions=4
TextureVSubdivisions=4
LifetimeRange=(Min=2.000000)
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=-200.000000,Max=200.000000))
MaxAbsVelocity=(Z=500.000000)
End Object
Emitters(0)=SpriteEmitter'GlassExplosionEmitter'
}

View file

@ -0,0 +1,75 @@
class Breaker_Damaged_Loop extends emitter;
defaultproperties
{
Begin Object Class=SpriteEmitter Name=SpriteEmitter0
UseColorScale=True
FadeOut=True
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
BlendBetweenSubdivisions=True
UseSubdivisionScale=True
UseRandomSubdivision=True
Acceleration=(Z=25.000000)
ColorScale(0)=(Color=(B=192,G=192,R=192))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=128,G=128,R=128,A=255))
ColorScale(2)=(RelativeTime=1.000000,Color=(B=128,G=128,R=128))
ColorMultiplierRange=(X=(Min=0.500000,Max=0.500000),Y=(Min=0.500000,Max=0.500000),Z=(Min=0.500000,Max=0.500000))
FadeOutStartTime=0.920000
MaxParticles=25
Name="SpriteEmitter0"
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=2.000000)
StartSizeRange=(X=(Min=1.000000,Max=15.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
DrawStyle=PTDS_Brighten
Texture=Texture'Effects_Tex_Steampunk.Muzzle_Steampunk_A'
TextureUSubdivisions=2
TextureVSubdivisions=2
SubdivisionEnd=7
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=2.000000,Max=2.000000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(0)=SpriteEmitter'SpriteEmitter0'
Begin Object Class=SpriteEmitter Name=SpriteEmitter1
UseDirectionAs=PTDU_Up
UseCollision=True
UseColorScale=True
FadeOut=True
UseRegularSizeScale=False
ScaleSizeYByVelocity=True
Acceleration=(Z=-500.000000)
DampingFactorRange=(X=(Min=0.200000),Y=(Min=0.200000),Z=(Min=0.200000,Max=0.500000))
ColorScale(0)=(Color=(B=1,G=77,R=254))
ColorScale(1)=(RelativeTime=0.414286,Color=(B=118,G=196,R=248,A=255))
ColorScale(2)=(RelativeTime=1.000000,Color=(B=128,G=128,R=128,A=255))
ColorScale(3)=(RelativeTime=1.000000,Color=(B=131,G=196,R=226,A=255))
ColorScale(4)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255))
FadeOutStartTime=0.500000
Name="SpriteEmitter1"
DetailMode=DM_High
UseRotationFrom=PTRS_Actor
SizeScale(2)=(RelativeTime=0.070000,RelativeSize=1.000000)
SizeScale(3)=(RelativeTime=1.000000,RelativeSize=1.000000)
StartSizeRange=(X=(Min=0.500000,Max=1.000000),Y=(Min=0.500000,Max=1.000000),Z=(Min=0.500000,Max=1.000000))
ScaleSizeByVelocityMultiplier=(Y=0.020000)
DrawStyle=PTDS_Brighten
Texture=Texture'KFX.KFSparkHead'
TextureUSubdivisions=1
TextureVSubdivisions=1
LifetimeRange=(Min=0.700000,Max=1.000000)
StartVelocityRange=(X=(Max=100.000000),Y=(Min=-20.000000,Max=20.000000),Z=(Max=100.000000))
End Object
Emitters(1)=SpriteEmitter'SpriteEmitter1'
bDirectional=True
}

View file

@ -0,0 +1,87 @@
class Breaker_Damaged_OneOff extends emitter;
defaultproperties
{
Begin Object Class=SpriteEmitter Name=SpriteEmitter0
UseColorScale=True
FadeOut=True
RespawnDeadParticles=False
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
AutomaticInitialSpawning=False
BlendBetweenSubdivisions=True
UseSubdivisionScale=True
UseRandomSubdivision=True
Acceleration=(Z=25.000000)
ColorScale(0)=(Color=(B=192,G=192,R=192))
ColorScale(1)=(RelativeTime=1.000000,Color=(B=128,G=128,R=128,A=255))
ColorScale(2)=(RelativeTime=1.000000,Color=(B=128,G=128,R=128))
ColorMultiplierRange=(X=(Min=0.500000,Max=0.500000),Y=(Min=0.500000,Max=0.500000),Z=(Min=0.500000,Max=0.500000))
FadeOutStartTime=0.920000
Name="SpriteEmitter0"
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=2.000000)
StartSizeRange=(X=(Min=1.000000,Max=15.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
InitialParticlesPerSecond=20.000000
DrawStyle=PTDS_Brighten
Texture=Texture'Effects_Tex_Steampunk.Muzzle_Steampunk_A'
TextureUSubdivisions=2
TextureVSubdivisions=2
SubdivisionEnd=7
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=2.000000,Max=2.000000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(0)=SpriteEmitter'SpriteEmitter0'
Begin Object Class=SpriteEmitter Name=SpriteEmitter1
UseDirectionAs=PTDU_Up
UseCollision=True
UseColorScale=True
FadeOut=True
RespawnDeadParticles=False
UseRegularSizeScale=False
ScaleSizeYByVelocity=True
AutomaticInitialSpawning=False
Acceleration=(Z=-500.000000)
DampingFactorRange=(X=(Min=0.200000),Y=(Min=0.200000),Z=(Min=0.200000,Max=0.500000))
ColorScale(0)=(Color=(B=1,G=77,R=254))
ColorScale(1)=(RelativeTime=0.414286,Color=(B=118,G=196,R=248,A=255))
ColorScale(2)=(RelativeTime=1.000000,Color=(B=128,G=128,R=128,A=255))
ColorScale(3)=(RelativeTime=1.000000,Color=(B=131,G=196,R=226,A=255))
ColorScale(4)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255))
FadeOutStartTime=0.500000
Name="SpriteEmitter1"
DetailMode=DM_High
UseRotationFrom=PTRS_Actor
SizeScale(2)=(RelativeTime=0.070000,RelativeSize=1.000000)
SizeScale(3)=(RelativeTime=1.000000,RelativeSize=1.000000)
StartSizeRange=(X=(Min=0.500000,Max=1.000000),Y=(Min=0.500000,Max=1.000000),Z=(Min=0.500000,Max=1.000000))
ScaleSizeByVelocityMultiplier=(Y=0.020000)
InitialParticlesPerSecond=100.000000
DrawStyle=PTDS_Brighten
Texture=Texture'KFX.KFSparkHead'
TextureUSubdivisions=1
TextureVSubdivisions=1
LifetimeRange=(Min=0.700000,Max=1.000000)
StartVelocityRange=(X=(Max=100.000000),Y=(Min=-20.000000,Max=20.000000),Z=(Max=100.000000))
End Object
Emitters(1)=SpriteEmitter'SpriteEmitter1'
AutoDestroy=True
Style=STY_Alpha
bDirectional=True
bNoDelete=false
//required because this is spawned on server during netplay.
RemoteRole=ROLE_DumbProxy
//make sure initial rotation is replicated
bNetInitialRotation=true
}

View file

@ -0,0 +1,167 @@
//=============================================================================
// L85 Inventory class
//=============================================================================
class Bullpup extends KFWeapon
config(user);
#exec OBJ LOAD FILE=KillingFloorWeapons.utx
#exec OBJ LOAD FILE=KillingFloorHUD.utx
#exec OBJ LOAD FILE=Inf_Weapons_Foley.uax
// Use alt fire to switch fire modes
simulated function AltFire(float F)
{
if(ReadyToFire(0))
{
DoToggle();
}
}
function bool RecommendRangedAttack()
{
return true;
}
//TODO: LONG ranged?
function bool RecommendLongRangedAttack()
{
return true;
}
function float SuggestAttackStyle()
{
return -1.0;
}
exec function SwitchModes()
{
DoToggle();
}
function float GetAIRating()
{
local Bot B;
B = Bot(Instigator.Controller);
if ( (B == None) || (B.Enemy == None) )
return AIRating;
return AIRating;
}
function byte BestMode()
{
return 0;
}
simulated function SetZoomBlendColor(Canvas c)
{
local Byte val;
local Color clr;
local Color fog;
clr.R = 255;
clr.G = 255;
clr.B = 255;
clr.A = 255;
if( Instigator.Region.Zone.bDistanceFog )
{
fog = Instigator.Region.Zone.DistanceFogColor;
val = 0;
val = Max( val, fog.R);
val = Max( val, fog.G);
val = Max( val, fog.B);
if( val > 128 )
{
val -= 128;
clr.R -= val;
clr.G -= val;
clr.B -= val;
}
}
c.DrawColor = clr;
}
simulated function AddReloadedAmmo()
{
super.AddReloadedAmmo();
ResetReloadAchievement();
}
function ResetReloadAchievement()
{
local PlayerController PC;
local KFSteamStatsAndAchievements KFSteamStats;
PC = PlayerController( Instigator.Controller );
if ( PC != none )
{
KFSteamStats = KFSteamStatsAndAchievements(PC.SteamStatsAndAchievements);
if ( KFSteamStats != none )
{
KFSteamStats.OnReloadSPTorBullpup();
}
}
}
defaultproperties
{
skins(0)=Combiner'KF_Weapons_Trip_T.Rifles.bullpup_cmb'
skins(1)=Shader'KF_Weapons_Trip_T.Rifles.reflex_sight_A_unlit'
SleeveNum=2
WeaponReloadAnim=Reload_BullPup
IdleAimAnim=Idle_Iron
CustomCrosshair=11
CustomCrossHairTextureName="Crosshairs.HUD.Crosshair_Cross5"
MagCapacity=40
ReloadRate=1.966667
ReloadAnim="Reload"
ReloadAnimRate=1.000000
Weight=6.000000
bModeZeroCanDryFire=True
FireModeClass(0)=Class'KFMod.BullpupFire'
FireModeClass(1)=Class'KFMod.NoFire'
PutDownAnim="PutDown"
SelectSound=Sound'KF_BullpupSnd.Bullpup_Select'
SelectForce="SwitchToAssaultRifle"
bShowChargingBar=True
Description="A military grade automatic rifle. Can be fired in semi-auto or full auto firemodes and comes equipped with a scope for increased accuracy."
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
Priority=70
InventoryGroup=3
GroupOffset=1
PickupClass=Class'KFMod.BullpupPickup'
PlayerViewOffset=(X=20.000000,Y=21.500000,Z=-9.000000)
//PlayerViewPivot=(Pitch=400)
BobDamping=6.000000
AttachmentClass=Class'KFMod.BullpupAttachment'
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
ItemName="Bullpup"
Mesh=SkeletalMesh'KF_Weapons_Trip.Bullpup_Trip'
DrawScale=1.00000
TransientSoundVolume=1.250000
AmbientGlow=0
AIRating=0.55
CurrentRating=0.55
DisplayFOV=70.000000
StandardDisplayFOV=70.0
PlayerIronSightFOV=65
ZoomTime=0.25
FastZoomOutTime=0.2
ZoomInRotation=(Pitch=-910,Yaw=0,Roll=2910)
bHasAimingMode=true
ZoomedDisplayFOV=40
HudImage=texture'KillingFloorHUD.WeaponSelect.Bullpup_unselected'
SelectedHudImage=texture'KillingFloorHUD.WeaponSelect.Bullpup'
TraderInfoTexture=texture'KillingFloorHud.Trader_Weapon_Images.Trader_Bullpup'
}

View file

@ -0,0 +1,17 @@
//=============================================================================
// L85 Ammo.
//=============================================================================
class BullpupAmmo extends KFAmmunition;
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
defaultproperties
{
MaxAmmo=400
InitialAmount=160
AmmoPickupAmount=40
PickupClass=Class'KFMod.BullpupAmmoPickup'
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
IconCoords=(X1=336,Y1=82,X2=382,Y2=125)
ItemName="Bullpup bullets"
}

View file

@ -0,0 +1,15 @@
//=============================================================================
// L85 Ammo.
//=============================================================================
class BullpupAmmoDM extends Ammunition;
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
defaultproperties
{
MaxAmmo=99999
InitialAmount=99999
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
IconCoords=(X1=336,Y1=82,X2=382,Y2=125)
ItemName="Bullpup bullets"
}

View file

@ -0,0 +1,11 @@
class BullpupAmmoPickup extends KFAmmoPickup;
defaultproperties
{
AmmoAmount=40
InventoryType=Class'KFMod.BullpupAmmo'
PickupMessage="Rounds (5.56 NATO)"
PickupForce="AssaultAmmoPickup"
DrawType=DT_StaticMesh
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
}

View file

@ -0,0 +1,74 @@
class BullpupAttachment extends KFWeaponAttachment;
defaultproperties
{
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdMP'
mTracerClass=Class'KFMod.KFNewTracer'
mShellCaseEmitterClass=Class'KFMod.KFShellSpewer'
bRapidFire=True
bAltRapidFire=True
SplashEffect=Class'BulletSplashEmitter'
CullDistance=5000.000000
Mesh=SkeletalMesh'KF_Weapons3rd_Trip.BullPup_3rd'
MovementAnims(0)=JogF_Bullpup
MovementAnims(1)=JogB_Bullpup
MovementAnims(2)=JogL_Bullpup
MovementAnims(3)=JogR_Bullpup
CrouchAnims(0)=CHwalkF_BullPup
CrouchAnims(1)=CHwalkB_BullPup
CrouchAnims(2)=CHwalkL_BullPup
CrouchAnims(3)=CHwalkR_BullPup
WalkAnims(0)=WalkF_Bullpup
WalkAnims(1)=WalkB_Bullpup
WalkAnims(2)=WalkL_Bullpup
WalkAnims(3)=WalkR_Bullpup
AirStillAnim=JumpF_Mid
AirAnims(0)=JumpF_Mid
AirAnims(1)=JumpF_Mid
AirAnims(2)=JumpL_Mid
AirAnims(3)=JumpR_Mid
TakeoffStillAnim=JumpF_Takeoff
TakeoffAnims(0)=JumpF_Takeoff
TakeoffAnims(1)=JumpF_Takeoff
TakeoffAnims(2)=JumpL_Takeoff
TakeoffAnims(3)=JumpR_Takeoff
LandAnims(0)=JumpF_Land
LandAnims(1)=JumpF_Land
LandAnims(2)=JumpL_Land
LandAnims(3)=JumpR_Land
TurnRightAnim=TurnR_Bullpup
TurnLeftAnim=TurnL_Bullpup
CrouchTurnRightAnim=CH_TurnR_Bullpup
CrouchTurnLeftAnim=CH_TurnL_Bullpup
IdleRestAnim=Idle_Bullpup//Idle_Rest
IdleCrouchAnim=CHIdle_BullPup
IdleSwimAnim=Swim_Tread
IdleWeaponAnim=Idle_Bullpup//Idle_Rifle
IdleHeavyAnim=Idle_Bullpup//Idle_Biggun
IdleRifleAnim=Idle_Bullpup//Idle_Rifle
IdleChatAnim=Idle_Bullpup
FireAnims(0)=Fire_Bullpup
FireAnims(1)=Fire_Bullpup
FireAnims(2)=Fire_Bullpup
FireAnims(3)=Fire_Bullpup
FireAltAnims(0)=Fire_Bullpup
FireAltAnims(1)=Fire_Bullpup
FireAltAnims(2)=Fire_Bullpup
FireAltAnims(3)=Fire_Bullpup
FireCrouchAnims(0)=CHFire_BullPup
FireCrouchAnims(1)=CHFire_BullPup
FireCrouchAnims(2)=CHFire_BullPup
FireCrouchAnims(3)=CHFire_BullPup
FireCrouchAltAnims(0)=CHFire_BullPup
FireCrouchAltAnims(1)=CHFire_BullPup
FireCrouchAltAnims(2)=CHFire_BullPup
FireCrouchAltAnims(3)=CHFire_BullPup
HitAnims(0)=HitF_Bullpup
HitAnims(1)=HitB_Bullpup
HitAnims(2)=HitL_Bullpup
HitAnims(3)=HitR_Bullpup
PostFireBlendStandAnim=Blend_Bullpup
PostFireBlendCrouchAnim=CHBlend_Bullpup
}

View file

@ -0,0 +1,58 @@
//
//=============================================================================
class BullpupBurstFire extends BullpupFire;
var() int BurstLength; //How many bullets to fire in one burst
var() float BurstRate; //Time between shots (should be smaller than FireRate).
var bool bBursting;
var int RoundsToFire;
event ModeDoFire()
{
if(bBursting && RoundsToFire > 0)
RoundsToFire--;
//If not already firing, start a burst.
if(!bBursting && AllowFire())
{
bBursting = true;
RoundsToFire = BurstLength;
SetTimer(BurstRate, true);
}
if(RoundsToFire < 1)
{
SetTimer(0, false);
RoundsToFire = 0;
bBursting = false;
return;
}
Super.ModeDoFire();
}
simulated function Timer()
{
if(bBursting)
ModeDoFire();
else SetTimer(0,false);
}
defaultproperties
{
BurstLength=4
BurstRate=0.1
DamageMin=16
DamageMax=26
Momentum=10000.000000
// bWaitForRelease=True
TransientSoundVolume=1.8
FireEndAnim=
FireRate=0.5
RecoilRate=0.07
ShakeRotMag=(X=20.000000,Y=150.000000,Z=20.000000)
ShakeOffsetMag=(X=1.000000,Y=1.000000,Z=1.000000)
BotRefireRate=1.000000
aimerror=50.000000
}

View file

@ -0,0 +1,9 @@
//=============================================================================
// L85 DM VERSION Inventory class
//=============================================================================
class BullpupDM extends Bullpup;
defaultproperties
{
FireModeClass(0)=Class'KFMod.BullpupBurstFire'
}

View file

@ -0,0 +1,45 @@
//=============================================================================
//L85 Fire
//=============================================================================
class BullpupFire extends KFFire;
defaultproperties
{
FireAimedAnim=Fire_Iron
FireSound=Sound'KF_BullpupSnd.Bullpup_Fire'
StereoFireSoundRef="KF_BullpupSnd.Bullpup_FireST"
NoAmmoSound=Sound'KF_9MMSnd.9mm_DryFire'
DamageType=Class'KFMod.DamTypeBullpup'
DamageMin=16
DamageMax=26
Momentum=8500.000000
bPawnRapidFireAnim=True
TransientSoundVolume=1.8
FireLoopAnim="Fire"
FireForce="AssaultRifleFire"
FireRate=0.100000
RecoilRate=0.07
maxVerticalRecoilAngle=200
maxHorizontalRecoilAngle=75
TweenTime=0.025
bAccuracyBonusForSemiAuto=true
AmmoClass=Class'KFMod.BullpupAmmo'
AmmoPerFire=1
BotRefireRate=0.990000
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stSTG'
aimerror=42.000000
Spread=0.0085
SpreadStyle=SS_Random
//** View shake **//
ShakeOffsetMag=(X=6.0,Y=3.0,Z=10.0)
ShakeOffsetRate=(X=1000.0,Y=1000.0,Z=1000.0)
ShakeOffsetTime=1.0
ShakeRotMag=(X=75.0,Y=75.0,Z=250.0)
ShakeRotRate=(X=10000.0,Y=10000.0,Z=10000.0)
ShakeRotTime=0.5
ShellEjectClass=class'ROEffects.KFShellEjectBullpup'
ShellEjectBoneName=Bullpup
}

View file

@ -0,0 +1,15 @@
//=============================================================================
//L85 Fire
//=============================================================================
class BullpupFireSP extends BullpupFire;
defaultproperties
{
DamageMin=20
DamageMax=30
Momentum=8500.000000
aimerror=5.000000
SpreadStyle=SS_None
Spread=0 //0.020
}

View file

@ -0,0 +1,13 @@
class BullpupMuzzFlash extends FlakMuzFlash1st;
defaultproperties
{
mLifeRange(1)=0.100000
mRandOrient=True
mSizeRange(1)=0.050000
mGrowthRate=8.000000
mTileAnimation=True
mMeshNodes(0)=none//StaticMesh'XEffects.MinigunMuzFlash1stMesh' KFTODO: Replace this texture
DrawScale=0.900000
Skins(0)=none//FinalBlend'XGameShaders.WeaponShaders.MinigunMuzFlash1stFinal' KFTODO: Replace this texture
}

View file

@ -0,0 +1,40 @@
//=============================================================================
// L85 Pickup.
//=============================================================================
class BullpupPickup extends KFWeaponPickup;
/*
simulated function RenderPickupImage(Canvas C)
{
C.SetPos((C.SizeX - C.SizeY) / 2,0);
C.DrawTile( Texture'KillingfloorHUD.ClassMenu.L85', C.SizeY, C.SizeY, 0.0, 0.0, 256, 256);
}
*/
defaultproperties
{
Weight=6.000000
cost=400
AmmoCost=10
BuyClipSize=40
PowerValue=24
SpeedValue=90
RangeValue=60
Description="Standard issue military rifle. Equipped with an integrated 2X scope."
ItemName="Bullpup"
ItemShortName="Bullpup"
AmmoItemName="5.56 NATO Ammo"
AmmoMesh=StaticMesh'KillingFloorStatics.L85Ammo'
InventoryType=Class'KFMod.Bullpup'
PickupMessage="You got the Bullpup"
PickupForce="AssaultRiflePickup"
DrawType=DT_StaticMesh
StaticMesh=StaticMesh'KF_pickups_Trip.Bullpup_Pickup'
DrawScale=1.000000
CollisionRadius=25.000000
CollisionHeight=5.000000
PickupSound=Sound'KF_BullpupSnd.Bullpup_Pickup'
EquipmentCategoryID=2
CorrespondingPerkIndex=3
}

View file

@ -0,0 +1,7 @@
//Long range Bullpup for use in the Single player mission...
class BullpupSP extends Bullpup;
defaultproperties
{
FireModeClass(0)=Class'KFMod.BullpupFireSP'
}

View file

@ -0,0 +1,151 @@
class BullpupSuperAmmoPickup extends KFAmmoPickup;
simulated Function PostNetBeginPlay()
{
SetTimer(0.3, False);
}
simulated Function Timer()
{
Destroy();
}
auto state Pickup
{
function bool ReadyToPickup(float MaxWait)
{
return true;
}
/* ValidTouch()
Validate touch (if valid return true to let other pick me up and trigger event).
*/
function bool ValidTouch( actor Other )
{
// make sure its a live player
if ( (Pawn(Other) == None) || !Pawn(Other).bCanPickupInventory || (Pawn(Other).DrivenVehicle == None && Pawn(Other).Controller == None) )
return false;
// make sure not touching through wall
if ( !FastTrace(Other.Location, Location) )
return false;
// make sure game will let player pick me up
if( Level.Game.PickupQuery(Pawn(Other), self) )
{
TriggerEvent(Event, self, Pawn(Other));
return true;
}
return false;
}
// When touched by an actor.
function Touch( actor Other )
{
local Inventory Copy;
// If touched by a player pawn, let him pick this up.
if( ValidTouch(Other) )
{
Copy = SpawnCopy(Pawn(Other));
AnnouncePickup(Pawn(Other));
SetRespawn();
if ( Copy != None )
Copy.PickupFunction(Pawn(Other));
}
else destroy();
}
// Make sure no pawn already touching (while touch was disabled in sleep).
function CheckTouching()
{
local Pawn P;
ForEach TouchingActors(class'Pawn', P)
Touch(P);
}
function Timer()
{
if ( bDropped )
GotoState('FadeOut');
}
function BeginState()
{
UntriggerEvent(Event, self, None);
if ( bDropped )
{
AddToNavigation();
SetTimer(8, false);
}
}
function EndState()
{
if ( bDropped )
RemoveFromNavigation();
}
Begin:
CheckTouching();
}
State Sleeping
{
ignores Touch;
function bool ReadyToPickup(float MaxWait)
{
return ( bPredictRespawns && (LatentFloat < MaxWait) );
}
function StartSleeping() {}
function BeginState()
{
Destroy();
}
function EndState()
{
NetUpdateTime = Level.TimeSeconds - 1;
bHidden = false;
}
DelayedSpawn:
if ( Level.NetMode == NM_Standalone )
Sleep(FMin(30, Level.Game.GameDifficulty * 8));
else Sleep(30);
Goto('Respawn');
Begin:
Sleep( GetReSpawnTime() - RespawnEffectTime );
Respawn:
for ( OtherPlayer=Level.ControllerList; OtherPlayer!=None; OtherPlayer=OtherPlayer.NextController)
{
if (OtherPlayer.pawn != none)
{
if(!FastTrace(self.Location,OtherPlayer.Pawn.Location))
{
RespawnEffect();
Sleep(RespawnEffectTime);
if (PickUpBase != None)
PickUpBase.TurnOn();
GotoState('Pickup');
}
else Sleep(rand(5) + 5); // Crafty randomization...you'll never know when the next respawn attempt will be ! (5-10 seconds)
Goto('Respawn');
}
}
}
defaultproperties
{
AmmoAmount=500
InventoryType=Class'KFMod.BullpupAmmo'
PickupMessage=""
PickupForce="AssaultAmmoPickup"
DrawType=DT_StaticMesh
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
}

View file

@ -0,0 +1,17 @@
class BullpupSwitchMessage extends CriticalEventPlus;
var() localized string SwitchMessage[10];
static function string GetString (optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject)
{
if ( (Switch >= 0) && (Switch <= 9) )
return Default.SwitchMessage[Switch];
}
defaultproperties
{
SwitchMessage(0)="Set to Semi-Automatic."
SwitchMessage(1)="Set to Fully Automatic."
DrawColor=(B=0,G=0,R=220)
FontSize=-2
}

Some files were not shown because too many files have changed in this diff Show more