Fix new line symbol issues

This commit is contained in:
Anton Tarasenko 2020-04-19 00:44:48 +07:00
commit d66d86b2b1
846 changed files with 33896 additions and 12983 deletions

View file

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

View file

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

View file

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

View file

@ -1,48 +1,114 @@
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'
}
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

@ -1,28 +1,76 @@
//=============================================================================
// 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'
}
//=============================================================================
// 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

@ -1,41 +1,51 @@
//=============================================================================
// 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"
}
//=============================================================================
// 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

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

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

View file

@ -1,42 +1,76 @@
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"
}
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

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

View file

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

View file

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

View file

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

View file

@ -1,23 +1,30 @@
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"
}
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

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

View file

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

View file

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

View file

@ -1,24 +1,64 @@
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'
}
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

@ -1,43 +1,151 @@
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'
}
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

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

View file

@ -1,5 +1,19 @@
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
}
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

@ -1,296 +1,585 @@
// 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
}
// 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

@ -1,5 +1,12 @@
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"
}
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

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

View file

@ -1,4 +1,52 @@
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'
}
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

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

View file

@ -1,20 +1,58 @@
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
}
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

@ -1,5 +1,45 @@
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
}
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

@ -1,4 +1,36 @@
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
}
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

@ -1,4 +1,24 @@
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
}
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

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

View file

@ -1,5 +1,10 @@
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."
}
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

@ -1,14 +1,33 @@
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
}
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

@ -1,5 +1,10 @@
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."
}
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

@ -1,52 +1,126 @@
/**
* 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"
}
/**
* 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

@ -1,29 +1,33 @@
// 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'
}
// 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

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

View file

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

View file

@ -1,93 +1,160 @@
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'
}
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

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

View file

@ -1,74 +1,188 @@
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
}
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

@ -1,43 +1,60 @@
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
}
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

@ -1,4 +1,8 @@
class NiceHuskGunProjectile_Strong extends NiceHuskGunProjectile;
defaultproperties
{ ExplosionEmitter=Class'KFMod.FlameImpact_Strong' FlameTrailEmitterClass=Class'KFMod.FlameThrowerHusk_Strong' ExplosionSoundVolume=2.000000 ExplosionDecal=Class'KFMod.FlameThrowerBurnMark_Large'
}
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

@ -1,4 +1,8 @@
class NiceHuskGunProjectile_Weak extends NiceHuskGunProjectile;
defaultproperties
{ ExplosionEmitter=Class'KFMod.FlameImpact_Weak' FlameTrailEmitterClass=Class'KFMod.FlameThrowerHusk_Weak' ExplosionSoundVolume=1.250000 ExplosionDecal=Class'KFMod.FlameThrowerBurnMark_Small'
}
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

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

View file

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

View file

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

View file

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

View file

@ -1,72 +1,191 @@
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'
}
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

@ -1,4 +1,8 @@
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."
}
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

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

View file

@ -1,5 +1,13 @@
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"
}
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

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

View file

@ -1,4 +1,33 @@
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
}
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

@ -1,4 +1,27 @@
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
}
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

@ -1,9 +1,58 @@
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
}
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

@ -1,15 +1,19 @@
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"
}
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

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

View file

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

View file

@ -1,15 +1,24 @@
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'
}
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

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,34 +1,72 @@
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'
}
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

@ -1,4 +1,8 @@
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"
}
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

@ -1,5 +1,20 @@
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
}
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

@ -1,8 +1,47 @@
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
}
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

@ -1,5 +1,11 @@
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)
}
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

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

View file

@ -1,4 +1,12 @@
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'
}
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

@ -1,4 +1,23 @@
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
}
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
}