Revert weapon conversion

This patch reverts first step of global weapon conversion
that would have halted the release of the next version for too long.
This commit is contained in:
Anton Tarasenko 2020-04-17 23:06:41 +07:00
commit 12d95e387e
757 changed files with 10788 additions and 4046 deletions

View file

@ -0,0 +1,5 @@
class NiceDamTypeFT extends NiceDamTypeFire
abstract;
defaultproperties
{ WeaponClass=Class'NicePack.NiceFlameThrower' DeathString="%k incinerated %o (Flamethrower)."
}

View file

@ -0,0 +1,4 @@
class NiceFlameAmmo extends ScrnFlameAmmo;
defaultproperties
{ AmmoPickupAmount=30 MaxAmmo=200 InitialAmount=60
}

View file

@ -0,0 +1,6 @@
//
//=============================================================================
class NiceFlameBurstFire extends ScrnFlameBurstFire ;
defaultproperties
{ AmmoClass=Class'NicePack.NiceFlameAmmo' ProjectileClass=Class'NicePack.NiceFlameTendril'
}

View file

@ -0,0 +1,48 @@
class NiceFlameNade extends NiceNade;
#exec OBJ LOAD FILE=KF_GrenadeSnd.uax
simulated function HurtRadius(float DamageAmount, float DamageRadius, class<DamageType> DamageType, float Momentum, vector HitLocation){
local actor Victims;
local float damageScale, dist;
local vector dirs;
local int NumKilled;
local KFMonster KFMonsterVictim;
local Pawn P;
local KFPawn KFP;
local array<Pawn> CheckedPawns;
local int i;
local bool bAlreadyChecked;
if(bHurtEntry) return;
bHurtEntry = true;
foreach CollidingActors(class 'Actor', Victims, DamageRadius, HitLocation){ // null pawn variables here just to be sure they didn't left from previous iteration // and waste another day of my life to looking for this fucking bug -- PooSH /totallyPissedOff!!! P = none; KFMonsterVictim = none; KFP = none; // don't let blast damage affect fluid - VisibleCollisingActors doesn't really work for them - jag if((Victims != self) && (Hurtwall != Victims) && (Victims.Role == ROLE_Authority) && !Victims.IsA('FluidSurfaceInfo') && ExtendedZCollision(Victims) == none ){ dirs = Victims.Location - HitLocation; dist = FMax(1,VSize(dirs)); dirs = dirs/dist; damageScale = 1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius); if(Instigator == none || Instigator.Controller == none) Victims.SetDelayedDamageInstigatorController(InstigatorController); if(Victims == LastTouched) LastTouched = none;
P = Pawn(Victims);
if(P != none){ for(i = 0; i < CheckedPawns.Length; i++){ if(CheckedPawns[i] == P){ bAlreadyChecked = true; break; } }
if(bAlreadyChecked){ bAlreadyChecked = false; P = none; continue; }
KFMonsterVictim = KFMonster(Victims);
if(KFMonsterVictim != none && KFMonsterVictim.Health <= 0) KFMonsterVictim = none;
KFP = KFPawn(Victims);
if(KFMonsterVictim != none ) damageScale *= KFMonsterVictim.GetExposureTo(HitLocation); else if(KFP != none) damageScale *= KFP.GetExposureTo(HitLocation);
CheckedPawns[CheckedPawns.Length] = P;
if(damageScale <= 0){ P = none; continue; } else P = none; }
if(KFP != none || KFMonsterVictim != none || Nade(Victims) != none) Victims.TakeDamage ( damageScale * DamageAmount, Instigator, Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dirs, (damageScale * Momentum * dirs), DamageType );
if(Role == ROLE_Authority && KFMonsterVictim != none && KFMonsterVictim.Health <= 0) NumKilled++; }
}
if(Role == ROLE_Authority){ if(NumKilled >= 4) KFGameType(Level.Game).DramaticEvent(0.05); else if(NumKilled >= 2) KFGameType(Level.Game).DramaticEvent(0.03);
}
bHurtEntry = false;
}
simulated function Explode(vector HitLocation, vector HitNormal){
local PlayerController LocalPlayer;
bHasExploded = True;
BlowUp(HitLocation);
// Incendiary Effects..
PlaySound(sound'KF_GrenadeSnd.FlameNade_Explode',, 100.5 * TransientSoundVolume);
if(EffectIsRelevant(Location, false)){ Spawn(Class'KFIncendiaryExplosion',,, HitLocation, rotator(vect(0,0,1))); Spawn(ExplosionDecal,self,,HitLocation, rotator(-HitNormal));
}
// Shake nearby players screens
LocalPlayer = Level.GetLocalPlayerController();
if((LocalPlayer != none) && (VSize(Location - LocalPlayer.ViewTarget.Location) < (DamageRadius * 1.5))) LocalPlayer.ShakeView(RotMag, RotRate, RotTime, OffsetMag, OffsetRate, OffsetTime);
Destroy();
}
defaultproperties
{ AvoidMarkerClass=Class'NicePack.NiceAvoidMarkerFlame' MyDamageType=Class'NicePack.NiceDamTypeFlameNade'
}

View file

@ -0,0 +1,28 @@
//=============================================================================
// Flame
//=============================================================================
class NiceFlameTendril extends ScrnFlameTendril;
simulated function HurtRadius( float DamageAmount, float DamageRadius, class<DamageType> DamageType, float Momentum, vector HitLocation )
{
local actor Victims;
local float damageScale, dist;
local vector dir;
local KFMonster KFMonsterVictim;
if ( bHurtEntry ) return;
bHurtEntry = true;
foreach VisibleCollidingActors( class 'Actor', Victims, DamageRadius, HitLocation )
{ KFMonsterVictim = none; //tbs // don't let blast damage affect fluid - VisibleCollisingActors doesn't really work for them - jag if( (Victims != self) && (Hurtwall != Victims) && (Victims.Role == ROLE_Authority) && !Victims.IsA('FluidSurfaceInfo') ) { dir = Victims.Location - HitLocation; dist = FMax(1,VSize(dir)); dir = dir/dist; damageScale = 1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius); if ( Instigator == none || Instigator.Controller == none ) Victims.SetDelayedDamageInstigatorController( InstigatorController ); if ( Victims == LastTouched ) LastTouched = none; KFMonsterVictim = KFMonster(Victims);
if( KFMonsterVictim != none && KFMonsterVictim.Health <= 0 ) { KFMonsterVictim = none; } Victims.TakeDamage ( damageScale * DamageAmount, Instigator, Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dir, (damageScale * Momentum * dir), DamageType ); if (Vehicle(Victims) != none && Vehicle(Victims).Health > 0) Vehicle(Victims).DriverRadiusDamage(DamageAmount, DamageRadius, InstigatorController, DamageType, Momentum, HitLocation);
}
}
/*
if ( (LastTouched != none) && (LastTouched != self) && (LastTouched.Role == ROLE_Authority) && !LastTouched.IsA('FluidSurfaceInfo') )
{ Victims = LastTouched; LastTouched = none; dir = Victims.Location - HitLocation; dist = FMax(1,VSize(dir)); dir = dir/dist; damageScale = FMax(Victims.CollisionRadius/(Victims.CollisionRadius + Victims.CollisionHeight),1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius)); if ( Instigator == none || Instigator.Controller == none ) Victims.SetDelayedDamageInstigatorController(InstigatorController); Victims.TakeDamage ( damageScale * DamageAmount, Instigator, Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dir, (damageScale * Momentum * dir), DamageType ); if (Vehicle(Victims) != none && Vehicle(Victims).Health > 0) Vehicle(Victims).DriverRadiusDamage(DamageAmount, DamageRadius, InstigatorController, DamageType, Momentum, HitLocation);
}
*/
bHurtEntry = false;
}
defaultproperties
{ Damage=16.000000 MyDamageType=Class'NicePack.NiceDamTypeFT'
}

View file

@ -0,0 +1,41 @@
//=============================================================================
// FlameChucker
//=============================================================================
class NiceFlameThrower extends ScrnFlameThrower;
var bool bFiring;
simulated function bool StartFire(int Mode)
{
if(MagAmmoRemaining >= 1 && FireMode[Mode].AllowFire())
bFiring = true;
return Super.StartFire(Mode);
}
simulated event StopFire(int Mode)
{
if(MagAmmoRemaining < 1 || Mode != 0){
bFiring = false;
Super.StopFire(0);
}
}
simulated function bool PutDown()
{
if ( bFiring && Instigator != none && Instigator.PendingWeapon != none && AmmoAmount(0) > 0 ) { Instigator.PendingWeapon = none; return false;
}
return Super.PutDown();
}
function bool AllowReload()
{
if ( bFiring ) return false; return Super.AllowReload();
}
simulated function WeaponTick(float dt)
{
if(MagAmmoRemaining < 1 && bFiring)
StartFire(0);
Super.WeaponTick(dt);
// if(FireMode[0].bIsFiring)
// Skins[4] = Shader 'KillingFloorWeapons.FlameThrower.FTFireShader';
// else
// Skins[4] = default.Skins[4];
}
defaultproperties
{ MagCapacity=30 Weight=8.000000 bModeZeroCanDryFire=False FireModeClass(0)=Class'NicePack.NiceFlameBurstFire' PickupClass=Class'NicePack.NiceFlameThrowerPickup' ItemName="FlameThrower NW"
}

View file

@ -0,0 +1,7 @@
//=============================================================================
// L85 Pickup.
//=============================================================================
class NiceFlameThrowerPickup extends ScrnFlameThrowerPickup;
defaultproperties
{ ItemName="FlameThrower NW" ItemShortName="Flamer NW" InventoryType=Class'NicePack.NiceFlameThrower' PickupMessage="You got the Flamethrower NW."
}

View file

@ -0,0 +1,4 @@
class NiceDamTypeFlareProjectileFire extends NiceDamTypeFire;
defaultproperties
{ HeadShotDamageMult=2.000000 WeaponClass=Class'NicePack.NiceFlareRevolver'
}

View file

@ -0,0 +1,4 @@
class NiceDamTypeFlareProjectileImpact extends ScrnDamTypeFlareProjectileImpact;
defaultproperties
{
}

View file

@ -0,0 +1,42 @@
class NiceDualFlareRevolver extends ScrnDualFlareRevolver;
function bool HandlePickupQuery( pickup Item )
{
if ( Item.InventoryType==Class'NicePack.NiceFlareRevolver' )
{ if( LastHasGunMsgTime < Level.TimeSeconds && PlayerController(Instigator.Controller) != none ) { LastHasGunMsgTime = Level.TimeSeconds + 0.5; PlayerController(Instigator.Controller).ReceiveLocalizedMessage(Class'KFMainMessages', 1); }
return True;
}
return Super.HandlePickupQuery(Item);
}
function DropFrom(vector StartLocation)
{
local int m;
local KFWeaponPickup Pickup;
local int AmmoThrown, OtherAmmo;
local KFWeapon SinglePistol;
if( !bCanThrow ) return;
AmmoThrown = AmmoAmount(0);
ClientWeaponThrown();
for (m = 0; m < NUM_FIRE_MODES; m++)
{ if (FireMode[m].bIsFiring) StopFire(m);
}
if ( Instigator != none ) DetachFromPawn(Instigator);
if( Instigator.Health > 0 )
{ OtherAmmo = AmmoThrown / 2; AmmoThrown -= OtherAmmo; SinglePistol = Spawn(Class'NicePack.NiceFlareRevolver'); SinglePistol.SellValue = SellValue / 2; SinglePistol.GiveTo(Instigator); SinglePistol.Ammo[0].AmmoAmount = OtherAmmo; SinglePistol.MagAmmoRemaining = MagAmmoRemaining / 2; MagAmmoRemaining = Max(MagAmmoRemaining-SinglePistol.MagAmmoRemaining,0);
}
Pickup = Spawn(class'NicePack.NiceFlareRevolverPickup',,, StartLocation);
if ( Pickup != none )
{ Pickup.InitDroppedPickupFor(self); Pickup.DroppedBy = PlayerController(Instigator.Controller); Pickup.Velocity = Velocity; //fixing dropping exploit Pickup.SellValue = SellValue / 2; Pickup.Cost = Pickup.SellValue / 0.75; Pickup.AmmoAmount[0] = AmmoThrown; Pickup.MagAmmoRemaining = MagAmmoRemaining; if (Instigator.Health > 0) Pickup.bThrown = true;
}
Destroyed();
Destroy();
}
simulated function bool PutDown()
{
if ( Instigator.PendingWeapon == none || Instigator.PendingWeapon.class == class'NicePack.NiceFlareRevolver' )
{ bIsReloading = false;
}
return super.PutDown();
}
defaultproperties
{ AppID=0 FireModeClass(0)=Class'NicePack.NiceDualFlareRevolverFire' DemoReplacement=Class'NicePack.NiceFlareRevolver' PickupClass=Class'NicePack.NiceDualFlareRevolverPickup' ItemName="Dual Flare revolvers NW"
}

View file

@ -0,0 +1,4 @@
class NiceDualFlareRevolverAmmo extends ScrnDualFlareRevolverAmmo;
defaultproperties
{ PickupClass=Class'NicePack.NiceDualFlareRevolverAmmoPickup'
}

View file

@ -0,0 +1,4 @@
class NiceDualFlareRevolverAmmoPickup extends ScrnDualFlareRevolverAmmoPickup;
defaultproperties
{ InventoryType=Class'NicePack.NiceDualFlareRevolverAmmo'
}

View file

@ -0,0 +1,4 @@
class NiceDualFlareRevolverFire extends ScrnDualFlareRevolverFire;
defaultproperties
{ AmmoClass=Class'NicePack.NiceDualFlareRevolverAmmo' ProjectileClass=Class'NicePack.NiceFlareRevolverProjectile'
}

View file

@ -0,0 +1,4 @@
class NiceDualFlareRevolverPickup extends ScrnDualFlareRevolverPickup;
defaultproperties
{ ItemName="Dual Flare Revolvers NW" ItemShortName="Dual Flare Rev. NW" InventoryType=Class'NicePack.NiceDualFlareRevolver'
}

View file

@ -0,0 +1,23 @@
class NiceFlareRevolver extends ScrnFlareRevolver;
simulated function bool PutDown()
{
if ( Instigator.PendingWeapon.class == class'NicePack.NiceDualFlareRevolver' )
{ bIsReloading = false;
}
return super(KFWeapon).PutDown();
}
function GiveTo( pawn Other, optional Pickup Pickup )
{
local KFPlayerReplicationInfo KFPRI;
local KFWeaponPickup WeapPickup;
KFPRI = KFPlayerReplicationInfo(Other.PlayerReplicationInfo);
WeapPickup = KFWeaponPickup(Pickup);
//pick the lowest sell value
if ( WeapPickup != none && KFPRI != none && KFPRI.ClientVeteranSkill != none ) { SellValue = 0.75 * min(WeapPickup.Cost, WeapPickup.default.Cost * KFPRI.ClientVeteranSkill.static.GetCostScaling(KFPRI, WeapPickup.class));
}
Super.GiveTo(Other,Pickup);
}
defaultproperties
{ AppID=0 FireModeClass(0)=Class'NicePack.NiceFlareRevolverFire' PickupClass=Class'NicePack.NiceFlareRevolverPickup' ItemName="Flare Revolver NW"
}

View file

@ -0,0 +1,4 @@
class NiceFlareRevolverAmmo extends ScrnFlareRevolverAmmo;
defaultproperties
{ PickupClass=Class'NicePack.NiceFlareRevolverAmmoPickup'
}

View file

@ -0,0 +1,4 @@
class NiceFlareRevolverAmmoPickup extends ScrnFlareRevolverAmmoPickup;
defaultproperties
{ InventoryType=Class'NicePack.NiceFlareRevolverAmmo'
}

View file

@ -0,0 +1,4 @@
class NiceFlareRevolverFire extends ScrnFlareRevolverFire;
defaultproperties
{ AmmoClass=Class'NicePack.NiceFlareRevolverAmmo' ProjectileClass=Class'NicePack.NiceFlareRevolverProjectile'
}

View file

@ -0,0 +1,24 @@
class NiceFlareRevolverPickup extends ScrnFlareRevolverPickup;
function inventory SpawnCopy( pawn Other ) {
local Inventory CurInv;
local KFWeapon PistolInInventory;
For( CurInv=Other.Inventory; CurInv!=none; CurInv=CurInv.Inventory ) { PistolInInventory = KFWeapon(CurInv); if( PistolInInventory != none && PistolInInventory.class == default.InventoryType ) { // destroy the inventory to force parent SpawnCopy() to make a new instance of class // we specified below if( Inventory!=none ) Inventory.Destroy(); // spawn dual guns instead of another instance of single InventoryType = DualInventoryType; // Make dualies to cost twice of lowest value in case of PERKED+UNPERKED pistols SellValue = 2 * min(SellValue, PistolInInventory.SellValue); AmmoAmount[0]+= PistolInInventory.AmmoAmount(0); MagAmmoRemaining+= PistolInInventory.MagAmmoRemaining; CurInv.Destroyed(); CurInv.Destroy(); Return Super(KFWeaponPickup).SpawnCopy(Other); }
}
InventoryType = Default.InventoryType;
Return Super(KFWeaponPickup).SpawnCopy(Other);
}
function bool CheckCanCarry(KFHumanPawn Hm) {
local Inventory CurInv;
local bool bHasSinglePistol;
local float AddWeight;
AddWeight = class<KFWeapon>(default.InventoryType).default.Weight;
for ( CurInv = Hm.Inventory; CurInv != none; CurInv = CurInv.Inventory ) { if ( CurInv.class == default.DualInventoryType ) { //already have duals, can't carry a single if ( LastCantCarryTime < Level.TimeSeconds && PlayerController(Hm.Controller) != none ) { LastCantCarryTime = Level.TimeSeconds + 0.5; PlayerController(Hm.Controller).ReceiveLocalizedMessage(Class'KFMainMessages', 2); } return false; } else if ( CurInv.class == default.InventoryType ) { bHasSinglePistol = true; AddWeight = default.DualInventoryType.default.Weight - AddWeight; break; }
}
if ( !Hm.CanCarry(AddWeight) ) { if ( LastCantCarryTime < Level.TimeSeconds && PlayerController(Hm.Controller) != none ) { LastCantCarryTime = Level.TimeSeconds + 0.5; PlayerController(Hm.Controller).ReceiveLocalizedMessage(Class'KFMainMessages', 2); }
return false;
}
return true;
}
defaultproperties
{ DualInventoryType=Class'NicePack.NiceDualFlareRevolver' ItemName="Flare Revolver NW" ItemShortName="Flare Rev. NW" InventoryType=Class'NicePack.NiceFlareRevolver'
}

View file

@ -0,0 +1,43 @@
class NiceFlareRevolverProjectile extends ScrnFlareRevolverProjectile;
//overrided to use alternate burning mechanism
simulated function HurtRadius( float DamageAmount, float DamageRadius, class<DamageType> DamageType, float Momentum, vector HitLocation )
{
local actor Victims;
local float damageScale, dist;
local vector dirs;
local int NumKilled;
local KFMonster KFMonsterVictim;
local Pawn P;
local KFPawn KFP;
local array<Pawn> CheckedPawns;
local int i;
local bool bAlreadyChecked;
if ( bHurtEntry ) return;
bHurtEntry = true;
foreach CollidingActors (class 'Actor', Victims, DamageRadius, HitLocation) { // null pawn variables here just to be sure they didn't left from previous iteration // and waste another day of my life to looking for this fucking bug -- PooSH /totallyPissedOff!!! P = none; KFMonsterVictim = none; KFP = none; // don't let blast damage affect fluid - VisibleCollisingActors doesn't really work for them - jag if( (Victims != self) && (Victims != Instigator) &&(Hurtwall != Victims) && (Victims.Role == ROLE_Authority) && !Victims.IsA('FluidSurfaceInfo') && ExtendedZCollision(Victims)==none && KFBulletWhipAttachment(Victims)==none ) { dirs = Victims.Location - HitLocation; dist = FMax(1,VSize(dirs)); dirs = dirs/dist; damageScale = 1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius); if ( Instigator == none || Instigator.Controller == none ) Victims.SetDelayedDamageInstigatorController( InstigatorController ); if ( Victims == LastTouched ) LastTouched = none;
P = Pawn(Victims);
if( P != none ) { for (i = 0; i < CheckedPawns.Length; i++) { if (CheckedPawns[i] == P) { bAlreadyChecked = true; break; } }
if( bAlreadyChecked ) { bAlreadyChecked = false; P = none; continue; }
KFMonsterVictim = KFMonster(Victims);
if( KFMonsterVictim != none && KFMonsterVictim.Health <= 0 ) { KFMonsterVictim = none; }
KFP = KFPawn(Victims);
if( KFMonsterVictim != none ) { damageScale *= KFMonsterVictim.GetExposureTo(HitLocation); } else if( KFP != none ) { damageScale *= KFP.GetExposureTo(HitLocation); }
CheckedPawns[CheckedPawns.Length] = P;
if ( damageScale <= 0) { P = none; continue; } else { P = none; } }
Victims.TakeDamage ( damageScale * DamageAmount, Instigator, Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dirs, (damageScale * Momentum * dirs), DamageType//Class'NicePack.NiceDamTypeFlareProjectileFire' ); if (Vehicle(Victims) != none && Vehicle(Victims).Health > 0) Vehicle(Victims).DriverRadiusDamage(DamageAmount, DamageRadius, InstigatorController, DamageType,//Class'NicePack.NiceDamTypeFlareProjectileFire', Momentum, HitLocation);
if( Role == ROLE_Authority && KFMonsterVictim != none && KFMonsterVictim.Health <= 0 ) { NumKilled++; } }
}
/*
if ( (LastTouched != none) && (LastTouched != self) && (LastTouched != Instigator) && (LastTouched.Role == ROLE_Authority) && !LastTouched.IsA('FluidSurfaceInfo') )
{ Victims = LastTouched; LastTouched = none; dirs = Victims.Location - HitLocation; dist = FMax(1,VSize(dirs)); dirs = dirs/dist; damageScale = FMax(Victims.CollisionRadius/(Victims.CollisionRadius + Victims.CollisionHeight),1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius)); if ( Instigator == none || Instigator.Controller == none ) Victims.SetDelayedDamageInstigatorController(InstigatorController);
log("Part 2 Doing "$(damageScale * DamageAmount)$" damage to "$Victims); Victims.TakeDamage ( damageScale * DamageAmount, Instigator, Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dirs, (damageScale * Momentum * dirs), DamageType ); if (Vehicle(Victims) != none && Vehicle(Victims).Health > 0) Vehicle(Victims).DriverRadiusDamage(DamageAmount, DamageRadius, InstigatorController, DamageType, Momentum, HitLocation);
}
*/
if( Role == ROLE_Authority )
{ if( NumKilled >= 4 ) { KFGameType(Level.Game).DramaticEvent(0.05); } else if( NumKilled >= 2 ) { KFGameType(Level.Game).DramaticEvent(0.03); }
}
bHurtEntry = false;
}
defaultproperties
{ ImpactDamageType=Class'NicePack.NiceDamTypeFlareProjectileImpact' MyDamageType=Class'NicePack.NiceDamTypeFlareProjectileFire'
}

View file

@ -0,0 +1,5 @@
class NiceDamTypeHFR extends NiceDamTypeFire
abstract;
defaultproperties
{ WeaponClass=Class'NicePack.NiceHFR' DeathString="%k incinerated %o (Horzine Flame Rifle)."
}

View file

@ -0,0 +1,5 @@
class NiceDamTypeHFRAssaultRifle extends NiceDamTypeFire
abstract;
defaultproperties
{ heatPart=0.500000 HeadShotDamageMult=6.000000 bCheckForHeadShots=True WeaponClass=Class'NicePack.NiceHFR' DeathString="%k killed %o (Horzine Flame Rifle)." FemaleSuicide="%o shot herself in the foot." MaleSuicide="%o shot himself in the foot." bRagdollBullet=True PawnDamageEmitter=Class'ROEffects.ROBloodPuff' LowGoreDamageEmitter=Class'ROEffects.ROBloodPuffNoGore' LowDetailEmitter=Class'ROEffects.ROBloodPuffSmall' KDamageImpulse=5500.000000 KDeathVel=175.000000 KDeathUpKick=15.000000
}

View file

@ -0,0 +1,296 @@
// Modification of the AAR525 weapons by: [B.R]HekuT
class NiceHFR extends KFWeapon;
#exec OBJ LOAD FILE=KillingFloorWeapons.utx
#exec OBJ LOAD FILE=KillingFloorHUD.utx
#exec OBJ LOAD FILE=Inf_Weapons_Foley.uax
#exec OBJ LOAD FILE=KF_Weapons5_Scopes_Trip_T.utx
var() Material ZoomMat;
var() int lenseMaterialID;
var() float scopePortalFOVHigh;
var() float scopePortalFOV;
var() vector XoffsetScoped;
var() vector XoffsetHighDetail;
var() int scopePitch;
var() int scopeYaw;
var() int scopePitchHigh;
var() int scopeYawHigh;
var ScriptedTexture ScopeScriptedTexture;
var Shader ScopeScriptedShader;
var Material ScriptedTextureFallback;
var Combiner ScriptedScopeCombiner;
var Combiner ScriptedScopeStatic;
var texture TexturedScopeTexture;
var bool bInitializedScope;
var string ZoomMatRef;
var string ScriptedTextureFallbackRef;
static function PreloadAssets(Inventory Inv, optional bool bSkipRefCount)
{
super.PreloadAssets(Inv, bSkipRefCount);
default.ZoomMat = FinalBlend(DynamicLoadObject(default.ZoomMatRef, class'FinalBlend', true));
default.ScriptedTextureFallback = texture(DynamicLoadObject(default.ScriptedTextureFallbackRef, class'texture', true));
if ( M99SniperRifle(Inv) != none )
{ M99SniperRifle(Inv).ZoomMat = default.ZoomMat; M99SniperRifle(Inv).ScriptedTextureFallback = default.ScriptedTextureFallback;
}
}
static function bool UnloadAssets()
{
if ( super.UnloadAssets() )
{ default.ZoomMat = none; default.ScriptedTextureFallback = none;
}
return true;
}
exec function pfov(int thisFOV)
{
if( !class'ROEngine.ROLevelInfo'.static.RODebugMode() ) return;
scopePortalFOV = thisFOV;
}
exec function pPitch(int num)
{
if( !class'ROEngine.ROLevelInfo'.static.RODebugMode() ) return;
scopePitch = num;
scopePitchHigh = num;
}
exec function pYaw(int num)
{
if( !class'ROEngine.ROLevelInfo'.static.RODebugMode() ) return;
scopeYaw = num;
scopeYawHigh = num;
}
simulated exec function TexSize(int i, int j)
{
if( !class'ROEngine.ROLevelInfo'.static.RODebugMode() ) return;
ScopeScriptedTexture.SetSize(i, j);
}
simulated function bool ShouldDrawPortal()
{
if( bAimingRifle ) return true;
else return false;
}
simulated function PostBeginPlay()
{
super.PostBeginPlay();
KFScopeDetail = class'KFMod.KFWeapon'.default.KFScopeDetail;
UpdateScopeMode();
}
simulated function UpdateScopeMode()
{
if (Level.NetMode != NM_DedicatedServer && Instigator != none && Instigator.IsLocallyControlled() && Instigator.IsHumanControlled() )
{ if( KFScopeDetail == KF_ModelScope ) { scopePortalFOV = default.scopePortalFOV; ZoomedDisplayFOV = CalcAspectRatioAdjustedFOV(default.ZoomedDisplayFOV); if (bAimingRifle) { PlayerViewOffset = XoffsetScoped; }
if( ScopeScriptedTexture == none ) { ScopeScriptedTexture = ScriptedTexture(Level.ObjectPool.AllocateObject(class'ScriptedTexture')); }
ScopeScriptedTexture.FallBackMaterial = ScriptedTextureFallback; ScopeScriptedTexture.SetSize(512,512); ScopeScriptedTexture.Client = Self;
if( ScriptedScopeCombiner == none ) { ScriptedScopeCombiner = Combiner(Level.ObjectPool.AllocateObject(class'Combiner')); ScriptedScopeCombiner.Material1 = Texture'KF_Weapons5_Scopes_Trip_T.Scope.MilDot'; ScriptedScopeCombiner.FallbackMaterial = Shader'ScopeShaders.Zoomblur.LensShader'; ScriptedScopeCombiner.CombineOperation = CO_Multiply; ScriptedScopeCombiner.AlphaOperation = AO_Use_Mask; ScriptedScopeCombiner.Material2 = ScopeScriptedTexture; }
if( ScopeScriptedShader == none ) { ScopeScriptedShader = Shader(Level.ObjectPool.AllocateObject(class'Shader')); ScopeScriptedShader.Diffuse = ScriptedScopeCombiner; ScopeScriptedShader.SelfIllumination = ScriptedScopeCombiner; ScopeScriptedShader.FallbackMaterial = Shader'ScopeShaders.Zoomblur.LensShader'; }
bInitializedScope = true; } else if( KFScopeDetail == KF_ModelScopeHigh ) { scopePortalFOV = scopePortalFOVHigh; ZoomedDisplayFOV = CalcAspectRatioAdjustedFOV(default.ZoomedDisplayFOVHigh); if (bAimingRifle) { PlayerViewOffset = XoffsetHighDetail; }
if( ScopeScriptedTexture == none ) { ScopeScriptedTexture = ScriptedTexture(Level.ObjectPool.AllocateObject(class'ScriptedTexture')); } ScopeScriptedTexture.FallBackMaterial = ScriptedTextureFallback; ScopeScriptedTexture.SetSize(1024,1024); ScopeScriptedTexture.Client = Self;
if( ScriptedScopeCombiner == none ) { ScriptedScopeCombiner = Combiner(Level.ObjectPool.AllocateObject(class'Combiner')); ScriptedScopeCombiner.Material1 = Texture'KF_Weapons5_Scopes_Trip_T.Scope.MilDot'; ScriptedScopeCombiner.FallbackMaterial = Shader'ScopeShaders.Zoomblur.LensShader'; ScriptedScopeCombiner.CombineOperation = CO_Multiply; ScriptedScopeCombiner.AlphaOperation = AO_Use_Mask; ScriptedScopeCombiner.Material2 = ScopeScriptedTexture; }
if( ScopeScriptedShader == none ) { ScopeScriptedShader = Shader(Level.ObjectPool.AllocateObject(class'Shader')); ScopeScriptedShader.Diffuse = ScriptedScopeCombiner; ScopeScriptedShader.SelfIllumination = ScriptedScopeCombiner; ScopeScriptedShader.FallbackMaterial = Shader'ScopeShaders.Zoomblur.LensShader'; }
bInitializedScope = true; } else if (KFScopeDetail == KF_TextureScope) { ZoomedDisplayFOV = CalcAspectRatioAdjustedFOV(default.ZoomedDisplayFOV); PlayerViewOffset.X = default.PlayerViewOffset.X;
bInitializedScope = true; }
}
}
simulated event RenderTexture(ScriptedTexture Tex)
{
local rotator RollMod;
RollMod = Instigator.GetViewRotation();
if(Owner != none && Instigator != none && Tex != none && Tex.Client != none) Tex.DrawPortal(0,0,Tex.USize,Tex.VSize,Owner,(Instigator.Location + Instigator.EyePosition()), RollMod, scopePortalFOV );
}
/**
* Handles all the functionality for zooming in including
* setting the parameters for the weapon, pawn, and playercontroller
*
* @param bAnimateTransition whether or not to animate this zoom transition
*/
simulated function ZoomIn(bool bAnimateTransition)
{
super(BaseKFWeapon).ZoomIn(bAnimateTransition);
bAimingRifle = True;
if( KFHumanPawn(Instigator)!=none ) KFHumanPawn(Instigator).SetAiming(True);
if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none )
{ if( AimInSound != none ) { PlayOwnedSound(AimInSound, SLOT_Interact,,,,, false); }
}
}
/**
* Handles all the functionality for zooming out including
* setting the parameters for the weapon, pawn, and playercontroller
*
* @param bAnimateTransition whether or not to animate this zoom transition
*/
simulated function ZoomOut(bool bAnimateTransition)
{
super.ZoomOut(bAnimateTransition);
bAimingRifle = False;
if( KFHumanPawn(Instigator)!=none ) KFHumanPawn(Instigator).SetAiming(False);
if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none )
{ if( AimOutSound != none ) { PlayOwnedSound(AimOutSound, SLOT_Interact,,,,, false); } KFPlayerController(Instigator.Controller).TransitionFOV(KFPlayerController(Instigator.Controller).DefaultFOV,0.0);
}
}
simulated event OnZoomInFinished()
{
local name anim;
local float frame, rate;
GetAnimParams(0, anim, frame, rate);
if (ClientState == WS_ReadyToFire)
{ if (anim == IdleAnim) { PlayIdle(); }
}
if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none && KFScopeDetail == KF_TextureScope )
{ KFPlayerController(Instigator.Controller).TransitionFOV(PlayerIronSightFOV,0.0);
}
}
simulated event RenderOverlays(Canvas Canvas)
{
local int m;
local PlayerController PC;
if (Instigator == none) return;
PC = PlayerController(Instigator.Controller);
if(PC == none) return;
if(!bInitializedScope && PC != none )
{ UpdateScopeMode();
}
Canvas.DrawActor(none, false, true);
for (m = 0; m < NUM_FIRE_MODES; m++)
{ if (FireMode[m] != none) { FireMode[m].DrawMuzzleFlash(Canvas); }
}
SetLocation( Instigator.Location + Instigator.CalcDrawOffset(self) );
SetRotation( Instigator.GetViewRotation() + ZoomRotInterp);
PreDrawFPWeapon();
if(bAimingRifle && PC != none && (KFScopeDetail == KF_ModelScope || KFScopeDetail == KF_ModelScopeHigh)) { if (ShouldDrawPortal()) { if ( ScopeScriptedTexture != none ) { Skins[LenseMaterialID] = ScopeScriptedShader; ScopeScriptedTexture.Client = Self; ScopeScriptedTexture.Revision = (ScopeScriptedTexture.Revision +1); } }
bDrawingFirstPerson = true; Canvas.DrawBoundActor(self, false, false,DisplayFOV,PC.Rotation,rot(0,0,0),Instigator.CalcZoomedDrawOffset(self)); bDrawingFirstPerson = false;
}
else if( KFScopeDetail == KF_TextureScope && PC.DesiredFOV == PlayerIronSightFOV && bAimingRifle)
{ Skins[LenseMaterialID] = ScriptedTextureFallback;
SetZoomBlendColor(Canvas);
Canvas.Style = ERenderStyle.STY_Normal; Canvas.SetPos(0, 0); Canvas.DrawTile(ZoomMat, (Canvas.SizeX - Canvas.SizeY) / 2, Canvas.SizeY, 0.0, 0.0, 8, 8); Canvas.SetPos(Canvas.SizeX, 0); Canvas.DrawTile(ZoomMat, -(Canvas.SizeX - Canvas.SizeY) / 2, Canvas.SizeY, 0.0, 0.0, 8, 8);
Canvas.Style = 255; Canvas.SetPos((Canvas.SizeX - Canvas.SizeY) / 2,0); Canvas.DrawTile(ZoomMat, Canvas.SizeY, Canvas.SizeY, 0.0, 0.0, 1024, 1024);
Canvas.Font = Canvas.MedFont; Canvas.SetDrawColor(200,150,0);
Canvas.SetPos(Canvas.SizeX * 0.16, Canvas.SizeY * 0.43); Canvas.DrawText("Zoom: 3.0");
Canvas.SetPos(Canvas.SizeX * 0.16, Canvas.SizeY * 0.47);
} else { Skins[LenseMaterialID] = ScriptedTextureFallback; bDrawingFirstPerson = true; Canvas.DrawActor(self, false, false, DisplayFOV); bDrawingFirstPerson = false; }
}
simulated function float CalcAspectRatioAdjustedFOV(float AdjustFOV)
{
local KFPlayerController KFPC;
local float ResX, ResY;
local float AspectRatio;
KFPC = KFPlayerController(Level.GetLocalPlayerController());
if( KFPC == none )
{ return AdjustFOV;
}
ResX = float(GUIController(KFPC.Player.GUIController).ResX);
ResY = float(GUIController(KFPC.Player.GUIController).ResY);
AspectRatio = ResX / ResY;
if ( KFPC.bUseTrueWideScreenFOV && AspectRatio >= 1.60 ) //1.6 = 16/10 which is 16:10 ratio and 16:9 comes to 1.77
{ return CalcFOVForAspectRatio(AdjustFOV);
}
else
{ return AdjustFOV;
}
}
simulated function AdjustIngameScope()
{
local PlayerController PC;
if(Instigator == none || PlayerController(Instigator.Controller) == none) return;
PC = PlayerController(Instigator.Controller);
if( !bHasScope ) return;
switch (KFScopeDetail)
{ case KF_ModelScope: if( bAimingRifle ) DisplayFOV = CalcAspectRatioAdjustedFOV(default.ZoomedDisplayFOV); if ( PC.DesiredFOV == PlayerIronSightFOV && bAimingRifle ) { if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none ) { KFPlayerController(Instigator.Controller).TransitionFOV(KFPlayerController(Instigator.Controller).DefaultFOV,0.0);
} } break;
case KF_TextureScope: if( bAimingRifle ) DisplayFOV = CalcAspectRatioAdjustedFOV(default.ZoomedDisplayFOV); if ( bAimingRifle && PC.DesiredFOV != PlayerIronSightFOV ) { if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none ) { KFPlayerController(Instigator.Controller).TransitionFOV(PlayerIronSightFOV,0.0); } } break;
case KF_ModelScopeHigh: if( bAimingRifle ) { if( ZoomedDisplayFOVHigh > 0 ) { DisplayFOV = CalcAspectRatioAdjustedFOV(default.ZoomedDisplayFOVHigh); } else { DisplayFOV = CalcAspectRatioAdjustedFOV(default.ZoomedDisplayFOV); } } if ( bAimingRifle && PC.DesiredFOV == PlayerIronSightFOV ) { if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none ) { KFPlayerController(Instigator.Controller).TransitionFOV(KFPlayerController(Instigator.Controller).DefaultFOV,0.0); } } break;
}
UpdateScopeMode();
}
simulated event Destroyed()
{
if (ScopeScriptedTexture != none)
{ ScopeScriptedTexture.Client = none; Level.ObjectPool.FreeObject(ScopeScriptedTexture); ScopeScriptedTexture=none;
}
if (ScriptedScopeCombiner != none)
{ ScriptedScopeCombiner.Material2 = none; Level.ObjectPool.FreeObject(ScriptedScopeCombiner); ScriptedScopeCombiner = none;
}
if (ScopeScriptedShader != none)
{ ScopeScriptedShader.Diffuse = none; ScopeScriptedShader.SelfIllumination = none; Level.ObjectPool.FreeObject(ScopeScriptedShader); ScopeScriptedShader = none;
}
Super.Destroyed();
}
simulated function PreTravelCleanUp()
{
if (ScopeScriptedTexture != none)
{ ScopeScriptedTexture.Client = none; Level.ObjectPool.FreeObject(ScopeScriptedTexture); ScopeScriptedTexture=none;
}
if (ScriptedScopeCombiner != none)
{ ScriptedScopeCombiner.Material2 = none; Level.ObjectPool.FreeObject(ScriptedScopeCombiner); ScriptedScopeCombiner = none;
}
if (ScopeScriptedShader != none)
{ ScopeScriptedShader.Diffuse = none; ScopeScriptedShader.SelfIllumination = none; Level.ObjectPool.FreeObject(ScopeScriptedShader); ScopeScriptedShader = none;
}
}
state PendingClientWeaponSet
{
simulated function Timer()
{ if ( Pawn(Owner) != none && !bIsReloading ) { ClientWeaponSet(bPendingSwitch); }
if ( IsInState('PendingClientWeaponSet') ) { SetTimer(0.1, false); }
}
simulated function BeginState()
{ SetTimer(0.1, false);
}
simulated function EndState()
{
}
}
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;
}
function bool RecommendRangedAttack()
{
return true;
}
function float SuggestAttackStyle()
{
return -1.0;
}
function bool RecommendLongRangedAttack()
{
return true;
}
simulated function AnimEnd(int channel)
{
if(!FireMode[1].IsInState('FireLoop'))
{ Super.AnimEnd(channel);
}
}
simulated function WeaponTick(float dt)
{
Super.WeaponTick(dt);
}
simulated function bool StartFire(int Mode)
{
if( Mode == 0 ) return super.StartFire(Mode);
if( !super.StartFire(Mode) ) 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;
}
defaultproperties
{ lenseMaterialID=3 scopePortalFOVHigh=22.000000 scopePortalFOV=12.000000 ZoomMatRef="KillingFloorWeapons.Xbow.CommandoCrossFinalBlend" ScriptedTextureFallbackRef="NicePackT.HFR.CBLens_cmb" bHasScope=True ZoomedDisplayFOVHigh=35.000000 MagCapacity=10 ReloadRate=3.000000 ReloadAnim="Reload" ReloadAnimRate=0.600000 WeaponReloadAnim="Reload_M4" bSteadyAim=True Weight=7.000000 bHasAimingMode=True IdleAimAnim="Idle" StandardDisplayFOV=60.000000 bModeZeroCanDryFire=True SleeveNum=0 TraderInfoTexture=Texture'NicePackT.HFR.AAR525S_Trader' bIsTier2Weapon=True MeshRef="NicePackA.HFR" SkinRefs(0)="KF_Weapons_Trip_T.hands.hands_1stP_military_cmb" SkinRefs(1)="NicePackT.HFR.AAR525S_TEX_cmb" SkinRefs(2)="KF_Weapons_Trip_T.Rifles.crossbow_cmb" SelectSoundRef="KF_AK47Snd.AK47_Select" HudImageRef="NicePackT.HFR.AAR525S_unselected" SelectedHudImageRef="NicePackT.HFR.AAR525S_selected" PlayerIronSightFOV=65.000000 ZoomedDisplayFOV=32.000000 FireModeClass(0)=Class'NicePack.NiceHFRPFire' FireModeClass(1)=Class'NicePack.NiceHFRBurstFire' PutDownAnim="PutDown" AIRating=0.700000 CurrentRating=0.700000 Description="Advanced horzine flame rifle." EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000) DisplayFOV=60.000000 Priority=145 CustomCrosshair=11 CustomCrossHairTextureName="Crosshairs.HUD.Crosshair_Cross5" InventoryGroup=4 GroupOffset=8 PickupClass=Class'NicePack.NiceHFRPickup' PlayerViewOffset=(X=18.000000,Y=15.000000,Z=-6.000000) BobDamping=6.000000 AttachmentClass=Class'NicePack.NiceHFRAttachment' IconCoords=(X1=245,Y1=39,X2=329,Y2=79) ItemName="Horzine flame rifle" DrawScale=0.900000 TransientSoundVolume=1.250000
}

View file

@ -0,0 +1,5 @@
class NiceHFRAmmo extends KFAmmunition;
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
defaultproperties
{ AmmoPickupAmount=15 MaxAmmo=100 InitialAmount=40 PickupClass=Class'NicePack.NiceHFRAmmoPickup' IconMaterial=Texture'KillingFloorHUD.Generic.HUD' IconCoords=(X1=336,Y1=82,X2=382,Y2=125) ItemName="Fire balloon"
}

View file

@ -0,0 +1,4 @@
class NiceHFRAmmoPickup extends KFAmmoPickup;
defaultproperties
{ AmmoAmount=15 InventoryType=Class'NicePack.NiceHFRAmmo' PickupMessage="Fire balloon" StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
}

View file

@ -0,0 +1,4 @@
class NiceHFRAttachment extends KFWeaponAttachment;
defaultproperties
{ mTracerClass=Class'KFMod.SPSniperTracer' MovementAnims(0)="JogF_M4203" MovementAnims(1)="JogB_M4203" MovementAnims(2)="JogL_M4203" MovementAnims(3)="JogR_M4203" TurnLeftAnim="TurnL_M4203" TurnRightAnim="TurnR_M4203" CrouchAnims(0)="CHWalkF_M4203" CrouchAnims(1)="CHWalkB_M4203" CrouchAnims(2)="CHWalkL_M4203" CrouchAnims(3)="CHWalkR_M4203" WalkAnims(0)="WalkF_M4203" WalkAnims(1)="WalkB_M4203" WalkAnims(2)="WalkL_M4203" WalkAnims(3)="WalkR_M4203" CrouchTurnRightAnim="CH_TurnR_M4203" CrouchTurnLeftAnim="CH_TurnL_M4203" IdleCrouchAnim="CHIdle_M4203" IdleWeaponAnim="Idle_M4203" IdleRestAnim="Idle_M4203" IdleChatAnim="Idle_M4203" IdleHeavyAnim="Idle_M4203" IdleRifleAnim="Idle_M4203" FireAnims(0)="Fire_M4203" FireAnims(1)="Fire_M4203" FireAnims(2)="Fire_M4203" FireAnims(3)="Fire_M4203" FireAltAnims(0)="Reload_Secondary_M4203" FireAltAnims(1)="Reload_Secondary_M4203" FireAltAnims(2)="Reload_Secondary_M4203" FireAltAnims(3)="Reload_Secondary_M4203" FireCrouchAnims(0)="CHFire_M4203" FireCrouchAnims(1)="CHFire_M4203" FireCrouchAnims(2)="CHFire_M4203" FireCrouchAnims(3)="CHFire_M4203" FireCrouchAltAnims(0)="Reload_Secondary_M4203" FireCrouchAltAnims(1)="Reload_Secondary_M4203" FireCrouchAltAnims(2)="Reload_Secondary_M4203" FireCrouchAltAnims(3)="Reload_Secondary_M4203" HitAnims(0)="HitF_M4203" HitAnims(1)="HitB_M4203" HitAnims(2)="HitL_M4203" HitAnims(3)="HitR_M4203" PostFireBlendStandAnim="Blend_M4203" PostFireBlendCrouchAnim="CHBlend_M4203" MeshRef="NicePackA.HFR_3rd" WeaponAmbientScale=2.000000 SplashEffect=Class'ROEffects.BulletSplashEmitter'
}

View file

@ -0,0 +1,4 @@
class NiceHFRBurstFire extends FlameBurstFire;
defaultproperties
{ FireLoopAnim="Fire_Flame" AmmoClass=Class'NicePack.NiceHFRAmmo' ProjectileClass=Class'NicePack.NiceHFRTendril'
}

View file

@ -0,0 +1,20 @@
class NiceHFRFlame extends HitFlame;
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'NicePack.NiceHFRFlameB',self); }
}
}
simulated function Destroyed()
{
if( SecondaryFlame != none )
{ SecondaryFlame.Kill();
}
}
defaultproperties
{ FlameSpawnInterval=0.500000 mParticleType=PT_Stream mLifeRange(0)=1.000000 mLifeRange(1)=1.500000 mRegenRange(0)=60.000000 mRegenRange(1)=60.000000 mMassRange(0)=0.500000 mMassRange(1)=1.000000 mSizeRange(0)=4.000000 mSizeRange(1)=8.000000 mGrowthRate=-52.000000 mAttenKa=0.000000 mAttenKb=0.000000 mRandTextures=True mAttraction=100.000000 Physics=PHYS_Trailer AmbientSound=Sound'Amb_Destruction.Fire.Kessel_Fire_Small_Barrel' Skins(0)=Texture'KFX.KFFlames' Style=STY_Additive SoundVolume=255 TransientSoundVolume=0.000000 TransientSoundRadius=50.000000 bNotOnDedServer=False
}

View file

@ -0,0 +1,5 @@
class NiceHFRFlameB extends Emitter;
defaultproperties
{ Begin Object Class=SpriteEmitter Name=SpriteEmitter0 UseColorScale=True FadeOut=True SpinParticles=True UseSizeScale=True UseRegularSizeScale=False UniformSize=True UseRandomSubdivision=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) ColorMultiplierRange=(Z=(Min=0.670000,Max=2.000000)) FadeOutStartTime=0.501500 MaxParticles=15 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=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 Texture=Texture'KillingFloorWeapons.FlameThrower.FlameThrowerFire' TextureUSubdivisions=1 TextureVSubdivisions=1 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(0)=SpriteEmitter'NicePack.NiceHFRFlameB.SpriteEmitter0'
LightType=LT_Pulse LightHue=30 LightSaturation=100 LightBrightness=300.000000 LightRadius=4.000000 bNoDelete=False bDynamicLight=True bNetTemporary=True Physics=PHYS_Trailer
}

View file

@ -0,0 +1,4 @@
class NiceHFRPFire extends KFFire;
defaultproperties
{ FireAimedAnim="Fire_Iron" RecoilRate=0.120000 maxVerticalRecoilAngle=500 bAccuracyBonusForSemiAuto=True bRandomPitchFireSound=False FireSoundRef="KF_SP_LongmusketSnd.KFO_Sniper_Fire_M" StereoFireSoundRef="KF_SP_LongmusketSnd.KFO_Sniper_Fire_S" NoAmmoSoundRef="KF_AK47Snd.AK47_DryFire" DamageType=Class'NicePack.NiceDamTypeHFRAssaultRifle' DamageMax=50 Momentum=8500.000000 bWaitForRelease=True TransientSoundVolume=1.200000 TransientSoundRadius=500.000000 FireLoopAnim="Fire" FireAnimRate=0.909000 TweenTime=0.025000 FireForce="AssaultRifleFire" FireRate=0.600000 AmmoClass=Class'NicePack.NiceHFRAmmo' AmmoPerFire=1 ShakeRotMag=(X=50.000000,Y=50.000000,Z=350.000000) ShakeRotRate=(X=5000.000000,Y=5000.000000,Z=5000.000000) ShakeRotTime=0.750000 ShakeOffsetMag=(X=6.000000,Y=3.000000,Z=7.500000) ShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000) ShakeOffsetTime=1.250000 BotRefireRate=0.990000 FlashEmitterClass=Class'ROEffects.MuzzleFlash1stSPSniper' aimerror=42.000000 Spread=0.015000 SpreadStyle=SS_Random
}

View file

@ -0,0 +1,4 @@
class NiceHFRPickup extends KFWeaponPickup;
defaultproperties
{ Weight=7.000000 AmmoCost=30 BuyClipSize=15 PowerValue=100 SpeedValue=100 RangeValue=40 Description="Advanced horzine flame rifle." ItemName="Horzine flame rifle" ItemShortName="HFR" AmmoItemName="Fire balloon" AmmoMesh=StaticMesh'KillingFloorStatics.FT_AmmoMesh' CorrespondingPerkIndex=5 EquipmentCategoryID=3 InventoryType=Class'NicePack.NiceHFR' PickupMessage="You got the HFR." PickupSound=Sound'KF_AK47Snd.AK47_Pickup' PickupForce="AssaultRiflePickup" StaticMesh=StaticMesh'NicePackSM.HFR.AAR525_Black_Pickup' CollisionRadius=30.000000 CollisionHeight=5.000000
}

View file

@ -0,0 +1,4 @@
class NiceHFRTendril extends FlameTendril;
defaultproperties
{ Damage=36.000000 MyDamageType=Class'NicePack.NiceDamTypeHFR'
}

View file

@ -0,0 +1,5 @@
class NiceDamTypeHuskGun extends NiceDamTypeFire
abstract;
defaultproperties
{ bCheckForHeadShots=True WeaponClass=Class'NicePack.NiceHuskGun' DeathString="%k killed %o (Husk Gun)." FemaleSuicide="%o blew up." MaleSuicide="%o blew up."
}

View file

@ -0,0 +1,14 @@
class NiceDamTypeHuskGunProjectileImpact extends NiceDamTypeFire;
static function GetHitEffects(out class<xEmitter> HitEffects[4], int VictimHealth)
{
HitEffects[0] = class'HitSmoke';
if( VictimHealth <= 0 ) HitEffects[1] = class'KFHitFlame';
else if ( FRand() < 0.8 ) HitEffects[1] = class'KFHitFlame';
}
static function AwardDamage(KFSteamStatsAndAchievements KFStatsAndAchievements, int Amount)
{
KFStatsAndAchievements.AddFlameThrowerDamage(Amount);
}
defaultproperties
{ HeadShotDamageMult=1.500000 bCheckForHeadShots=True WeaponClass=Class'NicePack.NiceHuskGun' DeathString="%k killed %o (Husk Gun)." FemaleSuicide="%o blew up." MaleSuicide="%o blew up." bRagdollBullet=True bBulletHit=True PawnDamageEmitter=Class'ROEffects.ROBloodPuff' LowGoreDamageEmitter=Class'ROEffects.ROBloodPuffNoGore' LowDetailEmitter=Class'ROEffects.ROBloodPuffSmall' DeathOverlayMaterial=Combiner'Effects_Tex.GoreDecals.PlayerDeathOverlay' DeathOverlayTime=999.000000 KDamageImpulse=10000.000000 KDeathVel=300.000000 KDeathUpKick=100.000000 HumanObliterationThreshhold=200
}

View file

@ -0,0 +1,5 @@
class NiceDamTypeHuskGun_Alt extends NiceDamTypeHuskGun
abstract;
defaultproperties
{ HeadShotDamageMult=1.000000 bCheckForHeadShots=False DeathString="%k burned down %o with Napalm." FemaleSuicide="%o burned her pretty butt up." MaleSuicide="%o burned his a** up."
}

View file

@ -0,0 +1,52 @@
/**
* Attempt to make Husk Gun actually usefull.
*/
class NiceHuskGun extends ScrnHuskGun;
/*
// both fire modes share the same ammo pool, so don't give ammo twice
function GiveAmmo(int m, WeaponPickup WP, bool bJustSpawned)
{
local bool bJustSpawnedAmmo;
local int addAmount, InitialAmount;
local float AddMultiplier;
UpdateMagCapacity(Instigator.PlayerReplicationInfo);
if ( FireMode[m] != none && FireMode[m].AmmoClass != none )
{ Ammo[m] = Ammunition(Instigator.FindInventoryType(FireMode[m].AmmoClass)); bJustSpawnedAmmo = false;
if ( bNoAmmoInstances ) { if ( (FireMode[m].AmmoClass == none) || ((m != 0) && (FireMode[m].AmmoClass == FireMode[0].AmmoClass)) ) return;
InitialAmount = FireMode[m].AmmoClass.Default.InitialAmount;
if(WP!=none && WP.bThrown==true) InitialAmount = WP.AmmoAmount[m]; else { // Other change - if not thrown, give the gun a full clip MagAmmoRemaining = MagCapacity; }
if ( Ammo[m] != none ) { addamount = InitialAmount + Ammo[m].AmmoAmount; Ammo[m].Destroy(); } else addAmount = InitialAmount;
AddAmmo(addAmount,m); } else { if ( (Ammo[m] == none) && (FireMode[m].AmmoClass != none) ) { Ammo[m] = Spawn(FireMode[m].AmmoClass, Instigator); Instigator.AddInventory(Ammo[m]); bJustSpawnedAmmo = true; } else if ( (m == 0) || (FireMode[m].AmmoClass != FireMode[0].AmmoClass) ) bJustSpawnedAmmo = ( bJustSpawned || ((WP != none) && !WP.bWeaponStay) );
// and here is the modification for instanced ammo actors
if(WP!=none && WP.bThrown==true) { addAmount = WP.AmmoAmount[m]; } else if ( bJustSpawnedAmmo ) { if ( KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo) != none && KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill != none ) { AddMultiplier = KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill.static.AddExtraAmmoFor(KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo), FireMode[m].AmmoClass); } else { AddMultiplier = 1.0; }
if (default.MagCapacity == 0) addAmount = 0; // prevent division by zero. else addAmount = Ammo[m].InitialAmount * (float(MagCapacity) / float(default.MagCapacity)) * AddMultiplier; }
//removed: WP.Class == class'BoomstickPickup' -- (c) PooSH if ( WP != none && m > 0 ) { return; }
Ammo[m].AddAmmo(addAmount); Ammo[m].GotoState(''); }
}
}
*/
/*
simulated function bool ConsumeAmmo( int Mode, float Load, optional bool bAmountNeededIsMax )
{
return super.ConsumeAmmo(0, Load, bAmountNeededIsMax);
}
simulated function int AmmoAmount(int mode)
{
return super.AmmoAmount(0);
}
*/
/*
//v2.60: Reload speed bonus affects charge rate
simulated function bool StartFire(int Mode)
{
local ScrnHuskGunFire f;
local KFPlayerReplicationInfo KFPRI;
if ( super.StartFire(Mode) ) { f = ScrnHuskGunFire(FireMode[Mode]); if ( Mode == 0 && f != none ) { f.MaxChargeTime = f.default.MaxChargeTime; KFPRI = KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo); if ( KFPRI != none && KFPRI.ClientVeteranSkill != none) f.MaxChargeTime /= KFPRI.ClientVeteranSkill.static.GetReloadSpeedModifier(KFPRI, self); } return true;
}
return false;
}
*/
defaultproperties
{ Weight=8.000000 FireModeClass(0)=Class'NicePack.NiceHuskGunFire' FireModeClass(1)=Class'NicePack.NiceHuskGunAltFire' PickupClass=Class'NicePack.NiceHuskGunPickup' ItemName="Husk Gun / Napalm Launcher NW"
}

View file

@ -0,0 +1,29 @@
// NAPALM THROWER
class NiceHuskGunAltFire extends ScrnHuskGunAltFire;
/*
//instant shot, without holding
function ModeHoldFire() { }
function Charge() { }
function PlayPreFire() { }
function Timer() { }
function class<Projectile> GetDesiredProjectileClass()
{
return ProjectileClass;
}
function PostSpawnProjectile(Projectile P)
{
super(KFShotgunFire).PostSpawnProjectile(P); // bypass HuskGunFire
}
simulated function bool AllowFire()
{
return (Weapon.AmmoAmount(ThisModeNum) >= MaxChargeAmmo);
}
function ModeDoFire()
{
if (!AllowFire()) return; Weapon.ConsumeAmmo(ThisModeNum, MaxChargeAmmo-1); // +1 will be consumed in parent function
super(KFShotgunFire).ModeDoFire();
}
*/
defaultproperties
{ MaxChargeAmmo=30 ProjectileClass=Class'NicePack.NiceHuskGunProjectile_Alt'
}

View file

@ -0,0 +1,4 @@
class NiceHuskGunAmmo extends ScrnHuskGunAmmo;
defaultproperties
{ MaxAmmo=150 InitialAmount=75 PickupClass=Class'NicePack.NiceHuskGunAmmoPickup'
}

View file

@ -0,0 +1,4 @@
class NiceHuskGunAmmoPickup extends ScrnHuskGunAmmoPickup;
defaultproperties
{ InventoryType=Class'NicePack.NiceHuskGunAmmo'
}

View file

@ -0,0 +1,93 @@
class NiceHuskGunFire extends ScrnHuskGunFire;
/*
var int AmmoInCharge; //current charged amount var() int MaxChargeAmmo; //maximum charge
function Timer()
{
//local PlayerController Player;
//consume ammo while charging
if ( HoldTime > 0.0 && !bNowWaiting && AmmoInCharge < MaxChargeAmmo && Weapon.AmmoAmount(ThisModeNum) > 0 ) { Charge(); // if (AmmoInCharge == MaxChargeAmmo) { // Player = Level.GetLocalPlayerController(); // if (Player != none) // Player.ReceiveLocalizedMessage(class'ScrnBalanceSrv.ScrnPlayerMessage',0); // }
}
super.Timer();
}
function Charge()
{
local int AmmoShouldConsumed;
if( HoldTime < MaxChargeTime) AmmoShouldConsumed = clamp(round(MaxChargeAmmo*HoldTime/MaxChargeTime), 1, MaxChargeAmmo);
else AmmoShouldConsumed = MaxChargeAmmo;// full charge
if (AmmoShouldConsumed != AmmoInCharge) { if (AmmoShouldConsumed - AmmoInCharge > Weapon.AmmoAmount(ThisModeNum)) AmmoShouldConsumed = Weapon.AmmoAmount(ThisModeNum) + AmmoInCharge; Weapon.ConsumeAmmo(ThisModeNum, AmmoShouldConsumed - AmmoInCharge); AmmoInCharge = AmmoShouldConsumed; ScrnHuskGun(Weapon).ChargeAmount = GetChargeAmount();
}
}
function float GetChargeAmount()
{
return float(AmmoInCharge) / float(MaxChargeAmmo);
}
simulated function bool AllowFire()
{
return (Weapon.AmmoAmount(ThisModeNum) >= AmmoPerFire);
}
*/
//overrided to restore old damage radius
//(c) PooSH
function PostSpawnProjectile(Projectile P)
{
local HuskGunProjectile HGP;
super(KFShotgunFire).PostSpawnProjectile(P);
HGP = HuskGunProjectile(p);
if ( HGP != none ) { if( AmmoInCharge < MaxChargeAmmo ) { HGP.ImpactDamage *= AmmoInCharge; HGP.Damage *= 1.0 + GetChargeAmount(); // up to 2x damage HGP.DamageRadius *= 1.0 + 2 * GetChargeAmount();// up 2x the damage radius } else { HGP.ImpactDamage *= MaxChargeAmmo; //50*10 = 500 HGP.Damage *= 2.0; // up from 2x HGP.DamageRadius *= 3.0; // down from x3 } AmmoInCharge = 0; //reset charge after spawning a projectile ScrnHuskGun(Weapon).ChargeAmount = 0;
}
}
/*
//copy pasted and cutted out ammo consuming, because we did it in time
function ModeDoFire()
{
local float Rec;
if (!AllowFire() && HoldTime ~= 0) 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; }
}
if (!AllowFire() && HoldTime ~= 0) return;
if (MaxHoldTime > 0.0) HoldTime = FMin(HoldTime, MaxHoldTime);
// server
if (Weapon.Role == ROLE_Authority)
{ Charge();
DoFireEffect(); 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 (bIsFiring) NextFireTime += MaxHoldTime + FireRate; else NextFireTime = Level.TimeSeconds + FireRate;
}
else
{ NextFireTime += FireRate; NextFireTime = FMax(NextFireTime, Level.TimeSeconds);
}
Load = AmmoPerFire;
HoldTime = 0;
AmmoInCharge = 0;
if (Instigator.PendingWeapon != Weapon && Instigator.PendingWeapon != none)
{ bIsFiring = false; Weapon.PutDown();
}
// client
if (Instigator.IsLocallyControlled())
{ HandleRecoil(Rec);
}
}
*/
defaultproperties
{ WeakProjectileClass=Class'NicePack.NiceHuskGunProjectile_Weak' StrongProjectileClass=Class'NicePack.NiceHuskGunProjectile_Strong' AmmoClass=Class'NicePack.NiceHuskGunAmmo' ProjectileClass=Class'NicePack.NiceHuskGunProjectile'
}

View file

@ -0,0 +1,4 @@
class NiceHuskGunPickup extends ScrnHuskGunPickup;
defaultproperties
{ Weight=8.000000 ItemName="Husk Gun / Napalm Launcher NW" ItemShortName="Husk Gun NW" InventoryType=Class'NicePack.NiceHuskGun'
}

View file

@ -0,0 +1,74 @@
class NiceHuskGunProjectile extends ScrnHuskGunProjectile;
simulated function ProcessTouch(Actor Other, Vector HitLocation)
{
local vector X;
local Vector TempHitLocation, HitNormal;
local array<int> HitPoints;
local KFPawn HitPawn;
// Don't let it hit this player, or blow up on another player
if ( Other == none || Other == Instigator || Other.Base == Instigator ) return;
// Don't collide with bullet whip attachments
if( KFBulletWhipAttachment(Other) != none )
{ return;
}
// Don't allow hits on poeple on the same team
if( KFHumanPawn(Other) != none && Instigator != none && KFHumanPawn(Other).PlayerReplicationInfo.Team.TeamIndex == Instigator.PlayerReplicationInfo.Team.TeamIndex )
{ return;
}
if( !bDud )
{ Explode(HitLocation,Normal(HitLocation-Other.Location));
}
// Use the instigator's location if it exists. This fixes issues with
// the original location of the projectile being really far away from
// the real Origloc due to it taking a couple of milliseconds to
// replicate the location to the client and the first replicated location has
// already moved quite a bit.
if( Instigator != none )
{ OrigLoc = Instigator.Location;
}
X = Vector(Rotation);
if( Role == ROLE_Authority )
{ if( ROBulletWhipAttachment(Other) != none ) { if(!Other.Base.bDeleteMe) { Other = Instigator.HitPointTrace(TempHitLocation, HitNormal, HitLocation + (200 * X), HitPoints, HitLocation,, 1);
if( Other == none || HitPoints.Length == 0 ) return;
HitPawn = KFPawn(Other);
if (Role == ROLE_Authority) { if ( HitPawn != none ) { // Hit detection debugging /*log("Bullet hit "$HitPawn.PlayerReplicationInfo.PlayerName); HitPawn.HitStart = HitLocation; HitPawn.HitEnd = HitLocation + (65535 * X);*/
if( !HitPawn.bDeleteMe ) HitPawn.ProcessLocationalDamage(ImpactDamage, Instigator, TempHitLocation, MomentumTransfer * Normal(Velocity), ImpactDamageType,HitPoints);
// Hit detection debugging //if( Level.NetMode == NM_Standalone) // HitPawn.DrawBoneLocation(); } } } } else { if (Pawn(Other) != none && Pawn(Other).IsHeadShot(HitLocation, X, 1.0)) { Pawn(Other).TakeDamage(ImpactDamage * HeadShotDamageMult, Instigator, HitLocation, MomentumTransfer * Normal(Velocity), ImpactDamageType); } else { Other.TakeDamage(ImpactDamage, Instigator, HitLocation, MomentumTransfer * Normal(Velocity), ImpactDamageType); } }
}
}
// Overrided to not use alternate burning mechanism
simulated function HurtRadius( float DamageAmount, float DamageRadius, class<DamageType> DamageType, float Momentum, vector HitLocation )
{
local actor Victims;
local float damageScale, dist;
local vector dirs;
local int NumKilled;
local Pawn P;
local KFMonster KFMonsterVictim;
local KFPawn KFP;
local array<Pawn> CheckedPawns;
local int i;
local bool bAlreadyChecked;
//local int OldHealth;
if ( bHurtEntry ) return;
bHurtEntry = true;
foreach CollidingActors (class 'Actor', Victims, DamageRadius, HitLocation) { // null pawn variables here just to be sure they didn't left from previous iteration // and waste another day of my life to looking for this fucking bug -- PooSH /totallyPissedOff!!! P = none; KFMonsterVictim = none; KFP = none; if(Victims == none) continue; // don't let blast damage affect fluid - VisibleCollisingActors doesn't really work for them - jag if( (Victims != self) && (Victims != Instigator) &&(Hurtwall != Victims) && (Victims.Role == ROLE_Authority) && !Victims.IsA('FluidSurfaceInfo') && ExtendedZCollision(Victims)==none && KFBulletWhipAttachment(Victims)==none ) { dirs = Victims.Location - HitLocation; dist = FMax(1,VSize(dirs)); dirs = dirs/dist; damageScale = 1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius); if ( Instigator == none || Instigator.Controller == none ) Victims.SetDelayedDamageInstigatorController( InstigatorController ); if ( Victims == LastTouched ) LastTouched = none;
P = Pawn(Victims);
if( P != none ) { for (i = 0; i < CheckedPawns.Length; i++) { if (CheckedPawns[i] == P) { bAlreadyChecked = true; break; } }
if( bAlreadyChecked ) { bAlreadyChecked = false; P = none; continue; }
if( KFMonsterVictim != none && KFMonsterVictim.Health <= 0 ) { KFMonsterVictim = none; }
KFMonsterVictim = KFMonster(Victims); KFP = KFPawn(Victims);
if( KFMonsterVictim != none ) damageScale *= KFMonsterVictim.GetExposureTo(HitLocation); else if( KFP != none ) damageScale *= KFP.GetExposureTo(HitLocation);
CheckedPawns[CheckedPawns.Length] = P;
if ( damageScale <= 0) continue; }
Victims.TakeDamage ( damageScale * DamageAmount, Instigator, Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dirs, (damageScale * Momentum * dirs), DamageType );
if( Role == ROLE_Authority && KFMonsterVictim != none && KFMonsterVictim.Health <= 0 ) { NumKilled++; } }
}
if( Role == ROLE_Authority )
{ if( NumKilled >= 4 ) { KFGameType(Level.Game).DramaticEvent(0.05); } else if( NumKilled >= 2 ) { KFGameType(Level.Game).DramaticEvent(0.03); }
}
bHurtEntry = false;
}
defaultproperties
{ HeadShotDamageMult=1.500000 ImpactDamageType=Class'NicePack.NiceDamTypeHuskGunProjectileImpact' ImpactDamage=50
}

View file

@ -0,0 +1,43 @@
class NiceHuskGunProjectile_Alt extends NiceHuskGunProjectile_Strong;
/*
//can't be destroyed by Siren's scream
//Explode only by heavy explosive damage
function TakeDamage( int Damage, Pawn InstigatedBy, Vector Hitlocation, Vector Momentum, class<DamageType> damageType, optional int HitIndex)
{
if ( !bDud && !bHasExploded && Damage >= 100 && class<KFWeaponDamageType>(damageType) != none && class<KFWeaponDamageType>(damageType).default.bIsExplosive ) { Explode(HitLocation, vect(0,0,0));
}
}
*/
/*
simulated function float MosterDamageMult( KFMonster Victim )
{
float mult;
mult = super.MosterDamageMult();
// prevent big monsters from 1-shot be killed by hitting all projectiles
if ( KFMonsterVictim.bBurnified && KFMonsterVictim.default.Health >= 1000 ) mult *= 0.5;
return mult;
}
*/
/*
// copy-pasted with deletion of impact damage
simulated function ProcessTouch(Actor Other, Vector HitLocation)
{
// Don't let it hit this player, or blow up on another player
if ( Other == none || Other == Instigator || Other.Base == Instigator ) return;
// Don't collide with bullet whip attachments
if( ROBulletWhipAttachment(Other) != none )
{ return;
}
// Don't allow hits on people on the same team
//if( KFHumanPawn(Other) != none && Instigator != none
// && KFHumanPawn(Other).PlayerReplicationInfo.Team.TeamIndex == Instigator.PlayerReplicationInfo.Team.TeamIndex )
//{
// return;
//}
if( !bDud && !bHasExploded )
{ Explode(HitLocation,Normal(HitLocation-Other.Location));
}
}*/
defaultproperties
{ HeadShotDamageMult=1.000000 ExplosionSoundVolume=1.000000 ImpactDamageType=Class'NicePack.NiceDamTypeHuskGun_Alt' ImpactDamage=0 AmbientVolumeScale=1.000000 Speed=750.000000 MaxSpeed=1000.000000 Damage=35.000000 DamageRadius=500.000000 MyDamageType=Class'NicePack.NiceDamTypeHuskGun_Alt' LifeSpan=5.000000
}

View file

@ -0,0 +1,4 @@
class NiceHuskGunProjectile_Strong extends NiceHuskGunProjectile;
defaultproperties
{ ExplosionEmitter=Class'KFMod.FlameImpact_Strong' FlameTrailEmitterClass=Class'KFMod.FlameThrowerHusk_Strong' ExplosionSoundVolume=2.000000 ExplosionDecal=Class'KFMod.FlameThrowerBurnMark_Large'
}

View file

@ -0,0 +1,4 @@
class NiceHuskGunProjectile_Weak extends NiceHuskGunProjectile;
defaultproperties
{ ExplosionEmitter=Class'KFMod.FlameImpact_Weak' FlameTrailEmitterClass=Class'KFMod.FlameThrowerHusk_Weak' ExplosionSoundVolume=1.250000 ExplosionDecal=Class'KFMod.FlameThrowerBurnMark_Small'
}

View file

@ -0,0 +1,5 @@
// Incendiary M79
class NiceM79Inc extends ScrnM79Inc;
defaultproperties
{ FireModeClass(0)=Class'NicePack.NiceM79IncFire' PickupClass=Class'NicePack.NiceM79IncPickup' ItemName="M79 Incendiary NW"
}

View file

@ -0,0 +1,4 @@
class NiceM79IncAmmo extends ScrnM79IncAmmo;
defaultproperties
{ PickupClass=Class'NicePack.NiceM79IncAmmoPickup' ItemName="M79 Incendiary Grenades NW"
}

View file

@ -0,0 +1,4 @@
class NiceM79IncAmmoPickup extends ScrnM79IncAmmoPickup;
defaultproperties
{ InventoryType=Class'NicePack.NiceM79IncAmmo' PickupMessage="M79 Incendiary Grenades NW"
}

View file

@ -0,0 +1,4 @@
class NiceM79IncFire extends ScrnM79IncFire;
defaultproperties
{ AmmoClass=Class'NicePack.NiceM79IncAmmo' ProjectileClass=Class'NicePack.NiceM79IncGrenadeProjectile'
}

View file

@ -0,0 +1,72 @@
class NiceM79IncGrenadeProjectile extends ScrnM79IncGrenadeProjectile;
#exec OBJ LOAD FILE=KF_GrenadeSnd.uax
simulated function HurtRadius( float DamageAmount, float DamageRadius, class<DamageType> DamageType, float Momentum, vector HitLocation )
{
local actor Victims;
local float damageScale, dist;
local vector dirs;
local int NumKilled;
local KFMonster KFMonsterVictim;
local Pawn P;
local KFPawn KFP;
local array<Pawn> CheckedPawns;
local int i;
local bool bAlreadyChecked;
if ( bHurtEntry ) return;
bHurtEntry = true;
foreach CollidingActors (class 'Actor', Victims, DamageRadius, HitLocation)
{ // null pawn variables here just to be sure they didn't left from previous iteration // and waste another day of my life to looking for this fucking bug -- PooSH /totallyPissedOff!!! P = none; KFMonsterVictim = none; KFP = none; // don't let blast damage affect fluid - VisibleCollisingActors doesn't really work for them - jag if( (Victims != self) && (Hurtwall != Victims) && (Victims.Role == ROLE_Authority) && !Victims.IsA('FluidSurfaceInfo') && ExtendedZCollision(Victims)==none ) { dirs = Victims.Location - HitLocation; dist = FMax(1,VSize(dirs)); dirs = dirs/dist; damageScale = 1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius); if ( Instigator == none || Instigator.Controller == none ) Victims.SetDelayedDamageInstigatorController( InstigatorController ); if ( Victims == LastTouched ) LastTouched = none;
P = Pawn(Victims);
if( P != none ) { for (i = 0; i < CheckedPawns.Length; i++) { if (CheckedPawns[i] == P) { bAlreadyChecked = true; break; } }
if( bAlreadyChecked ) { bAlreadyChecked = false; P = none; // and if you forget to re-null it somewhere?!! and then look for a bug during 2 days?!! Damned Tripwire, I hate you so much continue; }
KFMonsterVictim = KFMonster(Victims);
if( KFMonsterVictim != none && KFMonsterVictim.Health <= 0 ) { KFMonsterVictim = none; }
KFP = KFPawn(Victims);
if( KFMonsterVictim != none ) { damageScale *= KFMonsterVictim.GetExposureTo(HitLocation/*Location + 15 * -Normal(PhysicsVolume.Gravity)*/); } else if( KFP != none ) { damageScale *= KFP.GetExposureTo(HitLocation/*Location + 15 * -Normal(PhysicsVolume.Gravity)*/); }
CheckedPawns[CheckedPawns.Length] = P;
if ( damageScale <= 0) { P = none; continue; } else { //Victims = P; P = none; } }
Victims.TakeDamage ( damageScale * DamageAmount, Instigator, Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dirs, (damageScale * Momentum * dirs), DamageType ); if (Vehicle(Victims) != none && Vehicle(Victims).Health > 0) Vehicle(Victims).DriverRadiusDamage(DamageAmount, DamageRadius, InstigatorController, DamageType, Momentum, HitLocation);
if( Role == ROLE_Authority && KFMonsterVictim != none && KFMonsterVictim.Health <= 0 ) { NumKilled++; } }
}
/*
if ( (LastTouched != none) && (LastTouched != self) && (LastTouched.Role == ROLE_Authority) && !LastTouched.IsA('FluidSurfaceInfo') )
{ Victims = LastTouched; LastTouched = none; dirs = Victims.Location - HitLocation; dist = FMax(1,VSize(dirs)); dirs = dirs/dist; damageScale = FMax(Victims.CollisionRadius/(Victims.CollisionRadius + Victims.CollisionHeight),1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius)); if ( Instigator == none || Instigator.Controller == none ) Victims.SetDelayedDamageInstigatorController(InstigatorController); Victims.TakeDamage ( damageScale * DamageAmount, Instigator, Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dirs, (damageScale * Momentum * dirs), DamageType ); if (Vehicle(Victims) != none && Vehicle(Victims).Health > 0) Vehicle(Victims).DriverRadiusDamage(DamageAmount, DamageRadius, InstigatorController, DamageType, Momentum, HitLocation);
}
*/
if( Role == ROLE_Authority )
{ if( NumKilled >= 4 ) { KFGameType(Level.Game).DramaticEvent(0.05); } else if( NumKilled >= 2 ) { KFGameType(Level.Game).DramaticEvent(0.03); }
}
bHurtEntry = false;
}
simulated function ProcessTouch(Actor Other, Vector HitLocation)
{
// Don't let it hit this player, or blow up on another player
if ( Other == none || Other == Instigator || Other.Base == Instigator ) return;
// Don't collide with bullet whip attachments
if( KFBulletWhipAttachment(Other) != none )
{ return;
}
// Don't allow hits on people on the same team - except hardcore mode
if( !class'ScrnBalance'.default.Mut.bHardcore && KFHumanPawn(Other) != none && Instigator != none && KFHumanPawn(Other).PlayerReplicationInfo.Team.TeamIndex == Instigator.PlayerReplicationInfo.Team.TeamIndex )
{ return;
}
// Use the instigator's location if it exists. This fixes issues with
// the original location of the projectile being really far away from
// the real Origloc due to it taking a couple of milliseconds to
// replicate the location to the client and the first replicated location has
// already moved quite a bit.
if( Instigator != none )
{ OrigLoc = Instigator.Location;
}
if( !bDud && ((VSizeSquared(Location - OrigLoc) < ArmDistSquared) || OrigLoc == vect(0,0,0)) )
{ if( Role == ROLE_Authority ) { AmbientSound=none; PlaySound(Sound'ProjectileSounds.PTRD_deflect04',,2.0); Other.TakeDamage( ImpactDamage, Instigator, HitLocation, Normal(Velocity), ImpactDamageType ); } bDud = true; Velocity = vect(0,0,0); LifeSpan=1.0; SetPhysics(PHYS_Falling);
}
if( !bDud )
{ Explode(HitLocation,Normal(HitLocation-Other.Location));
}
}
defaultproperties
{ MyDamageType=Class'NicePack.NiceDamTypeFlameNade'
}

View file

@ -0,0 +1,4 @@
class NiceM79IncPickup extends ScrnM79IncPickup;
defaultproperties
{ ItemName="M79 Incendiary NW" ItemShortName="M79 Inc NW" InventoryType=Class'NicePack.NiceM79Inc' PickupMessage="You got the M79 Incendiary Grenade Launcher NW."
}

View file

@ -0,0 +1,5 @@
class NiceDamTypeMAC10Z extends NiceDamTypeFire
abstract;
defaultproperties
{ heatPart=0.150000 bSniperWeapon=True bCheckForHeadShots=True WeaponClass=Class'NicePack.NiceMAC10Z'
}

View file

@ -0,0 +1,5 @@
class NiceMAC10Ammo extends NiceAmmo;
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
defaultproperties
{ WeaponPickupClass=Class'NicePack.NiceMAC10Pickup' AmmoPickupAmount=30 MaxAmmo=300 InitialAmount=75 PickupClass=Class'NicePack.NiceMAC10AmmoPickup' IconMaterial=Texture'KillingFloorHUD.Generic.HUD' IconCoords=(X1=336,Y1=82,X2=382,Y2=125) ItemName="MAC-10 bullets"
}

View file

@ -0,0 +1,4 @@
class NiceMAC10AmmoPickup extends NiceAmmoPickup;
defaultproperties
{ AmmoAmount=30 InventoryType=Class'NicePack.NiceMAC10Ammo' PickupMessage="Rounds .45 cal" StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
}

View file

@ -0,0 +1,4 @@
class NiceMAC10Fire extends NiceHighROFFire;
defaultproperties
{ FireEndSoundRef="KF_MAC10MPSnd.MAC10_Fire_Loop_End_M" FireEndStereoSoundRef="KF_MAC10MPSnd.MAC10_Fire_Loop_End_S" AmbientFireSoundRef="KF_MAC10MPSnd.MAC10_Fire_Loop" ProjectileSpeed=18300.000000 RecoilRate=0.050000 maxVerticalRecoilAngle=150 maxHorizontalRecoilAngle=100 RecoilVelocityScale=1.500000 ShellEjectClass=Class'ROEffects.KFShellEjectMac' ShellEjectBoneName="Mac11_Ejector" bRandomPitchFireSound=False FireSoundRef="KF_MAC10MPSnd.MAC10_Silenced_Fire" StereoFireSoundRef="KF_MAC10MPSnd.MAC10_Silenced_FireST" NoAmmoSoundRef="KF_AK47Snd.AK47_DryFire" DamageType=Class'NicePack.NiceDamTypeMAC10Z' DamageMin=36 DamageMax=36 Momentum=6500.000000 FireRate=0.052000 AmmoClass=Class'NicePack.NiceMAC10Ammo' ShakeRotMag=(X=35.000000,Y=35.000000,Z=200.000000) ShakeRotRate=(X=8000.000000,Y=8000.000000,Z=8000.000000) ShakeRotTime=3.000000 ShakeOffsetMag=(X=4.500000,Y=2.800000,Z=5.500000) ShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000) ShakeOffsetTime=1.250000 BotRefireRate=0.990000 FlashEmitterClass=Class'ROEffects.MuzzleFlash1stSTG' aimerror=35.000000
}

View file

@ -0,0 +1,4 @@
class NiceMAC10Pickup extends NiceWeaponPickup;
defaultproperties
{ bBackupWeapon=True crossPerkIndecies(0)=2 Weight=3.000000 cost=200 AmmoCost=10 BuyClipSize=30 PowerValue=30 SpeedValue=98 RangeValue=40 Description="A highly compact machine pistol. Can be fired in semi or full auto." ItemName="MAC-10" ItemShortName="MAC-10" AmmoItemName=".45 Cal" AmmoMesh=StaticMesh'KillingFloorStatics.L85Ammo' CorrespondingPerkIndex=5 EquipmentCategoryID=3 InventoryType=Class'NicePack.NiceMAC10Z' PickupMessage="You got the MAC-10" PickupSound=Sound'KF_MAC10MPSnd.MAC10_Pickup' PickupForce="AssaultRiflePickup" StaticMesh=StaticMesh'KF_pickups2_Trip.Supers.MAC10_Pickup' CollisionRadius=25.000000 CollisionHeight=5.000000
}

View file

@ -0,0 +1,9 @@
class NiceMAC10Z extends NiceWeapon;
#exec OBJ LOAD FILE=KillingFloorHUD.utx
#exec OBJ LOAD FILE=Inf_Weapons_Foley.uax
simulated function AltFire(float F){
DoToggle();
}
defaultproperties
{ reloadPreEndFrame=0.115000 reloadEndFrame=0.538000 reloadChargeEndFrame=0.750000 reloadMagStartFrame=0.288000 reloadChargeStartFrame=0.644000 MagazineBone="Mac11_Mag" MagCapacity=30 ReloadRate=3.000000 ReloadAnim="Reload" ReloadAnimRate=1.000000 FlashBoneName="tipS" WeaponReloadAnim="Reload_Mac10" Weight=3.000000 bHasAimingMode=True IdleAimAnim="Idle_Iron" StandardDisplayFOV=60.000000 SleeveNum=2 TraderInfoTexture=Texture'KillingFloor2HUD.Trader_Weapon_Icons.Trader_Mac_10' bIsTier2Weapon=True MeshRef="KF_Weapons2_Trip.Mac10_Trip" SkinRefs(0)="KF_Weapons2_Trip_T.Special.MAC10_cmb" SkinRefs(1)="KF_Weapons2_Trip_T.Special.MAC10_SIL_cmb" SelectSoundRef="KF_MAC10MPSnd.MAC10_Select" HudImageRef="KillingFloor2HUD.WeaponSelect.Mac_10_Unselected" SelectedHudImageRef="KillingFloor2HUD.WeaponSelect.Mac_10" PlayerIronSightFOV=65.000000 ZoomedDisplayFOV=32.000000 FireModeClass(0)=Class'NicePack.NiceMAC10Fire' FireModeClass(1)=Class'KFMod.NoFire' PutDownAnim="PutDown" SelectForce="SwitchToAssaultRifle" AIRating=0.550000 CurrentRating=0.550000 bShowChargingBar=True Description="A highly compact machine pistol. Can be fired in semi or full auto." EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000) DisplayFOV=55.000000 Priority=75 CustomCrosshair=11 CustomCrossHairTextureName="Crosshairs.HUD.Crosshair_Cross5" InventoryGroup=3 GroupOffset=6 PickupClass=Class'NicePack.NiceMAC10Pickup' PlayerViewOffset=(X=25.000000,Y=20.000000,Z=-6.000000) BobDamping=6.000000 AttachmentClass=Class'KFMod.MAC10Attachment' IconCoords=(X1=245,Y1=39,X2=329,Y2=79) ItemName="MAC10" TransientSoundVolume=1.250000
}

View file

@ -0,0 +1,15 @@
class NiceProtecta extends Protecta;
// Use alt fire to switch fire modes
simulated function AltFire(float F)
{
if(ReadyToFire(0))
{ DoToggle();
}
}
exec function SwitchModes()
{
DoToggle();
}
defaultproperties
{ FireModeClass(0)=Class'NicePack.NiceProtectaFire' PickupClass=Class'NicePack.NiceProtectaPickup' ItemName="Flare Shotgun 'Protecta' NW"
}

View file

@ -0,0 +1,4 @@
class NiceProtectaAmmo extends ProtectaAmmo;
defaultproperties
{ PickupClass=Class'NicePack.NiceProtectaAmmoPickup'
}

View file

@ -0,0 +1,4 @@
class NiceProtectaAmmoPickup extends ProtectaAmmoPickup;
defaultproperties
{ InventoryType=Class'NicePack.NiceProtectaAmmo'
}

View file

@ -0,0 +1,15 @@
class NiceProtectaFire extends ProtectaFire;
simulated function bool AllowFire()
{
if( KFWeapon(Weapon).bIsReloading && KFWeapon(Weapon).MagAmmoRemaining < 1) return false;
if(KFPawn(Instigator).SecondaryItem!=none) return false;
if( KFPawn(Instigator).bThrowingNade ) return false;
if( Level.TimeSeconds - LastClickTime>FireRate )
{ LastClickTime = Level.TimeSeconds;
}
if( KFWeapon(Weapon).MagAmmoRemaining<1 ) return false;
return super(WeaponFire).AllowFire();
}
defaultproperties
{ maxVerticalRecoilAngle=1000 maxHorizontalRecoilAngle=300 AmmoClass=Class'NicePack.NiceProtectaAmmo' ProjectileClass=Class'NicePack.NiceProtectaFlare'
}

View file

@ -0,0 +1,4 @@
class NiceProtectaFlare extends NiceFlareRevolverProjectile;
defaultproperties
{ Speed=4500.000000 MaxSpeed=5000.000000
}

View file

@ -0,0 +1,4 @@
class NiceProtectaPickup extends ProtectaPickup;
defaultproperties
{ ItemName="Protecta NW" ItemShortName="Protecta NW" InventoryType=Class'NicePack.NiceProtecta' PickupMessage="You got the Protecta NW"
}

View file

@ -0,0 +1,5 @@
class NiceDamTypeThompsonInc extends NiceDamTypeFire
abstract;
defaultproperties
{ heatPart=0.300000 bCheckForHeadShots=True WeaponClass=Class'NicePack.NiceThompsonInc'
}

View file

@ -0,0 +1,5 @@
class NiceThompsonInc extends ScrnThompsonInc
config(user);
defaultproperties
{ FireModeClass(0)=Class'NicePack.NiceThompsonIncFire' PickupClass=Class'NicePack.NiceThompsonIncPickup' ItemName="Incendiary Tommy Gun NW"
}

View file

@ -0,0 +1,5 @@
class NiceThompsonIncAmmo extends ScrnThompsonIncAmmo;
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
defaultproperties
{ PickupClass=Class'NicePack.NiceThompsonIncAmmoPickup'
}

View file

@ -0,0 +1,4 @@
class NiceThompsonIncAmmoPickup extends ScrnThompsonIncAmmoPickup;
defaultproperties
{ InventoryType=Class'NicePack.NiceThompsonIncAmmo'
}

View file

@ -0,0 +1,34 @@
class NiceThompsonIncFire extends ScrnThompsonIncFire;
// Overwritten to not switch damage types for the firebug
function DoTrace(Vector Start, Rotator Dir)
{
local Vector X,Y,Z, End, HitLocation, HitNormal, ArcEnd;
local Actor Other;
local KFWeaponAttachment WeapAttach;
local array<int> HitPoints;
local KFPawn HitPawn;
MaxRange();
Weapon.GetViewAxes(X, Y, Z);
if ( Weapon.WeaponCentered() )
{ ArcEnd = (Instigator.Location + Weapon.EffectOffset.X * X + 1.5 * Weapon.EffectOffset.Z * Z);
}
else
{ ArcEnd = (Instigator.Location + Instigator.CalcDrawOffset(Weapon) + Weapon.EffectOffset.X * X + Weapon.Hand * Weapon.EffectOffset.Y * Y + Weapon.EffectOffset.Z * Z);
}
X = Vector(Dir);
End = Start + TraceRange * X;
Other = Instigator.HitPointTrace(HitLocation, HitNormal, End, HitPoints, Start,, 1);
if ( Other != none && Other != Instigator && Other.Base != Instigator )
{ WeapAttach = KFWeaponAttachment(Weapon.ThirdPersonActor);
if ( !Other.bWorldGeometry ) { // Update hit effect except for pawns if ( !Other.IsA('Pawn') && !Other.IsA('HitScanBlockingVolume') && !Other.IsA('ExtendedZCollision') ) { if( WeapAttach!=none ) { WeapAttach.UpdateHit(Other, HitLocation, HitNormal); } }
HitPawn = KFPawn(Other);
if ( HitPawn != none ) { if ( !HitPawn.bDeleteMe ) { HitPawn.ProcessLocationalDamage(DamageMax, Instigator, HitLocation, Momentum * X, DamageType, HitPoints); } } else Other.TakeDamage(DamageMax, Instigator, HitLocation, Momentum * X, DamageType); } else { HitLocation = HitLocation + 2.0 * HitNormal;
if ( WeapAttach != none ) { WeapAttach.UpdateHit(Other,HitLocation,HitNormal); } }
}
else
{ HitLocation = End; HitNormal = Normal(Start - End);
}
}
defaultproperties
{ DamageType=Class'NicePack.NiceDamTypeThompsonInc' AmmoClass=Class'NicePack.NiceThompsonIncAmmo'
}

View file

@ -0,0 +1,4 @@
class NiceThompsonIncPickup extends ScrnThompsonIncPickup;
defaultproperties
{ ItemName="Tommy Gun Incendiary NW" ItemShortName="Tommy Gun Inc. NW" InventoryType=Class'NicePack.NiceThompsonInc' PickupMessage="You got the Incendiary Tommy Gun NW"
}

View file

@ -0,0 +1,5 @@
class NiceDamTypeTrenchgun extends NiceDamTypeFire
abstract;
defaultproperties
{ heatPart=0.400000 MaxPenetrations=3 bIsPowerWeapon=True bCheckForHeadShots=True WeaponClass=Class'NicePack.NiceTrenchgun' DeathString="%k killed %o (Trenchgun)." FemaleSuicide="%o shot herself in the foot." MaleSuicide="%o shot himself in the foot." bRagdollBullet=True bBulletHit=True FlashFog=(X=600.000000) KDamageImpulse=10000.000000 KDeathVel=300.000000 KDeathUpKick=100.000000 VehicleDamageScaling=0.700000
}

View file

@ -0,0 +1,8 @@
class NiceTrenchgun extends NiceWeapon;
simulated function fillSubReloadStages(){
// Loading 6 shells during 143 frames tops, with first shell loaded at frame 14, with 18 frames between load moments
generateReloadStages(6, 143, 14, 18);
}
defaultproperties
{ reloadType=RTYPE_SINGLE ForceZoomOutOnFireTime=0.010000 MagCapacity=6 ReloadRate=0.700000 ReloadAnim="Reload" ReloadAnimRate=1.000000 bHoldToReload=True WeaponReloadAnim="Reload_Shotgun" Weight=8.000000 bHasAimingMode=True IdleAimAnim="Idle_Iron" StandardDisplayFOV=65.000000 TraderInfoTexture=Texture'KillingFloor2HUD.Trader_Weapon_Icons.Trader_TrenchGun' bIsTier2Weapon=True MeshRef="KF_Wep_TrenchGun.TrenchGun" SkinRefs(0)="KF_Weapons8_Trip_T.Weapons.Trenchgun_cmb" SelectSoundRef="KF_PumpSGSnd.SG_Select" HudImageRef="KillingFloor2HUD.WeaponSelect.TrenchGun_unselected" SelectedHudImageRef="KillingFloor2HUD.WeaponSelect.TrenchGun" PlayerIronSightFOV=70.000000 ZoomedDisplayFOV=50.000000 FireModeClass(0)=Class'NicePack.NiceTrenchgunFire' FireModeClass(1)=Class'KFMod.NoFire' PutDownAnim="PutDown" AIRating=0.600000 CurrentRating=0.600000 bShowChargingBar=True Description="A WWII-era trench shotgun in 12 gauge, loaded with Dragon's Breath flame rounds. Toasty." DisplayFOV=65.000000 Priority=142 InventoryGroup=3 GroupOffset=14 PickupClass=Class'NicePack.NiceTrenchgunPickup' PlayerViewOffset=(X=20.000000,Y=18.750000,Z=-8.000000) BobDamping=7.000000 AttachmentClass=Class'KFMod.TrenchgunAttachment' IconCoords=(X1=169,Y1=172,X2=245,Y2=208) ItemName="Dragon's Breath Trenchgun" TransientSoundVolume=1.000000
}

View file

@ -0,0 +1,5 @@
class NiceTrenchgunAmmo extends NiceAmmo;
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
defaultproperties
{ WeaponPickupClass=Class'NicePack.NiceTrenchgunPickup' AmmoPickupAmount=6 MaxAmmo=48 InitialAmount=24 IconMaterial=Texture'KillingFloorHUD.Generic.HUD' IconCoords=(X1=451,Y1=445,X2=510,Y2=500)
}

View file

@ -0,0 +1,4 @@
class NiceTrenchgunAmmoPickup extends NiceAmmoPickup;
defaultproperties
{ AmmoAmount=8 InventoryType=Class'NicePack.NiceTrenchgunAmmo' PickupMessage="Dragon's Breath Shells" StaticMesh=None
}

View file

@ -0,0 +1,4 @@
class NiceTrenchgunFire extends NiceShotgunFire;
defaultproperties
{ ProjPerFire=14 bRandomPitchFireSound=True FireSoundRef="KF_ShotgunDragonsBreathSnd.ShotgunDragon_Fire_Single_M" StereoFireSoundRef="KF_ShotgunDragonsBreathSnd.ShotgunDragon_Fire_Single_S" DamageType=Class'NicePack.NiceDamTypeTrenchgun' DamageMax=18 AmmoClass=Class'NicePack.NiceTrenchgunAmmo' FlashEmitterClass=Class'KFMod.TrenchgunMuzzFlash'
}

View file

@ -0,0 +1,4 @@
class NiceTrenchgunPickup extends NiceWeaponPickup;
defaultproperties
{ Weight=8.000000 cost=1250 BuyClipSize=6 PowerValue=75 SpeedValue=40 RangeValue=15 Description="A WWII-era trench shotgun in 12 gauge, loaded with Dragon's Breath flame rounds. Toasty." ItemName="Trenchgun" ItemShortName="Trenchgun" AmmoItemName="Dragon's breath shells" CorrespondingPerkIndex=5 EquipmentCategoryID=2 InventoryType=Class'NicePack.NiceTrenchgun' PickupMessage="You got the Trenchgun." PickupSound=Sound'KF_ShotgunDragonsBreathSnd.Handling.TrenchGun_Pump_Back' PickupForce="AssaultRiflePickup" StaticMesh=StaticMesh'KF_pickups5_Trip.Rifles.TrenchGun_Pickup' CollisionRadius=35.000000 CollisionHeight=5.000000
}