Revert weapon conversion
This patch reverts first step of global weapon conversion that would have halted the release of the next version for too long.
This commit is contained in:
parent
3c46801714
commit
12d95e387e
757 changed files with 10788 additions and 4046 deletions
|
|
@ -0,0 +1,5 @@
|
|||
class NiceDamTypeFT extends NiceDamTypeFire
|
||||
abstract;
|
||||
defaultproperties
|
||||
{
WeaponClass=Class'NicePack.NiceFlameThrower'
DeathString="%k incinerated %o (Flamethrower)."
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceFlameAmmo extends ScrnFlameAmmo;
|
||||
defaultproperties
|
||||
{
AmmoPickupAmount=30
MaxAmmo=200
InitialAmount=60
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
//
|
||||
//=============================================================================
|
||||
class NiceFlameBurstFire extends ScrnFlameBurstFire ;
|
||||
defaultproperties
|
||||
{
AmmoClass=Class'NicePack.NiceFlameAmmo'
ProjectileClass=Class'NicePack.NiceFlameTendril'
|
||||
}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
class NiceFlameNade extends NiceNade;
|
||||
#exec OBJ LOAD FILE=KF_GrenadeSnd.uax
|
||||
simulated function HurtRadius(float DamageAmount, float DamageRadius, class<DamageType> DamageType, float Momentum, vector HitLocation){
|
||||
local actor Victims;
|
||||
local float damageScale, dist;
|
||||
local vector dirs;
|
||||
local int NumKilled;
|
||||
local KFMonster KFMonsterVictim;
|
||||
local Pawn P;
|
||||
local KFPawn KFP;
|
||||
local array<Pawn> CheckedPawns;
|
||||
local int i;
|
||||
local bool bAlreadyChecked;
|
||||
if(bHurtEntry)
return;
|
||||
bHurtEntry = true;
|
||||
foreach CollidingActors(class 'Actor', Victims, DamageRadius, HitLocation){
// null pawn variables here just to be sure they didn't left from previous iteration
// and waste another day of my life to looking for this fucking bug -- PooSH /totallyPissedOff!!!
P = none;
KFMonsterVictim = none;
KFP = none;
// don't let blast damage affect fluid - VisibleCollisingActors doesn't really work for them - jag
if((Victims != self) && (Hurtwall != Victims) && (Victims.Role == ROLE_Authority) && !Victims.IsA('FluidSurfaceInfo') && ExtendedZCollision(Victims) == none ){
dirs = Victims.Location - HitLocation;
dist = FMax(1,VSize(dirs));
dirs = dirs/dist;
damageScale = 1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius);
if(Instigator == none || Instigator.Controller == none)
Victims.SetDelayedDamageInstigatorController(InstigatorController);
if(Victims == LastTouched)
LastTouched = none;
|
||||
P = Pawn(Victims);
|
||||
if(P != none){
for(i = 0; i < CheckedPawns.Length; i++){
if(CheckedPawns[i] == P){
bAlreadyChecked = true;
break;
}
}
|
||||
if(bAlreadyChecked){
bAlreadyChecked = false;
P = none;
continue;
}
|
||||
KFMonsterVictim = KFMonster(Victims);
|
||||
if(KFMonsterVictim != none && KFMonsterVictim.Health <= 0)
KFMonsterVictim = none;
|
||||
KFP = KFPawn(Victims);
|
||||
if(KFMonsterVictim != none )
damageScale *= KFMonsterVictim.GetExposureTo(HitLocation);
else if(KFP != none)
damageScale *= KFP.GetExposureTo(HitLocation);
|
||||
CheckedPawns[CheckedPawns.Length] = P;
|
||||
if(damageScale <= 0){
P = none;
continue;
}
else
P = none;
}
|
||||
if(KFP != none || KFMonsterVictim != none || Nade(Victims) != none)
Victims.TakeDamage
(
damageScale * DamageAmount,
Instigator,
Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dirs,
(damageScale * Momentum * dirs),
DamageType
);
|
||||
if(Role == ROLE_Authority && KFMonsterVictim != none && KFMonsterVictim.Health <= 0)
NumKilled++;
}
|
||||
}
|
||||
if(Role == ROLE_Authority){
if(NumKilled >= 4)
KFGameType(Level.Game).DramaticEvent(0.05);
else if(NumKilled >= 2)
KFGameType(Level.Game).DramaticEvent(0.03);
|
||||
}
|
||||
bHurtEntry = false;
|
||||
}
|
||||
simulated function Explode(vector HitLocation, vector HitNormal){
|
||||
local PlayerController LocalPlayer;
|
||||
bHasExploded = True;
|
||||
BlowUp(HitLocation);
|
||||
// Incendiary Effects..
|
||||
PlaySound(sound'KF_GrenadeSnd.FlameNade_Explode',, 100.5 * TransientSoundVolume);
|
||||
if(EffectIsRelevant(Location, false)){
Spawn(Class'KFIncendiaryExplosion',,, HitLocation, rotator(vect(0,0,1)));
Spawn(ExplosionDecal,self,,HitLocation, rotator(-HitNormal));
|
||||
}
|
||||
// Shake nearby players screens
|
||||
LocalPlayer = Level.GetLocalPlayerController();
|
||||
if((LocalPlayer != none) && (VSize(Location - LocalPlayer.ViewTarget.Location) < (DamageRadius * 1.5)))
LocalPlayer.ShakeView(RotMag, RotRate, RotTime, OffsetMag, OffsetRate, OffsetTime);
|
||||
Destroy();
|
||||
}
|
||||
defaultproperties
|
||||
{
AvoidMarkerClass=Class'NicePack.NiceAvoidMarkerFlame'
MyDamageType=Class'NicePack.NiceDamTypeFlameNade'
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
//=============================================================================
|
||||
// Flame
|
||||
//=============================================================================
|
||||
class NiceFlameTendril extends ScrnFlameTendril;
|
||||
simulated function HurtRadius( float DamageAmount, float DamageRadius, class<DamageType> DamageType, float Momentum, vector HitLocation )
|
||||
{
|
||||
local actor Victims;
|
||||
local float damageScale, dist;
|
||||
local vector dir;
|
||||
local KFMonster KFMonsterVictim;
|
||||
|
||||
if ( bHurtEntry )
return;
|
||||
bHurtEntry = true;
|
||||
foreach VisibleCollidingActors( class 'Actor', Victims, DamageRadius, HitLocation )
|
||||
{
KFMonsterVictim = none; //tbs
// don't let blast damage affect fluid - VisibleCollisingActors doesn't really work for them - jag
if( (Victims != self) && (Hurtwall != Victims) && (Victims.Role == ROLE_Authority) && !Victims.IsA('FluidSurfaceInfo') )
{
dir = Victims.Location - HitLocation;
dist = FMax(1,VSize(dir));
dir = dir/dist;
damageScale = 1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius);
if ( Instigator == none || Instigator.Controller == none )
Victims.SetDelayedDamageInstigatorController( InstigatorController );
if ( Victims == LastTouched )
LastTouched = none;
KFMonsterVictim = KFMonster(Victims);
|
||||
if( KFMonsterVictim != none && KFMonsterVictim.Health <= 0 )
{
KFMonsterVictim = none;
} Victims.TakeDamage
(
damageScale * DamageAmount,
Instigator,
Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dir,
(damageScale * Momentum * dir),
DamageType
);
if (Vehicle(Victims) != none && Vehicle(Victims).Health > 0)
Vehicle(Victims).DriverRadiusDamage(DamageAmount, DamageRadius, InstigatorController, DamageType, Momentum, HitLocation);
|
||||
}
|
||||
}
|
||||
/*
|
||||
if ( (LastTouched != none) && (LastTouched != self) && (LastTouched.Role == ROLE_Authority) && !LastTouched.IsA('FluidSurfaceInfo') )
|
||||
{
Victims = LastTouched;
LastTouched = none;
dir = Victims.Location - HitLocation;
dist = FMax(1,VSize(dir));
dir = dir/dist;
damageScale = FMax(Victims.CollisionRadius/(Victims.CollisionRadius + Victims.CollisionHeight),1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius));
if ( Instigator == none || Instigator.Controller == none )
Victims.SetDelayedDamageInstigatorController(InstigatorController);
Victims.TakeDamage
(
damageScale * DamageAmount,
Instigator,
Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dir,
(damageScale * Momentum * dir),
DamageType
);
if (Vehicle(Victims) != none && Vehicle(Victims).Health > 0)
Vehicle(Victims).DriverRadiusDamage(DamageAmount, DamageRadius, InstigatorController, DamageType, Momentum, HitLocation);
|
||||
}
|
||||
*/
|
||||
bHurtEntry = false;
|
||||
}
|
||||
defaultproperties
|
||||
{
Damage=16.000000
MyDamageType=Class'NicePack.NiceDamTypeFT'
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
//=============================================================================
|
||||
// FlameChucker
|
||||
//=============================================================================
|
||||
class NiceFlameThrower extends ScrnFlameThrower;
|
||||
var bool bFiring;
|
||||
simulated function bool StartFire(int Mode)
|
||||
{
|
||||
if(MagAmmoRemaining >= 1 && FireMode[Mode].AllowFire())
|
||||
bFiring = true;
|
||||
return Super.StartFire(Mode);
|
||||
}
|
||||
simulated event StopFire(int Mode)
|
||||
{
|
||||
if(MagAmmoRemaining < 1 || Mode != 0){
|
||||
bFiring = false;
|
||||
Super.StopFire(0);
|
||||
}
|
||||
}
|
||||
simulated function bool PutDown()
|
||||
{
|
||||
if ( bFiring && Instigator != none && Instigator.PendingWeapon != none && AmmoAmount(0) > 0 ) {
Instigator.PendingWeapon = none;
return false;
|
||||
}
|
||||
return Super.PutDown();
|
||||
}
|
||||
function bool AllowReload()
|
||||
{
|
||||
if ( bFiring )
return false;
return Super.AllowReload();
|
||||
}
|
||||
simulated function WeaponTick(float dt)
|
||||
{
|
||||
if(MagAmmoRemaining < 1 && bFiring)
|
||||
StartFire(0);
|
||||
Super.WeaponTick(dt);
|
||||
// if(FireMode[0].bIsFiring)
|
||||
// Skins[4] = Shader 'KillingFloorWeapons.FlameThrower.FTFireShader';
|
||||
// else
|
||||
// Skins[4] = default.Skins[4];
|
||||
}
|
||||
defaultproperties
|
||||
{
MagCapacity=30
Weight=8.000000
bModeZeroCanDryFire=False
FireModeClass(0)=Class'NicePack.NiceFlameBurstFire'
PickupClass=Class'NicePack.NiceFlameThrowerPickup'
ItemName="FlameThrower NW"
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
//=============================================================================
|
||||
// L85 Pickup.
|
||||
//=============================================================================
|
||||
class NiceFlameThrowerPickup extends ScrnFlameThrowerPickup;
|
||||
defaultproperties
|
||||
{
ItemName="FlameThrower NW"
ItemShortName="Flamer NW"
InventoryType=Class'NicePack.NiceFlameThrower'
PickupMessage="You got the Flamethrower NW."
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceDamTypeFlareProjectileFire extends NiceDamTypeFire;
|
||||
defaultproperties
|
||||
{
HeadShotDamageMult=2.000000
WeaponClass=Class'NicePack.NiceFlareRevolver'
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceDamTypeFlareProjectileImpact extends ScrnDamTypeFlareProjectileImpact;
|
||||
defaultproperties
|
||||
{
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
class NiceDualFlareRevolver extends ScrnDualFlareRevolver;
|
||||
function bool HandlePickupQuery( pickup Item )
|
||||
{
|
||||
if ( Item.InventoryType==Class'NicePack.NiceFlareRevolver' )
|
||||
{
if( LastHasGunMsgTime < Level.TimeSeconds && PlayerController(Instigator.Controller) != none )
{
LastHasGunMsgTime = Level.TimeSeconds + 0.5;
PlayerController(Instigator.Controller).ReceiveLocalizedMessage(Class'KFMainMessages', 1);
}
|
||||
return True;
|
||||
}
|
||||
return Super.HandlePickupQuery(Item);
|
||||
}
|
||||
function DropFrom(vector StartLocation)
|
||||
{
|
||||
local int m;
|
||||
local KFWeaponPickup Pickup;
|
||||
local int AmmoThrown, OtherAmmo;
|
||||
local KFWeapon SinglePistol;
|
||||
if( !bCanThrow )
return;
|
||||
AmmoThrown = AmmoAmount(0);
|
||||
ClientWeaponThrown();
|
||||
for (m = 0; m < NUM_FIRE_MODES; m++)
|
||||
{
if (FireMode[m].bIsFiring)
StopFire(m);
|
||||
}
|
||||
if ( Instigator != none )
DetachFromPawn(Instigator);
|
||||
if( Instigator.Health > 0 )
|
||||
{
OtherAmmo = AmmoThrown / 2;
AmmoThrown -= OtherAmmo;
SinglePistol = Spawn(Class'NicePack.NiceFlareRevolver');
SinglePistol.SellValue = SellValue / 2;
SinglePistol.GiveTo(Instigator);
SinglePistol.Ammo[0].AmmoAmount = OtherAmmo;
SinglePistol.MagAmmoRemaining = MagAmmoRemaining / 2;
MagAmmoRemaining = Max(MagAmmoRemaining-SinglePistol.MagAmmoRemaining,0);
|
||||
}
|
||||
Pickup = Spawn(class'NicePack.NiceFlareRevolverPickup',,, StartLocation);
|
||||
if ( Pickup != none )
|
||||
{
Pickup.InitDroppedPickupFor(self);
Pickup.DroppedBy = PlayerController(Instigator.Controller);
Pickup.Velocity = Velocity;
//fixing dropping exploit
Pickup.SellValue = SellValue / 2;
Pickup.Cost = Pickup.SellValue / 0.75;
Pickup.AmmoAmount[0] = AmmoThrown;
Pickup.MagAmmoRemaining = MagAmmoRemaining;
if (Instigator.Health > 0)
Pickup.bThrown = true;
|
||||
}
|
||||
Destroyed();
|
||||
Destroy();
|
||||
}
|
||||
simulated function bool PutDown()
|
||||
{
|
||||
if ( Instigator.PendingWeapon == none || Instigator.PendingWeapon.class == class'NicePack.NiceFlareRevolver' )
|
||||
{
bIsReloading = false;
|
||||
}
|
||||
return super.PutDown();
|
||||
}
|
||||
defaultproperties
|
||||
{
AppID=0
FireModeClass(0)=Class'NicePack.NiceDualFlareRevolverFire'
DemoReplacement=Class'NicePack.NiceFlareRevolver'
PickupClass=Class'NicePack.NiceDualFlareRevolverPickup'
ItemName="Dual Flare revolvers NW"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceDualFlareRevolverAmmo extends ScrnDualFlareRevolverAmmo;
|
||||
defaultproperties
|
||||
{
PickupClass=Class'NicePack.NiceDualFlareRevolverAmmoPickup'
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceDualFlareRevolverAmmoPickup extends ScrnDualFlareRevolverAmmoPickup;
|
||||
defaultproperties
|
||||
{
InventoryType=Class'NicePack.NiceDualFlareRevolverAmmo'
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceDualFlareRevolverFire extends ScrnDualFlareRevolverFire;
|
||||
defaultproperties
|
||||
{
AmmoClass=Class'NicePack.NiceDualFlareRevolverAmmo'
ProjectileClass=Class'NicePack.NiceFlareRevolverProjectile'
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceDualFlareRevolverPickup extends ScrnDualFlareRevolverPickup;
|
||||
defaultproperties
|
||||
{
ItemName="Dual Flare Revolvers NW"
ItemShortName="Dual Flare Rev. NW"
InventoryType=Class'NicePack.NiceDualFlareRevolver'
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
class NiceFlareRevolver extends ScrnFlareRevolver;
|
||||
simulated function bool PutDown()
|
||||
{
|
||||
if ( Instigator.PendingWeapon.class == class'NicePack.NiceDualFlareRevolver' )
|
||||
{
bIsReloading = false;
|
||||
}
|
||||
return super(KFWeapon).PutDown();
|
||||
}
|
||||
|
||||
function GiveTo( pawn Other, optional Pickup Pickup )
|
||||
{
|
||||
local KFPlayerReplicationInfo KFPRI;
|
||||
local KFWeaponPickup WeapPickup;
|
||||
KFPRI = KFPlayerReplicationInfo(Other.PlayerReplicationInfo);
|
||||
WeapPickup = KFWeaponPickup(Pickup);
|
||||
//pick the lowest sell value
|
||||
if ( WeapPickup != none && KFPRI != none && KFPRI.ClientVeteranSkill != none ) {
SellValue = 0.75 * min(WeapPickup.Cost, WeapPickup.default.Cost
* KFPRI.ClientVeteranSkill.static.GetCostScaling(KFPRI, WeapPickup.class));
|
||||
}
|
||||
Super.GiveTo(Other,Pickup);
|
||||
}
|
||||
defaultproperties
|
||||
{
AppID=0
FireModeClass(0)=Class'NicePack.NiceFlareRevolverFire'
PickupClass=Class'NicePack.NiceFlareRevolverPickup'
ItemName="Flare Revolver NW"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceFlareRevolverAmmo extends ScrnFlareRevolverAmmo;
|
||||
defaultproperties
|
||||
{
PickupClass=Class'NicePack.NiceFlareRevolverAmmoPickup'
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceFlareRevolverAmmoPickup extends ScrnFlareRevolverAmmoPickup;
|
||||
defaultproperties
|
||||
{
InventoryType=Class'NicePack.NiceFlareRevolverAmmo'
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceFlareRevolverFire extends ScrnFlareRevolverFire;
|
||||
defaultproperties
|
||||
{
AmmoClass=Class'NicePack.NiceFlareRevolverAmmo'
ProjectileClass=Class'NicePack.NiceFlareRevolverProjectile'
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
class NiceFlareRevolverPickup extends ScrnFlareRevolverPickup;
|
||||
function inventory SpawnCopy( pawn Other ) {
|
||||
local Inventory CurInv;
|
||||
local KFWeapon PistolInInventory;
|
||||
For( CurInv=Other.Inventory; CurInv!=none; CurInv=CurInv.Inventory ) {
PistolInInventory = KFWeapon(CurInv);
if( PistolInInventory != none && PistolInInventory.class == default.InventoryType ) {
// destroy the inventory to force parent SpawnCopy() to make a new instance of class
// we specified below
if( Inventory!=none )
Inventory.Destroy();
// spawn dual guns instead of another instance of single
InventoryType = DualInventoryType;
// Make dualies to cost twice of lowest value in case of PERKED+UNPERKED pistols
SellValue = 2 * min(SellValue, PistolInInventory.SellValue);
AmmoAmount[0]+= PistolInInventory.AmmoAmount(0);
MagAmmoRemaining+= PistolInInventory.MagAmmoRemaining;
CurInv.Destroyed();
CurInv.Destroy();
Return Super(KFWeaponPickup).SpawnCopy(Other);
}
|
||||
}
|
||||
InventoryType = Default.InventoryType;
|
||||
Return Super(KFWeaponPickup).SpawnCopy(Other);
|
||||
}
|
||||
function bool CheckCanCarry(KFHumanPawn Hm) {
|
||||
local Inventory CurInv;
|
||||
local bool bHasSinglePistol;
|
||||
local float AddWeight;
|
||||
AddWeight = class<KFWeapon>(default.InventoryType).default.Weight;
|
||||
for ( CurInv = Hm.Inventory; CurInv != none; CurInv = CurInv.Inventory ) {
if ( CurInv.class == default.DualInventoryType ) {
//already have duals, can't carry a single
if ( LastCantCarryTime < Level.TimeSeconds && PlayerController(Hm.Controller) != none )
{
LastCantCarryTime = Level.TimeSeconds + 0.5;
PlayerController(Hm.Controller).ReceiveLocalizedMessage(Class'KFMainMessages', 2);
}
return false;
}
else if ( CurInv.class == default.InventoryType ) {
bHasSinglePistol = true;
AddWeight = default.DualInventoryType.default.Weight - AddWeight;
break;
}
|
||||
}
|
||||
if ( !Hm.CanCarry(AddWeight) ) {
if ( LastCantCarryTime < Level.TimeSeconds && PlayerController(Hm.Controller) != none )
{
LastCantCarryTime = Level.TimeSeconds + 0.5;
PlayerController(Hm.Controller).ReceiveLocalizedMessage(Class'KFMainMessages', 2);
}
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
defaultproperties
|
||||
{
DualInventoryType=Class'NicePack.NiceDualFlareRevolver'
ItemName="Flare Revolver NW"
ItemShortName="Flare Rev. NW"
InventoryType=Class'NicePack.NiceFlareRevolver'
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
class NiceFlareRevolverProjectile extends ScrnFlareRevolverProjectile;
|
||||
//overrided to use alternate burning mechanism
|
||||
simulated function HurtRadius( float DamageAmount, float DamageRadius, class<DamageType> DamageType, float Momentum, vector HitLocation )
|
||||
{
|
||||
local actor Victims;
|
||||
local float damageScale, dist;
|
||||
local vector dirs;
|
||||
local int NumKilled;
|
||||
local KFMonster KFMonsterVictim;
|
||||
local Pawn P;
|
||||
local KFPawn KFP;
|
||||
local array<Pawn> CheckedPawns;
|
||||
local int i;
|
||||
local bool bAlreadyChecked;
|
||||
if ( bHurtEntry )
return;
|
||||
bHurtEntry = true;
|
||||
foreach CollidingActors (class 'Actor', Victims, DamageRadius, HitLocation) {
// null pawn variables here just to be sure they didn't left from previous iteration
// and waste another day of my life to looking for this fucking bug -- PooSH /totallyPissedOff!!!
P = none;
KFMonsterVictim = none;
KFP = none;
// don't let blast damage affect fluid - VisibleCollisingActors doesn't really work for them - jag
if( (Victims != self) && (Victims != Instigator) &&(Hurtwall != Victims)
&& (Victims.Role == ROLE_Authority) && !Victims.IsA('FluidSurfaceInfo')
&& ExtendedZCollision(Victims)==none && KFBulletWhipAttachment(Victims)==none )
{
dirs = Victims.Location - HitLocation;
dist = FMax(1,VSize(dirs));
dirs = dirs/dist;
damageScale = 1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius);
if ( Instigator == none || Instigator.Controller == none )
Victims.SetDelayedDamageInstigatorController( InstigatorController );
if ( Victims == LastTouched )
LastTouched = none;
|
||||
P = Pawn(Victims);
|
||||
if( P != none )
{
for (i = 0; i < CheckedPawns.Length; i++)
{
if (CheckedPawns[i] == P)
{
bAlreadyChecked = true;
break;
}
}
|
||||
if( bAlreadyChecked )
{
bAlreadyChecked = false;
P = none;
continue;
}
|
||||
KFMonsterVictim = KFMonster(Victims);
|
||||
if( KFMonsterVictim != none && KFMonsterVictim.Health <= 0 )
{
KFMonsterVictim = none;
}
|
||||
KFP = KFPawn(Victims);
|
||||
if( KFMonsterVictim != none )
{
damageScale *= KFMonsterVictim.GetExposureTo(HitLocation);
}
else if( KFP != none )
{
damageScale *= KFP.GetExposureTo(HitLocation);
}
|
||||
CheckedPawns[CheckedPawns.Length] = P;
|
||||
if ( damageScale <= 0)
{
P = none;
continue;
}
else
{
P = none;
}
}
|
||||
Victims.TakeDamage
(
damageScale * DamageAmount,
Instigator,
Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dirs,
(damageScale * Momentum * dirs),
DamageType//Class'NicePack.NiceDamTypeFlareProjectileFire'
);
if (Vehicle(Victims) != none && Vehicle(Victims).Health > 0)
Vehicle(Victims).DriverRadiusDamage(DamageAmount, DamageRadius, InstigatorController,
DamageType,//Class'NicePack.NiceDamTypeFlareProjectileFire',
Momentum, HitLocation);
|
||||
if( Role == ROLE_Authority && KFMonsterVictim != none && KFMonsterVictim.Health <= 0 )
{
NumKilled++;
}
}
|
||||
}
|
||||
/*
|
||||
if ( (LastTouched != none) && (LastTouched != self) && (LastTouched != Instigator) &&
(LastTouched.Role == ROLE_Authority) && !LastTouched.IsA('FluidSurfaceInfo') )
|
||||
{
Victims = LastTouched;
LastTouched = none;
dirs = Victims.Location - HitLocation;
dist = FMax(1,VSize(dirs));
dirs = dirs/dist;
damageScale = FMax(Victims.CollisionRadius/(Victims.CollisionRadius + Victims.CollisionHeight),1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius));
if ( Instigator == none || Instigator.Controller == none )
Victims.SetDelayedDamageInstigatorController(InstigatorController);
|
||||
log("Part 2 Doing "$(damageScale * DamageAmount)$" damage to "$Victims);
Victims.TakeDamage
(
damageScale * DamageAmount,
Instigator,
Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dirs,
(damageScale * Momentum * dirs),
DamageType
);
if (Vehicle(Victims) != none && Vehicle(Victims).Health > 0)
Vehicle(Victims).DriverRadiusDamage(DamageAmount, DamageRadius, InstigatorController, DamageType, Momentum, HitLocation);
|
||||
}
|
||||
*/
|
||||
if( Role == ROLE_Authority )
|
||||
{
if( NumKilled >= 4 )
{
KFGameType(Level.Game).DramaticEvent(0.05);
}
else if( NumKilled >= 2 )
{
KFGameType(Level.Game).DramaticEvent(0.03);
}
|
||||
}
|
||||
bHurtEntry = false;
|
||||
}
|
||||
defaultproperties
|
||||
{
ImpactDamageType=Class'NicePack.NiceDamTypeFlareProjectileImpact'
MyDamageType=Class'NicePack.NiceDamTypeFlareProjectileFire'
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
class NiceDamTypeHFR extends NiceDamTypeFire
|
||||
abstract;
|
||||
defaultproperties
|
||||
{
WeaponClass=Class'NicePack.NiceHFR'
DeathString="%k incinerated %o (Horzine Flame Rifle)."
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
class NiceDamTypeHFRAssaultRifle extends NiceDamTypeFire
|
||||
abstract;
|
||||
defaultproperties
|
||||
{
heatPart=0.500000
HeadShotDamageMult=6.000000
bCheckForHeadShots=True
WeaponClass=Class'NicePack.NiceHFR'
DeathString="%k killed %o (Horzine Flame Rifle)."
FemaleSuicide="%o shot herself in the foot."
MaleSuicide="%o shot himself in the foot."
bRagdollBullet=True
PawnDamageEmitter=Class'ROEffects.ROBloodPuff'
LowGoreDamageEmitter=Class'ROEffects.ROBloodPuffNoGore'
LowDetailEmitter=Class'ROEffects.ROBloodPuffSmall'
KDamageImpulse=5500.000000
KDeathVel=175.000000
KDeathUpKick=15.000000
|
||||
}
|
||||
296
sources/Weapons/Playable/Incendiary/HFR/NiceHFR.uc
Normal file
296
sources/Weapons/Playable/Incendiary/HFR/NiceHFR.uc
Normal file
|
|
@ -0,0 +1,296 @@
|
|||
// Modification of the AAR525 weapons by: [B.R]HekuT
|
||||
class NiceHFR extends KFWeapon;
|
||||
#exec OBJ LOAD FILE=KillingFloorWeapons.utx
|
||||
#exec OBJ LOAD FILE=KillingFloorHUD.utx
|
||||
#exec OBJ LOAD FILE=Inf_Weapons_Foley.uax
|
||||
#exec OBJ LOAD FILE=KF_Weapons5_Scopes_Trip_T.utx
|
||||
var() Material ZoomMat;
|
||||
var() int lenseMaterialID;
|
||||
var() float scopePortalFOVHigh;
|
||||
var() float scopePortalFOV;
|
||||
var() vector XoffsetScoped;
|
||||
var() vector XoffsetHighDetail;
|
||||
var() int scopePitch;
|
||||
var() int scopeYaw;
|
||||
var() int scopePitchHigh;
|
||||
var() int scopeYawHigh;
|
||||
var ScriptedTexture ScopeScriptedTexture;
|
||||
var Shader ScopeScriptedShader;
|
||||
var Material ScriptedTextureFallback;
|
||||
var Combiner ScriptedScopeCombiner;
|
||||
var Combiner ScriptedScopeStatic;
|
||||
var texture TexturedScopeTexture;
|
||||
var bool bInitializedScope;
|
||||
var string ZoomMatRef;
|
||||
var string ScriptedTextureFallbackRef;
|
||||
static function PreloadAssets(Inventory Inv, optional bool bSkipRefCount)
|
||||
{
|
||||
super.PreloadAssets(Inv, bSkipRefCount);
|
||||
default.ZoomMat = FinalBlend(DynamicLoadObject(default.ZoomMatRef, class'FinalBlend', true));
|
||||
default.ScriptedTextureFallback = texture(DynamicLoadObject(default.ScriptedTextureFallbackRef, class'texture', true));
|
||||
if ( M99SniperRifle(Inv) != none )
|
||||
{
M99SniperRifle(Inv).ZoomMat = default.ZoomMat;
M99SniperRifle(Inv).ScriptedTextureFallback = default.ScriptedTextureFallback;
|
||||
}
|
||||
}
|
||||
static function bool UnloadAssets()
|
||||
{
|
||||
if ( super.UnloadAssets() )
|
||||
{
default.ZoomMat = none;
default.ScriptedTextureFallback = none;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
exec function pfov(int thisFOV)
|
||||
{
|
||||
if( !class'ROEngine.ROLevelInfo'.static.RODebugMode() )
return;
|
||||
scopePortalFOV = thisFOV;
|
||||
}
|
||||
exec function pPitch(int num)
|
||||
{
|
||||
if( !class'ROEngine.ROLevelInfo'.static.RODebugMode() )
return;
|
||||
scopePitch = num;
|
||||
scopePitchHigh = num;
|
||||
}
|
||||
exec function pYaw(int num)
|
||||
{
|
||||
if( !class'ROEngine.ROLevelInfo'.static.RODebugMode() )
return;
|
||||
scopeYaw = num;
|
||||
scopeYawHigh = num;
|
||||
}
|
||||
simulated exec function TexSize(int i, int j)
|
||||
{
|
||||
if( !class'ROEngine.ROLevelInfo'.static.RODebugMode() )
return;
|
||||
ScopeScriptedTexture.SetSize(i, j);
|
||||
}
|
||||
simulated function bool ShouldDrawPortal()
|
||||
{
|
||||
if( bAimingRifle )
return true;
|
||||
else
return false;
|
||||
}
|
||||
simulated function PostBeginPlay()
|
||||
{
|
||||
super.PostBeginPlay();
|
||||
KFScopeDetail = class'KFMod.KFWeapon'.default.KFScopeDetail;
|
||||
UpdateScopeMode();
|
||||
}
|
||||
simulated function UpdateScopeMode()
|
||||
{
|
||||
if (Level.NetMode != NM_DedicatedServer && Instigator != none && Instigator.IsLocallyControlled() &&
Instigator.IsHumanControlled() )
|
||||
{
if( KFScopeDetail == KF_ModelScope )
{
scopePortalFOV = default.scopePortalFOV;
ZoomedDisplayFOV = CalcAspectRatioAdjustedFOV(default.ZoomedDisplayFOV);
if (bAimingRifle)
{
PlayerViewOffset = XoffsetScoped;
}
|
||||
if( ScopeScriptedTexture == none )
{
ScopeScriptedTexture = ScriptedTexture(Level.ObjectPool.AllocateObject(class'ScriptedTexture'));
}
|
||||
ScopeScriptedTexture.FallBackMaterial = ScriptedTextureFallback;
ScopeScriptedTexture.SetSize(512,512);
ScopeScriptedTexture.Client = Self;
|
||||
if( ScriptedScopeCombiner == none )
{
ScriptedScopeCombiner = Combiner(Level.ObjectPool.AllocateObject(class'Combiner'));
ScriptedScopeCombiner.Material1 = Texture'KF_Weapons5_Scopes_Trip_T.Scope.MilDot';
ScriptedScopeCombiner.FallbackMaterial = Shader'ScopeShaders.Zoomblur.LensShader';
ScriptedScopeCombiner.CombineOperation = CO_Multiply;
ScriptedScopeCombiner.AlphaOperation = AO_Use_Mask;
ScriptedScopeCombiner.Material2 = ScopeScriptedTexture;
}
|
||||
if( ScopeScriptedShader == none )
{
ScopeScriptedShader = Shader(Level.ObjectPool.AllocateObject(class'Shader'));
ScopeScriptedShader.Diffuse = ScriptedScopeCombiner;
ScopeScriptedShader.SelfIllumination = ScriptedScopeCombiner;
ScopeScriptedShader.FallbackMaterial = Shader'ScopeShaders.Zoomblur.LensShader';
}
|
||||
bInitializedScope = true;
}
else if( KFScopeDetail == KF_ModelScopeHigh )
{
scopePortalFOV = scopePortalFOVHigh;
ZoomedDisplayFOV = CalcAspectRatioAdjustedFOV(default.ZoomedDisplayFOVHigh);
if (bAimingRifle)
{
PlayerViewOffset = XoffsetHighDetail;
}
|
||||
if( ScopeScriptedTexture == none )
{
ScopeScriptedTexture = ScriptedTexture(Level.ObjectPool.AllocateObject(class'ScriptedTexture'));
}
ScopeScriptedTexture.FallBackMaterial = ScriptedTextureFallback;
ScopeScriptedTexture.SetSize(1024,1024);
ScopeScriptedTexture.Client = Self;
|
||||
if( ScriptedScopeCombiner == none )
{
ScriptedScopeCombiner = Combiner(Level.ObjectPool.AllocateObject(class'Combiner'));
ScriptedScopeCombiner.Material1 = Texture'KF_Weapons5_Scopes_Trip_T.Scope.MilDot';
ScriptedScopeCombiner.FallbackMaterial = Shader'ScopeShaders.Zoomblur.LensShader';
ScriptedScopeCombiner.CombineOperation = CO_Multiply;
ScriptedScopeCombiner.AlphaOperation = AO_Use_Mask;
ScriptedScopeCombiner.Material2 = ScopeScriptedTexture;
}
|
||||
if( ScopeScriptedShader == none )
{
ScopeScriptedShader = Shader(Level.ObjectPool.AllocateObject(class'Shader'));
ScopeScriptedShader.Diffuse = ScriptedScopeCombiner;
ScopeScriptedShader.SelfIllumination = ScriptedScopeCombiner;
ScopeScriptedShader.FallbackMaterial = Shader'ScopeShaders.Zoomblur.LensShader';
}
|
||||
bInitializedScope = true;
}
else if (KFScopeDetail == KF_TextureScope)
{
ZoomedDisplayFOV = CalcAspectRatioAdjustedFOV(default.ZoomedDisplayFOV);
PlayerViewOffset.X = default.PlayerViewOffset.X;
|
||||
bInitializedScope = true;
}
|
||||
}
|
||||
}
|
||||
simulated event RenderTexture(ScriptedTexture Tex)
|
||||
{
|
||||
local rotator RollMod;
|
||||
RollMod = Instigator.GetViewRotation();
|
||||
if(Owner != none && Instigator != none && Tex != none && Tex.Client != none)
Tex.DrawPortal(0,0,Tex.USize,Tex.VSize,Owner,(Instigator.Location + Instigator.EyePosition()), RollMod, scopePortalFOV );
|
||||
}
|
||||
/**
|
||||
* Handles all the functionality for zooming in including
|
||||
* setting the parameters for the weapon, pawn, and playercontroller
|
||||
*
|
||||
* @param bAnimateTransition whether or not to animate this zoom transition
|
||||
*/
|
||||
simulated function ZoomIn(bool bAnimateTransition)
|
||||
{
|
||||
super(BaseKFWeapon).ZoomIn(bAnimateTransition);
|
||||
bAimingRifle = True;
|
||||
if( KFHumanPawn(Instigator)!=none )
KFHumanPawn(Instigator).SetAiming(True);
|
||||
if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none )
|
||||
{
if( AimInSound != none )
{
PlayOwnedSound(AimInSound, SLOT_Interact,,,,, false);
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Handles all the functionality for zooming out including
|
||||
* setting the parameters for the weapon, pawn, and playercontroller
|
||||
*
|
||||
* @param bAnimateTransition whether or not to animate this zoom transition
|
||||
*/
|
||||
simulated function ZoomOut(bool bAnimateTransition)
|
||||
{
|
||||
super.ZoomOut(bAnimateTransition);
|
||||
bAimingRifle = False;
|
||||
if( KFHumanPawn(Instigator)!=none )
KFHumanPawn(Instigator).SetAiming(False);
|
||||
if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none )
|
||||
{
if( AimOutSound != none )
{
PlayOwnedSound(AimOutSound, SLOT_Interact,,,,, false);
}
KFPlayerController(Instigator.Controller).TransitionFOV(KFPlayerController(Instigator.Controller).DefaultFOV,0.0);
|
||||
}
|
||||
}
|
||||
simulated event OnZoomInFinished()
|
||||
{
|
||||
local name anim;
|
||||
local float frame, rate;
|
||||
GetAnimParams(0, anim, frame, rate);
|
||||
if (ClientState == WS_ReadyToFire)
|
||||
{
if (anim == IdleAnim)
{
PlayIdle();
}
|
||||
}
|
||||
if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none &&
KFScopeDetail == KF_TextureScope )
|
||||
{
KFPlayerController(Instigator.Controller).TransitionFOV(PlayerIronSightFOV,0.0);
|
||||
}
|
||||
}
|
||||
simulated event RenderOverlays(Canvas Canvas)
|
||||
{
|
||||
local int m;
|
||||
local PlayerController PC;
|
||||
if (Instigator == none)
return;
|
||||
PC = PlayerController(Instigator.Controller);
|
||||
if(PC == none)
return;
|
||||
if(!bInitializedScope && PC != none )
|
||||
{
UpdateScopeMode();
|
||||
}
|
||||
Canvas.DrawActor(none, false, true);
|
||||
for (m = 0; m < NUM_FIRE_MODES; m++)
|
||||
{
if (FireMode[m] != none)
{
FireMode[m].DrawMuzzleFlash(Canvas);
}
|
||||
}
|
||||
|
||||
SetLocation( Instigator.Location + Instigator.CalcDrawOffset(self) );
|
||||
SetRotation( Instigator.GetViewRotation() + ZoomRotInterp);
|
||||
PreDrawFPWeapon();
|
||||
if(bAimingRifle && PC != none && (KFScopeDetail == KF_ModelScope || KFScopeDetail == KF_ModelScopeHigh))
{
if (ShouldDrawPortal())
{
if ( ScopeScriptedTexture != none )
{
Skins[LenseMaterialID] = ScopeScriptedShader;
ScopeScriptedTexture.Client = Self;
ScopeScriptedTexture.Revision = (ScopeScriptedTexture.Revision +1);
}
}
|
||||
bDrawingFirstPerson = true;
Canvas.DrawBoundActor(self, false, false,DisplayFOV,PC.Rotation,rot(0,0,0),Instigator.CalcZoomedDrawOffset(self));
bDrawingFirstPerson = false;
|
||||
}
|
||||
else if( KFScopeDetail == KF_TextureScope && PC.DesiredFOV == PlayerIronSightFOV && bAimingRifle)
|
||||
{
Skins[LenseMaterialID] = ScriptedTextureFallback;
|
||||
SetZoomBlendColor(Canvas);
|
||||
Canvas.Style = ERenderStyle.STY_Normal;
Canvas.SetPos(0, 0);
Canvas.DrawTile(ZoomMat, (Canvas.SizeX - Canvas.SizeY) / 2, Canvas.SizeY, 0.0, 0.0, 8, 8);
Canvas.SetPos(Canvas.SizeX, 0);
Canvas.DrawTile(ZoomMat, -(Canvas.SizeX - Canvas.SizeY) / 2, Canvas.SizeY, 0.0, 0.0, 8, 8);
|
||||
Canvas.Style = 255;
Canvas.SetPos((Canvas.SizeX - Canvas.SizeY) / 2,0);
Canvas.DrawTile(ZoomMat, Canvas.SizeY, Canvas.SizeY, 0.0, 0.0, 1024, 1024);
|
||||
Canvas.Font = Canvas.MedFont;
Canvas.SetDrawColor(200,150,0);
|
||||
Canvas.SetPos(Canvas.SizeX * 0.16, Canvas.SizeY * 0.43);
Canvas.DrawText("Zoom: 3.0");
|
||||
Canvas.SetPos(Canvas.SizeX * 0.16, Canvas.SizeY * 0.47);
|
||||
}
else
{
Skins[LenseMaterialID] = ScriptedTextureFallback;
bDrawingFirstPerson = true;
Canvas.DrawActor(self, false, false, DisplayFOV);
bDrawingFirstPerson = false;
}
|
||||
}
|
||||
simulated function float CalcAspectRatioAdjustedFOV(float AdjustFOV)
|
||||
{
|
||||
local KFPlayerController KFPC;
|
||||
local float ResX, ResY;
|
||||
local float AspectRatio;
|
||||
KFPC = KFPlayerController(Level.GetLocalPlayerController());
|
||||
if( KFPC == none )
|
||||
{
return AdjustFOV;
|
||||
}
|
||||
ResX = float(GUIController(KFPC.Player.GUIController).ResX);
|
||||
ResY = float(GUIController(KFPC.Player.GUIController).ResY);
|
||||
AspectRatio = ResX / ResY;
|
||||
if ( KFPC.bUseTrueWideScreenFOV && AspectRatio >= 1.60 ) //1.6 = 16/10 which is 16:10 ratio and 16:9 comes to 1.77
|
||||
{
return CalcFOVForAspectRatio(AdjustFOV);
|
||||
}
|
||||
else
|
||||
{
return AdjustFOV;
|
||||
}
|
||||
}
|
||||
simulated function AdjustIngameScope()
|
||||
{
|
||||
local PlayerController PC;
|
||||
if(Instigator == none || PlayerController(Instigator.Controller) == none)
return;
|
||||
PC = PlayerController(Instigator.Controller);
|
||||
if( !bHasScope )
return;
|
||||
switch (KFScopeDetail)
|
||||
{
case KF_ModelScope:
if( bAimingRifle )
DisplayFOV = CalcAspectRatioAdjustedFOV(default.ZoomedDisplayFOV);
if ( PC.DesiredFOV == PlayerIronSightFOV && bAimingRifle )
{
if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none )
{
KFPlayerController(Instigator.Controller).TransitionFOV(KFPlayerController(Instigator.Controller).DefaultFOV,0.0);
|
||||
}
}
break;
|
||||
case KF_TextureScope:
if( bAimingRifle )
DisplayFOV = CalcAspectRatioAdjustedFOV(default.ZoomedDisplayFOV);
if ( bAimingRifle && PC.DesiredFOV != PlayerIronSightFOV )
{
if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none )
{
KFPlayerController(Instigator.Controller).TransitionFOV(PlayerIronSightFOV,0.0);
}
}
break;
|
||||
case KF_ModelScopeHigh:
if( bAimingRifle )
{
if( ZoomedDisplayFOVHigh > 0 )
{
DisplayFOV = CalcAspectRatioAdjustedFOV(default.ZoomedDisplayFOVHigh);
}
else
{
DisplayFOV = CalcAspectRatioAdjustedFOV(default.ZoomedDisplayFOV);
}
}
if ( bAimingRifle && PC.DesiredFOV == PlayerIronSightFOV )
{
if( Level.NetMode != NM_DedicatedServer && KFPlayerController(Instigator.Controller) != none )
{
KFPlayerController(Instigator.Controller).TransitionFOV(KFPlayerController(Instigator.Controller).DefaultFOV,0.0);
}
}
break;
|
||||
}
|
||||
UpdateScopeMode();
|
||||
}
|
||||
simulated event Destroyed()
|
||||
{
|
||||
if (ScopeScriptedTexture != none)
|
||||
{
ScopeScriptedTexture.Client = none;
Level.ObjectPool.FreeObject(ScopeScriptedTexture);
ScopeScriptedTexture=none;
|
||||
}
|
||||
if (ScriptedScopeCombiner != none)
|
||||
{
ScriptedScopeCombiner.Material2 = none;
Level.ObjectPool.FreeObject(ScriptedScopeCombiner);
ScriptedScopeCombiner = none;
|
||||
}
|
||||
if (ScopeScriptedShader != none)
|
||||
{
ScopeScriptedShader.Diffuse = none;
ScopeScriptedShader.SelfIllumination = none;
Level.ObjectPool.FreeObject(ScopeScriptedShader);
ScopeScriptedShader = none;
|
||||
}
|
||||
Super.Destroyed();
|
||||
}
|
||||
simulated function PreTravelCleanUp()
|
||||
{
|
||||
if (ScopeScriptedTexture != none)
|
||||
{
ScopeScriptedTexture.Client = none;
Level.ObjectPool.FreeObject(ScopeScriptedTexture);
ScopeScriptedTexture=none;
|
||||
}
|
||||
if (ScriptedScopeCombiner != none)
|
||||
{
ScriptedScopeCombiner.Material2 = none;
Level.ObjectPool.FreeObject(ScriptedScopeCombiner);
ScriptedScopeCombiner = none;
|
||||
}
|
||||
if (ScopeScriptedShader != none)
|
||||
{
ScopeScriptedShader.Diffuse = none;
ScopeScriptedShader.SelfIllumination = none;
Level.ObjectPool.FreeObject(ScopeScriptedShader);
ScopeScriptedShader = none;
|
||||
}
|
||||
}
|
||||
state PendingClientWeaponSet
|
||||
{
|
||||
simulated function Timer()
|
||||
{
if ( Pawn(Owner) != none && !bIsReloading )
{
ClientWeaponSet(bPendingSwitch);
}
|
||||
if ( IsInState('PendingClientWeaponSet') )
{
SetTimer(0.1, false);
}
|
||||
}
|
||||
simulated function BeginState()
|
||||
{
SetTimer(0.1, false);
|
||||
}
|
||||
simulated function EndState()
|
||||
{
|
||||
}
|
||||
}
|
||||
simulated function SetZoomBlendColor(Canvas c)
|
||||
{
|
||||
local Byte val;
|
||||
local Color clr;
|
||||
local Color fog;
|
||||
clr.R = 255;
|
||||
clr.G = 255;
|
||||
clr.B = 255;
|
||||
clr.A = 255;
|
||||
if( Instigator.Region.Zone.bDistanceFog )
|
||||
{
fog = Instigator.Region.Zone.DistanceFogColor;
val = 0;
val = Max( val, fog.R);
val = Max( val, fog.G);
val = Max( val, fog.B);
if( val > 128 )
{
val -= 128;
clr.R -= val;
clr.G -= val;
clr.B -= val;
}
|
||||
}
|
||||
c.DrawColor = clr;
|
||||
}
|
||||
function bool RecommendRangedAttack()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
function float SuggestAttackStyle()
|
||||
{
|
||||
return -1.0;
|
||||
}
|
||||
function bool RecommendLongRangedAttack()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
simulated function AnimEnd(int channel)
|
||||
{
|
||||
if(!FireMode[1].IsInState('FireLoop'))
|
||||
{
Super.AnimEnd(channel);
|
||||
}
|
||||
}
|
||||
simulated function WeaponTick(float dt)
|
||||
{
|
||||
Super.WeaponTick(dt);
|
||||
}
|
||||
simulated function bool StartFire(int Mode)
|
||||
{
|
||||
if( Mode == 0 )
return super.StartFire(Mode);
|
||||
if( !super.StartFire(Mode) )
return false;
|
||||
|
||||
if( AmmoAmount(0) <= 0 )
|
||||
{
return false;
|
||||
}
|
||||
AnimStopLooping();
|
||||
if( !FireMode[Mode].IsInState('FireLoop') && (AmmoAmount(0) > 0) )
|
||||
{
FireMode[Mode].StartFiring();
return true;
|
||||
}
|
||||
else
|
||||
{
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
defaultproperties
|
||||
{
lenseMaterialID=3
scopePortalFOVHigh=22.000000
scopePortalFOV=12.000000
ZoomMatRef="KillingFloorWeapons.Xbow.CommandoCrossFinalBlend"
ScriptedTextureFallbackRef="NicePackT.HFR.CBLens_cmb"
bHasScope=True
ZoomedDisplayFOVHigh=35.000000
MagCapacity=10
ReloadRate=3.000000
ReloadAnim="Reload"
ReloadAnimRate=0.600000
WeaponReloadAnim="Reload_M4"
bSteadyAim=True
Weight=7.000000
bHasAimingMode=True
IdleAimAnim="Idle"
StandardDisplayFOV=60.000000
bModeZeroCanDryFire=True
SleeveNum=0
TraderInfoTexture=Texture'NicePackT.HFR.AAR525S_Trader'
bIsTier2Weapon=True
MeshRef="NicePackA.HFR"
SkinRefs(0)="KF_Weapons_Trip_T.hands.hands_1stP_military_cmb"
SkinRefs(1)="NicePackT.HFR.AAR525S_TEX_cmb"
SkinRefs(2)="KF_Weapons_Trip_T.Rifles.crossbow_cmb"
SelectSoundRef="KF_AK47Snd.AK47_Select"
HudImageRef="NicePackT.HFR.AAR525S_unselected"
SelectedHudImageRef="NicePackT.HFR.AAR525S_selected"
PlayerIronSightFOV=65.000000
ZoomedDisplayFOV=32.000000
FireModeClass(0)=Class'NicePack.NiceHFRPFire'
FireModeClass(1)=Class'NicePack.NiceHFRBurstFire'
PutDownAnim="PutDown"
AIRating=0.700000
CurrentRating=0.700000
Description="Advanced horzine flame rifle."
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
DisplayFOV=60.000000
Priority=145
CustomCrosshair=11
CustomCrossHairTextureName="Crosshairs.HUD.Crosshair_Cross5"
InventoryGroup=4
GroupOffset=8
PickupClass=Class'NicePack.NiceHFRPickup'
PlayerViewOffset=(X=18.000000,Y=15.000000,Z=-6.000000)
BobDamping=6.000000
AttachmentClass=Class'NicePack.NiceHFRAttachment'
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
ItemName="Horzine flame rifle"
DrawScale=0.900000
TransientSoundVolume=1.250000
|
||||
}
|
||||
5
sources/Weapons/Playable/Incendiary/HFR/NiceHFRAmmo.uc
Normal file
5
sources/Weapons/Playable/Incendiary/HFR/NiceHFRAmmo.uc
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
class NiceHFRAmmo extends KFAmmunition;
|
||||
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
|
||||
defaultproperties
|
||||
{
AmmoPickupAmount=15
MaxAmmo=100
InitialAmount=40
PickupClass=Class'NicePack.NiceHFRAmmoPickup'
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
IconCoords=(X1=336,Y1=82,X2=382,Y2=125)
ItemName="Fire balloon"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceHFRAmmoPickup extends KFAmmoPickup;
|
||||
defaultproperties
|
||||
{
AmmoAmount=15
InventoryType=Class'NicePack.NiceHFRAmmo'
PickupMessage="Fire balloon"
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceHFRAttachment extends KFWeaponAttachment;
|
||||
defaultproperties
|
||||
{
mTracerClass=Class'KFMod.SPSniperTracer'
MovementAnims(0)="JogF_M4203"
MovementAnims(1)="JogB_M4203"
MovementAnims(2)="JogL_M4203"
MovementAnims(3)="JogR_M4203"
TurnLeftAnim="TurnL_M4203"
TurnRightAnim="TurnR_M4203"
CrouchAnims(0)="CHWalkF_M4203"
CrouchAnims(1)="CHWalkB_M4203"
CrouchAnims(2)="CHWalkL_M4203"
CrouchAnims(3)="CHWalkR_M4203"
WalkAnims(0)="WalkF_M4203"
WalkAnims(1)="WalkB_M4203"
WalkAnims(2)="WalkL_M4203"
WalkAnims(3)="WalkR_M4203"
CrouchTurnRightAnim="CH_TurnR_M4203"
CrouchTurnLeftAnim="CH_TurnL_M4203"
IdleCrouchAnim="CHIdle_M4203"
IdleWeaponAnim="Idle_M4203"
IdleRestAnim="Idle_M4203"
IdleChatAnim="Idle_M4203"
IdleHeavyAnim="Idle_M4203"
IdleRifleAnim="Idle_M4203"
FireAnims(0)="Fire_M4203"
FireAnims(1)="Fire_M4203"
FireAnims(2)="Fire_M4203"
FireAnims(3)="Fire_M4203"
FireAltAnims(0)="Reload_Secondary_M4203"
FireAltAnims(1)="Reload_Secondary_M4203"
FireAltAnims(2)="Reload_Secondary_M4203"
FireAltAnims(3)="Reload_Secondary_M4203"
FireCrouchAnims(0)="CHFire_M4203"
FireCrouchAnims(1)="CHFire_M4203"
FireCrouchAnims(2)="CHFire_M4203"
FireCrouchAnims(3)="CHFire_M4203"
FireCrouchAltAnims(0)="Reload_Secondary_M4203"
FireCrouchAltAnims(1)="Reload_Secondary_M4203"
FireCrouchAltAnims(2)="Reload_Secondary_M4203"
FireCrouchAltAnims(3)="Reload_Secondary_M4203"
HitAnims(0)="HitF_M4203"
HitAnims(1)="HitB_M4203"
HitAnims(2)="HitL_M4203"
HitAnims(3)="HitR_M4203"
PostFireBlendStandAnim="Blend_M4203"
PostFireBlendCrouchAnim="CHBlend_M4203"
MeshRef="NicePackA.HFR_3rd"
WeaponAmbientScale=2.000000
SplashEffect=Class'ROEffects.BulletSplashEmitter'
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceHFRBurstFire extends FlameBurstFire;
|
||||
defaultproperties
|
||||
{
FireLoopAnim="Fire_Flame"
AmmoClass=Class'NicePack.NiceHFRAmmo'
ProjectileClass=Class'NicePack.NiceHFRTendril'
|
||||
}
|
||||
20
sources/Weapons/Playable/Incendiary/HFR/NiceHFRFlame.uc
Normal file
20
sources/Weapons/Playable/Incendiary/HFR/NiceHFRFlame.uc
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
class NiceHFRFlame extends HitFlame;
|
||||
var float LastFlameSpawnTime;
|
||||
var () float FlameSpawnInterval;
|
||||
var Emitter SecondaryFlame;
|
||||
state Ticking
|
||||
{
|
||||
simulated function Tick( float dt )
|
||||
{
if( LifeSpan < 2.0 )
{
mRegenRange[0] *= LifeSpan * 0.5;
mRegenRange[1] = mRegenRange[0];
SoundVolume = byte(float(SoundVolume) * (LifeSpan * 0.5));
}
|
||||
if (Level.TimeSeconds - LastFlameSpawnTime > FlameSpawnInterval)
{
if( SecondaryFlame != none )
{
SecondaryFlame.Kill();
}
SecondaryFlame = Spawn(class'NicePack.NiceHFRFlameB',self);
}
|
||||
}
|
||||
}
|
||||
simulated function Destroyed()
|
||||
{
|
||||
if( SecondaryFlame != none )
|
||||
{
SecondaryFlame.Kill();
|
||||
}
|
||||
}
|
||||
defaultproperties
|
||||
{
FlameSpawnInterval=0.500000
mParticleType=PT_Stream
mLifeRange(0)=1.000000
mLifeRange(1)=1.500000
mRegenRange(0)=60.000000
mRegenRange(1)=60.000000
mMassRange(0)=0.500000
mMassRange(1)=1.000000
mSizeRange(0)=4.000000
mSizeRange(1)=8.000000
mGrowthRate=-52.000000
mAttenKa=0.000000
mAttenKb=0.000000
mRandTextures=True
mAttraction=100.000000
Physics=PHYS_Trailer
AmbientSound=Sound'Amb_Destruction.Fire.Kessel_Fire_Small_Barrel'
Skins(0)=Texture'KFX.KFFlames'
Style=STY_Additive
SoundVolume=255
TransientSoundVolume=0.000000
TransientSoundRadius=50.000000
bNotOnDedServer=False
|
||||
}
|
||||
5
sources/Weapons/Playable/Incendiary/HFR/NiceHFRFlameB.uc
Normal file
5
sources/Weapons/Playable/Incendiary/HFR/NiceHFRFlameB.uc
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
class NiceHFRFlameB extends Emitter;
|
||||
defaultproperties
|
||||
{
Begin Object Class=SpriteEmitter Name=SpriteEmitter0
UseColorScale=True
FadeOut=True
SpinParticles=True
UseSizeScale=True
UseRegularSizeScale=False
UniformSize=True
UseRandomSubdivision=True
ColorScale(1)=(RelativeTime=0.300000,Color=(B=255,G=255,R=255))
ColorScale(2)=(RelativeTime=0.750000,Color=(B=255,G=255,R=255))
ColorScale(3)=(RelativeTime=1.000000)
ColorMultiplierRange=(Z=(Min=0.670000,Max=2.000000))
FadeOutStartTime=0.501500
MaxParticles=15
StartLocationShape=PTLS_Sphere
SphereRadiusRange=(Max=1.000000)
SpinsPerSecondRange=(X=(Max=0.070000))
StartSpinRange=(X=(Max=1.000000))
SizeScale(0)=(RelativeTime=1.000000,RelativeSize=1.250000)
StartSizeRange=(X=(Min=1.000000,Max=15.000000),Y=(Min=0.000000,Max=0.000000),Z=(Min=0.000000,Max=0.000000))
ScaleSizeByVelocityMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
ScaleSizeByVelocityMax=0.000000
Texture=Texture'KillingFloorWeapons.FlameThrower.FlameThrowerFire'
TextureUSubdivisions=1
TextureVSubdivisions=1
SecondsBeforeInactive=30.000000
LifetimeRange=(Min=0.450000,Max=0.850000)
StartVelocityRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=2.000000,Max=25.000000))
MaxAbsVelocity=(X=100.000000,Y=100.000000,Z=100.000000)
End Object
Emitters(0)=SpriteEmitter'NicePack.NiceHFRFlameB.SpriteEmitter0'
|
||||
LightType=LT_Pulse
LightHue=30
LightSaturation=100
LightBrightness=300.000000
LightRadius=4.000000
bNoDelete=False
bDynamicLight=True
bNetTemporary=True
Physics=PHYS_Trailer
|
||||
}
|
||||
4
sources/Weapons/Playable/Incendiary/HFR/NiceHFRPFire.uc
Normal file
4
sources/Weapons/Playable/Incendiary/HFR/NiceHFRPFire.uc
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
class NiceHFRPFire extends KFFire;
|
||||
defaultproperties
|
||||
{
FireAimedAnim="Fire_Iron"
RecoilRate=0.120000
maxVerticalRecoilAngle=500
bAccuracyBonusForSemiAuto=True
bRandomPitchFireSound=False
FireSoundRef="KF_SP_LongmusketSnd.KFO_Sniper_Fire_M"
StereoFireSoundRef="KF_SP_LongmusketSnd.KFO_Sniper_Fire_S"
NoAmmoSoundRef="KF_AK47Snd.AK47_DryFire"
DamageType=Class'NicePack.NiceDamTypeHFRAssaultRifle'
DamageMax=50
Momentum=8500.000000
bWaitForRelease=True
TransientSoundVolume=1.200000
TransientSoundRadius=500.000000
FireLoopAnim="Fire"
FireAnimRate=0.909000
TweenTime=0.025000
FireForce="AssaultRifleFire"
FireRate=0.600000
AmmoClass=Class'NicePack.NiceHFRAmmo'
AmmoPerFire=1
ShakeRotMag=(X=50.000000,Y=50.000000,Z=350.000000)
ShakeRotRate=(X=5000.000000,Y=5000.000000,Z=5000.000000)
ShakeRotTime=0.750000
ShakeOffsetMag=(X=6.000000,Y=3.000000,Z=7.500000)
ShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000)
ShakeOffsetTime=1.250000
BotRefireRate=0.990000
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stSPSniper'
aimerror=42.000000
Spread=0.015000
SpreadStyle=SS_Random
|
||||
}
|
||||
4
sources/Weapons/Playable/Incendiary/HFR/NiceHFRPickup.uc
Normal file
4
sources/Weapons/Playable/Incendiary/HFR/NiceHFRPickup.uc
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
class NiceHFRPickup extends KFWeaponPickup;
|
||||
defaultproperties
|
||||
{
Weight=7.000000
AmmoCost=30
BuyClipSize=15
PowerValue=100
SpeedValue=100
RangeValue=40
Description="Advanced horzine flame rifle."
ItemName="Horzine flame rifle"
ItemShortName="HFR"
AmmoItemName="Fire balloon"
AmmoMesh=StaticMesh'KillingFloorStatics.FT_AmmoMesh'
CorrespondingPerkIndex=5
EquipmentCategoryID=3
InventoryType=Class'NicePack.NiceHFR'
PickupMessage="You got the HFR."
PickupSound=Sound'KF_AK47Snd.AK47_Pickup'
PickupForce="AssaultRiflePickup"
StaticMesh=StaticMesh'NicePackSM.HFR.AAR525_Black_Pickup'
CollisionRadius=30.000000
CollisionHeight=5.000000
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceHFRTendril extends FlameTendril;
|
||||
defaultproperties
|
||||
{
Damage=36.000000
MyDamageType=Class'NicePack.NiceDamTypeHFR'
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
class NiceDamTypeHuskGun extends NiceDamTypeFire
|
||||
abstract;
|
||||
defaultproperties
|
||||
{
bCheckForHeadShots=True
WeaponClass=Class'NicePack.NiceHuskGun'
DeathString="%k killed %o (Husk Gun)."
FemaleSuicide="%o blew up."
MaleSuicide="%o blew up."
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
class NiceDamTypeHuskGunProjectileImpact extends NiceDamTypeFire;
|
||||
static function GetHitEffects(out class<xEmitter> HitEffects[4], int VictimHealth)
|
||||
{
|
||||
HitEffects[0] = class'HitSmoke';
|
||||
if( VictimHealth <= 0 )
HitEffects[1] = class'KFHitFlame';
|
||||
else if ( FRand() < 0.8 )
HitEffects[1] = class'KFHitFlame';
|
||||
}
|
||||
static function AwardDamage(KFSteamStatsAndAchievements KFStatsAndAchievements, int Amount)
|
||||
{
|
||||
KFStatsAndAchievements.AddFlameThrowerDamage(Amount);
|
||||
}
|
||||
defaultproperties
|
||||
{
HeadShotDamageMult=1.500000
bCheckForHeadShots=True
WeaponClass=Class'NicePack.NiceHuskGun'
DeathString="%k killed %o (Husk Gun)."
FemaleSuicide="%o blew up."
MaleSuicide="%o blew up."
bRagdollBullet=True
bBulletHit=True
PawnDamageEmitter=Class'ROEffects.ROBloodPuff'
LowGoreDamageEmitter=Class'ROEffects.ROBloodPuffNoGore'
LowDetailEmitter=Class'ROEffects.ROBloodPuffSmall'
DeathOverlayMaterial=Combiner'Effects_Tex.GoreDecals.PlayerDeathOverlay'
DeathOverlayTime=999.000000
KDamageImpulse=10000.000000
KDeathVel=300.000000
KDeathUpKick=100.000000
HumanObliterationThreshhold=200
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
class NiceDamTypeHuskGun_Alt extends NiceDamTypeHuskGun
|
||||
abstract;
|
||||
defaultproperties
|
||||
{
HeadShotDamageMult=1.000000
bCheckForHeadShots=False
DeathString="%k burned down %o with Napalm."
FemaleSuicide="%o burned her pretty butt up."
MaleSuicide="%o burned his a** up."
|
||||
}
|
||||
52
sources/Weapons/Playable/Incendiary/HuskGun/NiceHuskGun.uc
Normal file
52
sources/Weapons/Playable/Incendiary/HuskGun/NiceHuskGun.uc
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
/**
|
||||
* Attempt to make Husk Gun actually usefull.
|
||||
*/
|
||||
|
||||
class NiceHuskGun extends ScrnHuskGun;
|
||||
/*
|
||||
// both fire modes share the same ammo pool, so don't give ammo twice
|
||||
function GiveAmmo(int m, WeaponPickup WP, bool bJustSpawned)
|
||||
{
|
||||
local bool bJustSpawnedAmmo;
|
||||
local int addAmount, InitialAmount;
|
||||
local float AddMultiplier;
|
||||
UpdateMagCapacity(Instigator.PlayerReplicationInfo);
|
||||
if ( FireMode[m] != none && FireMode[m].AmmoClass != none )
|
||||
{
Ammo[m] = Ammunition(Instigator.FindInventoryType(FireMode[m].AmmoClass));
bJustSpawnedAmmo = false;
|
||||
if ( bNoAmmoInstances )
{
if ( (FireMode[m].AmmoClass == none) || ((m != 0) && (FireMode[m].AmmoClass == FireMode[0].AmmoClass)) )
return;
|
||||
InitialAmount = FireMode[m].AmmoClass.Default.InitialAmount;
|
||||
if(WP!=none && WP.bThrown==true)
InitialAmount = WP.AmmoAmount[m];
else
{
// Other change - if not thrown, give the gun a full clip
MagAmmoRemaining = MagCapacity;
}
|
||||
if ( Ammo[m] != none )
{
addamount = InitialAmount + Ammo[m].AmmoAmount;
Ammo[m].Destroy();
}
else
addAmount = InitialAmount;
|
||||
AddAmmo(addAmount,m);
}
else
{
if ( (Ammo[m] == none) && (FireMode[m].AmmoClass != none) )
{
Ammo[m] = Spawn(FireMode[m].AmmoClass, Instigator);
Instigator.AddInventory(Ammo[m]);
bJustSpawnedAmmo = true;
}
else if ( (m == 0) || (FireMode[m].AmmoClass != FireMode[0].AmmoClass) )
bJustSpawnedAmmo = ( bJustSpawned || ((WP != none) && !WP.bWeaponStay) );
|
||||
// and here is the modification for instanced ammo actors
|
||||
if(WP!=none && WP.bThrown==true)
{
addAmount = WP.AmmoAmount[m];
}
else if ( bJustSpawnedAmmo )
{
if ( KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo) != none && KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill != none )
{
AddMultiplier = KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill.static.AddExtraAmmoFor(KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo), FireMode[m].AmmoClass);
}
else
{
AddMultiplier = 1.0;
}
|
||||
if (default.MagCapacity == 0)
addAmount = 0; // prevent division by zero.
else
addAmount = Ammo[m].InitialAmount * (float(MagCapacity) / float(default.MagCapacity)) * AddMultiplier;
}
|
||||
//removed: WP.Class == class'BoomstickPickup' -- (c) PooSH
if ( WP != none && m > 0 )
{
return;
}
|
||||
Ammo[m].AddAmmo(addAmount);
Ammo[m].GotoState('');
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
/*
|
||||
simulated function bool ConsumeAmmo( int Mode, float Load, optional bool bAmountNeededIsMax )
|
||||
{
|
||||
return super.ConsumeAmmo(0, Load, bAmountNeededIsMax);
|
||||
}
|
||||
simulated function int AmmoAmount(int mode)
|
||||
{
|
||||
return super.AmmoAmount(0);
|
||||
}
|
||||
*/
|
||||
/*
|
||||
//v2.60: Reload speed bonus affects charge rate
|
||||
simulated function bool StartFire(int Mode)
|
||||
{
|
||||
local ScrnHuskGunFire f;
|
||||
local KFPlayerReplicationInfo KFPRI;
|
||||
if ( super.StartFire(Mode) ) {
f = ScrnHuskGunFire(FireMode[Mode]);
if ( Mode == 0 && f != none ) {
f.MaxChargeTime = f.default.MaxChargeTime;
KFPRI = KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo);
if ( KFPRI != none && KFPRI.ClientVeteranSkill != none)
f.MaxChargeTime /= KFPRI.ClientVeteranSkill.static.GetReloadSpeedModifier(KFPRI, self);
}
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
defaultproperties
|
||||
{
Weight=8.000000
FireModeClass(0)=Class'NicePack.NiceHuskGunFire'
FireModeClass(1)=Class'NicePack.NiceHuskGunAltFire'
PickupClass=Class'NicePack.NiceHuskGunPickup'
ItemName="Husk Gun / Napalm Launcher NW"
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
// NAPALM THROWER
|
||||
class NiceHuskGunAltFire extends ScrnHuskGunAltFire;
|
||||
/*
|
||||
//instant shot, without holding
|
||||
function ModeHoldFire() { }
|
||||
function Charge() { }
|
||||
function PlayPreFire() { }
|
||||
function Timer() { }
|
||||
function class<Projectile> GetDesiredProjectileClass()
|
||||
{
|
||||
return ProjectileClass;
|
||||
}
|
||||
function PostSpawnProjectile(Projectile P)
|
||||
{
|
||||
super(KFShotgunFire).PostSpawnProjectile(P); // bypass HuskGunFire
|
||||
}
|
||||
simulated function bool AllowFire()
|
||||
{
|
||||
return (Weapon.AmmoAmount(ThisModeNum) >= MaxChargeAmmo);
|
||||
}
|
||||
function ModeDoFire()
|
||||
{
|
||||
if (!AllowFire())
return;
Weapon.ConsumeAmmo(ThisModeNum, MaxChargeAmmo-1); // +1 will be consumed in parent function
|
||||
super(KFShotgunFire).ModeDoFire();
|
||||
}
|
||||
*/
|
||||
defaultproperties
|
||||
{
MaxChargeAmmo=30
ProjectileClass=Class'NicePack.NiceHuskGunProjectile_Alt'
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceHuskGunAmmo extends ScrnHuskGunAmmo;
|
||||
defaultproperties
|
||||
{
MaxAmmo=150
InitialAmount=75
PickupClass=Class'NicePack.NiceHuskGunAmmoPickup'
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceHuskGunAmmoPickup extends ScrnHuskGunAmmoPickup;
|
||||
defaultproperties
|
||||
{
InventoryType=Class'NicePack.NiceHuskGunAmmo'
|
||||
}
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
class NiceHuskGunFire extends ScrnHuskGunFire;
|
||||
/*
|
||||
var int AmmoInCharge; //current charged amount var() int MaxChargeAmmo; //maximum charge
|
||||
|
||||
function Timer()
|
||||
{
|
||||
//local PlayerController Player;
|
||||
//consume ammo while charging
|
||||
if ( HoldTime > 0.0 && !bNowWaiting && AmmoInCharge < MaxChargeAmmo && Weapon.AmmoAmount(ThisModeNum) > 0 ) {
Charge();
// if (AmmoInCharge == MaxChargeAmmo) {
// Player = Level.GetLocalPlayerController();
// if (Player != none)
// Player.ReceiveLocalizedMessage(class'ScrnBalanceSrv.ScrnPlayerMessage',0);
// }
|
||||
}
|
||||
super.Timer();
|
||||
}
|
||||
function Charge()
|
||||
{
|
||||
local int AmmoShouldConsumed;
|
||||
if( HoldTime < MaxChargeTime)
AmmoShouldConsumed = clamp(round(MaxChargeAmmo*HoldTime/MaxChargeTime), 1, MaxChargeAmmo);
|
||||
else
AmmoShouldConsumed = MaxChargeAmmo;// full charge
|
||||
if (AmmoShouldConsumed != AmmoInCharge) {
if (AmmoShouldConsumed - AmmoInCharge > Weapon.AmmoAmount(ThisModeNum))
AmmoShouldConsumed = Weapon.AmmoAmount(ThisModeNum) + AmmoInCharge;
Weapon.ConsumeAmmo(ThisModeNum, AmmoShouldConsumed - AmmoInCharge);
AmmoInCharge = AmmoShouldConsumed;
ScrnHuskGun(Weapon).ChargeAmount = GetChargeAmount();
|
||||
}
|
||||
}
|
||||
function float GetChargeAmount()
|
||||
{
|
||||
return float(AmmoInCharge) / float(MaxChargeAmmo);
|
||||
}
|
||||
simulated function bool AllowFire()
|
||||
{
|
||||
return (Weapon.AmmoAmount(ThisModeNum) >= AmmoPerFire);
|
||||
}
|
||||
*/
|
||||
//overrided to restore old damage radius
|
||||
//(c) PooSH
|
||||
function PostSpawnProjectile(Projectile P)
|
||||
{
|
||||
local HuskGunProjectile HGP;
|
||||
super(KFShotgunFire).PostSpawnProjectile(P);
|
||||
HGP = HuskGunProjectile(p);
|
||||
if ( HGP != none ) {
if( AmmoInCharge < MaxChargeAmmo )
{
HGP.ImpactDamage *= AmmoInCharge;
HGP.Damage *= 1.0 + GetChargeAmount(); // up to 2x damage
HGP.DamageRadius *= 1.0 + 2 * GetChargeAmount();// up 2x the damage radius
}
else
{
HGP.ImpactDamage *= MaxChargeAmmo; //50*10 = 500
HGP.Damage *= 2.0; // up from 2x
HGP.DamageRadius *= 3.0; // down from x3
}
AmmoInCharge = 0; //reset charge after spawning a projectile
ScrnHuskGun(Weapon).ChargeAmount = 0;
|
||||
}
|
||||
}
|
||||
/*
|
||||
//copy pasted and cutted out ammo consuming, because we did it in time
|
||||
function ModeDoFire()
|
||||
{
|
||||
local float Rec;
|
||||
if (!AllowFire() && HoldTime ~= 0)
return;
|
||||
Spread = Default.Spread;
|
||||
Rec = 1;
|
||||
|
||||
if ( KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo) != none && KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill != none )
|
||||
{
Spread *= KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo).ClientVeteranSkill.Static.ModifyRecoilSpread(KFPlayerReplicationInfo(Instigator.PlayerReplicationInfo), self, Rec);
|
||||
}
|
||||
if( !bFiringDoesntAffectMovement )
|
||||
{
if (FireRate > 0.25)
{
Instigator.Velocity.x *= 0.1;
Instigator.Velocity.y *= 0.1;
}
else
{
Instigator.Velocity.x *= 0.5;
Instigator.Velocity.y *= 0.5;
}
|
||||
}
|
||||
if (!AllowFire() && HoldTime ~= 0)
return;
|
||||
if (MaxHoldTime > 0.0)
HoldTime = FMin(HoldTime, MaxHoldTime);
|
||||
// server
|
||||
if (Weapon.Role == ROLE_Authority)
|
||||
{
Charge();
|
||||
DoFireEffect();
HoldTime = 0; // if bot decides to stop firing, HoldTime must be reset first
if ( (Instigator == none) || (Instigator.Controller == none) )
return;
|
||||
if ( AIController(Instigator.Controller) != none )
AIController(Instigator.Controller).WeaponFireAgain(BotRefireRate, true);
|
||||
Instigator.DeactivateSpawnProtection();
|
||||
}
|
||||
// client
|
||||
if (Instigator.IsLocallyControlled())
|
||||
{
ShakeView();
PlayFiring();
FlashMuzzleFlash();
StartMuzzleSmoke();
|
||||
}
|
||||
else // server
|
||||
{
ServerPlayFiring();
|
||||
}
|
||||
Weapon.IncrementFlashCount(ThisModeNum);
|
||||
// set the next firing time. must be careful here so client and server do not get out of sync
|
||||
if (bFireOnRelease)
|
||||
{
if (bIsFiring)
NextFireTime += MaxHoldTime + FireRate;
else
NextFireTime = Level.TimeSeconds + FireRate;
|
||||
}
|
||||
else
|
||||
{
NextFireTime += FireRate;
NextFireTime = FMax(NextFireTime, Level.TimeSeconds);
|
||||
}
|
||||
Load = AmmoPerFire;
|
||||
HoldTime = 0;
|
||||
AmmoInCharge = 0;
|
||||
if (Instigator.PendingWeapon != Weapon && Instigator.PendingWeapon != none)
|
||||
{
bIsFiring = false;
Weapon.PutDown();
|
||||
}
|
||||
// client
|
||||
if (Instigator.IsLocallyControlled())
|
||||
{
HandleRecoil(Rec);
|
||||
}
|
||||
}
|
||||
*/
|
||||
defaultproperties
|
||||
{
WeakProjectileClass=Class'NicePack.NiceHuskGunProjectile_Weak'
StrongProjectileClass=Class'NicePack.NiceHuskGunProjectile_Strong'
AmmoClass=Class'NicePack.NiceHuskGunAmmo'
ProjectileClass=Class'NicePack.NiceHuskGunProjectile'
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceHuskGunPickup extends ScrnHuskGunPickup;
|
||||
defaultproperties
|
||||
{
Weight=8.000000
ItemName="Husk Gun / Napalm Launcher NW"
ItemShortName="Husk Gun NW"
InventoryType=Class'NicePack.NiceHuskGun'
|
||||
}
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
class NiceHuskGunProjectile extends ScrnHuskGunProjectile;
|
||||
simulated function ProcessTouch(Actor Other, Vector HitLocation)
|
||||
{
|
||||
local vector X;
|
||||
local Vector TempHitLocation, HitNormal;
|
||||
local array<int> HitPoints;
|
||||
local KFPawn HitPawn;
|
||||
// Don't let it hit this player, or blow up on another player
|
||||
if ( Other == none || Other == Instigator || Other.Base == Instigator )
return;
|
||||
// Don't collide with bullet whip attachments
|
||||
if( KFBulletWhipAttachment(Other) != none )
|
||||
{
return;
|
||||
}
|
||||
// Don't allow hits on poeple on the same team
|
||||
if( KFHumanPawn(Other) != none && Instigator != none
&& KFHumanPawn(Other).PlayerReplicationInfo.Team.TeamIndex == Instigator.PlayerReplicationInfo.Team.TeamIndex )
|
||||
{
return;
|
||||
}
|
||||
if( !bDud )
|
||||
{
Explode(HitLocation,Normal(HitLocation-Other.Location));
|
||||
}
|
||||
// Use the instigator's location if it exists. This fixes issues with
|
||||
// the original location of the projectile being really far away from
|
||||
// the real Origloc due to it taking a couple of milliseconds to
|
||||
// replicate the location to the client and the first replicated location has
|
||||
// already moved quite a bit.
|
||||
if( Instigator != none )
|
||||
{
OrigLoc = Instigator.Location;
|
||||
}
|
||||
X = Vector(Rotation);
|
||||
if( Role == ROLE_Authority )
|
||||
{
if( ROBulletWhipAttachment(Other) != none )
{
if(!Other.Base.bDeleteMe)
{
Other = Instigator.HitPointTrace(TempHitLocation, HitNormal, HitLocation + (200 * X), HitPoints, HitLocation,, 1);
|
||||
if( Other == none || HitPoints.Length == 0 )
return;
|
||||
HitPawn = KFPawn(Other);
|
||||
if (Role == ROLE_Authority)
{
if ( HitPawn != none )
{
// Hit detection debugging
/*log("Bullet hit "$HitPawn.PlayerReplicationInfo.PlayerName);
HitPawn.HitStart = HitLocation;
HitPawn.HitEnd = HitLocation + (65535 * X);*/
|
||||
if( !HitPawn.bDeleteMe )
HitPawn.ProcessLocationalDamage(ImpactDamage, Instigator, TempHitLocation, MomentumTransfer * Normal(Velocity), ImpactDamageType,HitPoints);
|
||||
// Hit detection debugging
//if( Level.NetMode == NM_Standalone)
// HitPawn.DrawBoneLocation();
}
}
}
}
else
{
if (Pawn(Other) != none && Pawn(Other).IsHeadShot(HitLocation, X, 1.0))
{
Pawn(Other).TakeDamage(ImpactDamage * HeadShotDamageMult, Instigator, HitLocation, MomentumTransfer * Normal(Velocity), ImpactDamageType);
}
else
{
Other.TakeDamage(ImpactDamage, Instigator, HitLocation, MomentumTransfer * Normal(Velocity), ImpactDamageType);
}
}
|
||||
}
|
||||
}
|
||||
// Overrided to not use alternate burning mechanism
|
||||
simulated function HurtRadius( float DamageAmount, float DamageRadius, class<DamageType> DamageType, float Momentum, vector HitLocation )
|
||||
{
|
||||
local actor Victims;
|
||||
local float damageScale, dist;
|
||||
local vector dirs;
|
||||
local int NumKilled;
|
||||
local Pawn P;
|
||||
local KFMonster KFMonsterVictim;
|
||||
local KFPawn KFP;
|
||||
local array<Pawn> CheckedPawns;
|
||||
local int i;
|
||||
local bool bAlreadyChecked;
|
||||
//local int OldHealth;
|
||||
if ( bHurtEntry )
return;
|
||||
bHurtEntry = true;
|
||||
foreach CollidingActors (class 'Actor', Victims, DamageRadius, HitLocation) {
// null pawn variables here just to be sure they didn't left from previous iteration
// and waste another day of my life to looking for this fucking bug -- PooSH /totallyPissedOff!!!
P = none;
KFMonsterVictim = none;
KFP = none;
if(Victims == none)
continue;
// don't let blast damage affect fluid - VisibleCollisingActors doesn't really work for them - jag
if( (Victims != self) && (Victims != Instigator) &&(Hurtwall != Victims)
&& (Victims.Role == ROLE_Authority) && !Victims.IsA('FluidSurfaceInfo')
&& ExtendedZCollision(Victims)==none && KFBulletWhipAttachment(Victims)==none )
{
dirs = Victims.Location - HitLocation;
dist = FMax(1,VSize(dirs));
dirs = dirs/dist;
damageScale = 1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius);
if ( Instigator == none || Instigator.Controller == none )
Victims.SetDelayedDamageInstigatorController( InstigatorController );
if ( Victims == LastTouched )
LastTouched = none;
|
||||
P = Pawn(Victims);
|
||||
if( P != none ) {
for (i = 0; i < CheckedPawns.Length; i++) {
if (CheckedPawns[i] == P) {
bAlreadyChecked = true;
break;
}
}
|
||||
if( bAlreadyChecked )
{
bAlreadyChecked = false;
P = none;
continue;
}
|
||||
if( KFMonsterVictim != none && KFMonsterVictim.Health <= 0 ) {
KFMonsterVictim = none;
}
|
||||
KFMonsterVictim = KFMonster(Victims);
KFP = KFPawn(Victims);
|
||||
if( KFMonsterVictim != none )
damageScale *= KFMonsterVictim.GetExposureTo(HitLocation);
else if( KFP != none )
damageScale *= KFP.GetExposureTo(HitLocation);
|
||||
CheckedPawns[CheckedPawns.Length] = P;
|
||||
if ( damageScale <= 0)
continue;
}
|
||||
Victims.TakeDamage
(
damageScale * DamageAmount,
Instigator,
Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dirs,
(damageScale * Momentum * dirs),
DamageType
);
|
||||
if( Role == ROLE_Authority && KFMonsterVictim != none && KFMonsterVictim.Health <= 0 )
{
NumKilled++;
}
}
|
||||
}
|
||||
if( Role == ROLE_Authority )
|
||||
{
if( NumKilled >= 4 )
{
KFGameType(Level.Game).DramaticEvent(0.05);
}
else if( NumKilled >= 2 )
{
KFGameType(Level.Game).DramaticEvent(0.03);
}
|
||||
}
|
||||
bHurtEntry = false;
|
||||
}
|
||||
defaultproperties
|
||||
{
HeadShotDamageMult=1.500000
ImpactDamageType=Class'NicePack.NiceDamTypeHuskGunProjectileImpact'
ImpactDamage=50
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
class NiceHuskGunProjectile_Alt extends NiceHuskGunProjectile_Strong;
|
||||
/*
|
||||
//can't be destroyed by Siren's scream
|
||||
//Explode only by heavy explosive damage
|
||||
function TakeDamage( int Damage, Pawn InstigatedBy, Vector Hitlocation, Vector Momentum, class<DamageType> damageType, optional int HitIndex)
|
||||
{
|
||||
if ( !bDud && !bHasExploded && Damage >= 100 && class<KFWeaponDamageType>(damageType) != none
&& class<KFWeaponDamageType>(damageType).default.bIsExplosive ) {
Explode(HitLocation, vect(0,0,0));
|
||||
}
|
||||
}
|
||||
*/
|
||||
/*
|
||||
simulated function float MosterDamageMult( KFMonster Victim )
|
||||
{
|
||||
float mult;
|
||||
mult = super.MosterDamageMult();
|
||||
// prevent big monsters from 1-shot be killed by hitting all projectiles
|
||||
if ( KFMonsterVictim.bBurnified && KFMonsterVictim.default.Health >= 1000 )
mult *= 0.5;
|
||||
return mult;
|
||||
}
|
||||
*/
|
||||
/*
|
||||
// copy-pasted with deletion of impact damage
|
||||
simulated function ProcessTouch(Actor Other, Vector HitLocation)
|
||||
{
|
||||
// Don't let it hit this player, or blow up on another player
|
||||
if ( Other == none || Other == Instigator || Other.Base == Instigator )
return;
|
||||
// Don't collide with bullet whip attachments
|
||||
if( ROBulletWhipAttachment(Other) != none )
|
||||
{
return;
|
||||
}
|
||||
// Don't allow hits on people on the same team
|
||||
//if( KFHumanPawn(Other) != none && Instigator != none
|
||||
// && KFHumanPawn(Other).PlayerReplicationInfo.Team.TeamIndex == Instigator.PlayerReplicationInfo.Team.TeamIndex )
|
||||
//{
|
||||
// return;
|
||||
//}
|
||||
if( !bDud && !bHasExploded )
|
||||
{
Explode(HitLocation,Normal(HitLocation-Other.Location));
|
||||
}
|
||||
}*/
|
||||
defaultproperties
|
||||
{
HeadShotDamageMult=1.000000
ExplosionSoundVolume=1.000000
ImpactDamageType=Class'NicePack.NiceDamTypeHuskGun_Alt'
ImpactDamage=0
AmbientVolumeScale=1.000000
Speed=750.000000
MaxSpeed=1000.000000
Damage=35.000000
DamageRadius=500.000000
MyDamageType=Class'NicePack.NiceDamTypeHuskGun_Alt'
LifeSpan=5.000000
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceHuskGunProjectile_Strong extends NiceHuskGunProjectile;
|
||||
defaultproperties
|
||||
{
ExplosionEmitter=Class'KFMod.FlameImpact_Strong'
FlameTrailEmitterClass=Class'KFMod.FlameThrowerHusk_Strong'
ExplosionSoundVolume=2.000000
ExplosionDecal=Class'KFMod.FlameThrowerBurnMark_Large'
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceHuskGunProjectile_Weak extends NiceHuskGunProjectile;
|
||||
defaultproperties
|
||||
{
ExplosionEmitter=Class'KFMod.FlameImpact_Weak'
FlameTrailEmitterClass=Class'KFMod.FlameThrowerHusk_Weak'
ExplosionSoundVolume=1.250000
ExplosionDecal=Class'KFMod.FlameThrowerBurnMark_Small'
|
||||
}
|
||||
5
sources/Weapons/Playable/Incendiary/M79Inc/NiceM79Inc.uc
Normal file
5
sources/Weapons/Playable/Incendiary/M79Inc/NiceM79Inc.uc
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
// Incendiary M79
|
||||
class NiceM79Inc extends ScrnM79Inc;
|
||||
defaultproperties
|
||||
{
FireModeClass(0)=Class'NicePack.NiceM79IncFire'
PickupClass=Class'NicePack.NiceM79IncPickup'
ItemName="M79 Incendiary NW"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceM79IncAmmo extends ScrnM79IncAmmo;
|
||||
defaultproperties
|
||||
{
PickupClass=Class'NicePack.NiceM79IncAmmoPickup'
ItemName="M79 Incendiary Grenades NW"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceM79IncAmmoPickup extends ScrnM79IncAmmoPickup;
|
||||
defaultproperties
|
||||
{
InventoryType=Class'NicePack.NiceM79IncAmmo'
PickupMessage="M79 Incendiary Grenades NW"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceM79IncFire extends ScrnM79IncFire;
|
||||
defaultproperties
|
||||
{
AmmoClass=Class'NicePack.NiceM79IncAmmo'
ProjectileClass=Class'NicePack.NiceM79IncGrenadeProjectile'
|
||||
}
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
class NiceM79IncGrenadeProjectile extends ScrnM79IncGrenadeProjectile;
|
||||
#exec OBJ LOAD FILE=KF_GrenadeSnd.uax
|
||||
simulated function HurtRadius( float DamageAmount, float DamageRadius, class<DamageType> DamageType, float Momentum, vector HitLocation )
|
||||
{
|
||||
local actor Victims;
|
||||
local float damageScale, dist;
|
||||
local vector dirs;
|
||||
local int NumKilled;
|
||||
local KFMonster KFMonsterVictim;
|
||||
local Pawn P;
|
||||
local KFPawn KFP;
|
||||
local array<Pawn> CheckedPawns;
|
||||
local int i;
|
||||
local bool bAlreadyChecked;
|
||||
|
||||
if ( bHurtEntry )
return;
|
||||
bHurtEntry = true;
|
||||
foreach CollidingActors (class 'Actor', Victims, DamageRadius, HitLocation)
|
||||
{
// null pawn variables here just to be sure they didn't left from previous iteration
// and waste another day of my life to looking for this fucking bug -- PooSH /totallyPissedOff!!!
P = none;
KFMonsterVictim = none;
KFP = none;
// don't let blast damage affect fluid - VisibleCollisingActors doesn't really work for them - jag
if( (Victims != self) && (Hurtwall != Victims) && (Victims.Role == ROLE_Authority) && !Victims.IsA('FluidSurfaceInfo')
&& ExtendedZCollision(Victims)==none )
{
dirs = Victims.Location - HitLocation;
dist = FMax(1,VSize(dirs));
dirs = dirs/dist;
damageScale = 1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius);
if ( Instigator == none || Instigator.Controller == none )
Victims.SetDelayedDamageInstigatorController( InstigatorController );
if ( Victims == LastTouched )
LastTouched = none;
|
||||
P = Pawn(Victims);
|
||||
if( P != none )
{
for (i = 0; i < CheckedPawns.Length; i++)
{
if (CheckedPawns[i] == P)
{
bAlreadyChecked = true;
break;
}
}
|
||||
if( bAlreadyChecked )
{
bAlreadyChecked = false;
P = none; // and if you forget to re-null it somewhere?!! and then look for a bug during 2 days?!! Damned Tripwire, I hate you so much
continue;
}
|
||||
KFMonsterVictim = KFMonster(Victims);
|
||||
if( KFMonsterVictim != none && KFMonsterVictim.Health <= 0 )
{
KFMonsterVictim = none;
}
|
||||
KFP = KFPawn(Victims);
|
||||
if( KFMonsterVictim != none )
{
damageScale *= KFMonsterVictim.GetExposureTo(HitLocation/*Location + 15 * -Normal(PhysicsVolume.Gravity)*/);
}
else if( KFP != none )
{
damageScale *= KFP.GetExposureTo(HitLocation/*Location + 15 * -Normal(PhysicsVolume.Gravity)*/);
}
|
||||
CheckedPawns[CheckedPawns.Length] = P;
|
||||
if ( damageScale <= 0)
{
P = none;
continue;
}
else
{
//Victims = P;
P = none;
}
}
|
||||
Victims.TakeDamage
(
damageScale * DamageAmount,
Instigator,
Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dirs,
(damageScale * Momentum * dirs),
DamageType
);
if (Vehicle(Victims) != none && Vehicle(Victims).Health > 0)
Vehicle(Victims).DriverRadiusDamage(DamageAmount, DamageRadius, InstigatorController, DamageType, Momentum, HitLocation);
|
||||
if( Role == ROLE_Authority && KFMonsterVictim != none && KFMonsterVictim.Health <= 0 )
{
NumKilled++;
}
}
|
||||
}
|
||||
/*
|
||||
if ( (LastTouched != none) && (LastTouched != self) && (LastTouched.Role == ROLE_Authority) && !LastTouched.IsA('FluidSurfaceInfo') )
|
||||
{
Victims = LastTouched;
LastTouched = none;
dirs = Victims.Location - HitLocation;
dist = FMax(1,VSize(dirs));
dirs = dirs/dist;
damageScale = FMax(Victims.CollisionRadius/(Victims.CollisionRadius + Victims.CollisionHeight),1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius));
if ( Instigator == none || Instigator.Controller == none )
Victims.SetDelayedDamageInstigatorController(InstigatorController);
Victims.TakeDamage
(
damageScale * DamageAmount,
Instigator,
Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dirs,
(damageScale * Momentum * dirs),
DamageType
);
if (Vehicle(Victims) != none && Vehicle(Victims).Health > 0)
Vehicle(Victims).DriverRadiusDamage(DamageAmount, DamageRadius, InstigatorController, DamageType, Momentum, HitLocation);
|
||||
}
|
||||
*/
|
||||
if( Role == ROLE_Authority )
|
||||
{
if( NumKilled >= 4 )
{
KFGameType(Level.Game).DramaticEvent(0.05);
}
else if( NumKilled >= 2 )
{
KFGameType(Level.Game).DramaticEvent(0.03);
}
|
||||
}
|
||||
bHurtEntry = false;
|
||||
}
|
||||
|
||||
simulated function ProcessTouch(Actor Other, Vector HitLocation)
|
||||
{
|
||||
// Don't let it hit this player, or blow up on another player
|
||||
if ( Other == none || Other == Instigator || Other.Base == Instigator )
return;
|
||||
// Don't collide with bullet whip attachments
|
||||
if( KFBulletWhipAttachment(Other) != none )
|
||||
{
return;
|
||||
}
|
||||
// Don't allow hits on people on the same team - except hardcore mode
|
||||
if( !class'ScrnBalance'.default.Mut.bHardcore && KFHumanPawn(Other) != none && Instigator != none
&& KFHumanPawn(Other).PlayerReplicationInfo.Team.TeamIndex == Instigator.PlayerReplicationInfo.Team.TeamIndex )
|
||||
{
return;
|
||||
}
|
||||
// Use the instigator's location if it exists. This fixes issues with
|
||||
// the original location of the projectile being really far away from
|
||||
// the real Origloc due to it taking a couple of milliseconds to
|
||||
// replicate the location to the client and the first replicated location has
|
||||
// already moved quite a bit.
|
||||
if( Instigator != none )
|
||||
{
OrigLoc = Instigator.Location;
|
||||
}
|
||||
if( !bDud && ((VSizeSquared(Location - OrigLoc) < ArmDistSquared) || OrigLoc == vect(0,0,0)) )
|
||||
{
if( Role == ROLE_Authority )
{
AmbientSound=none;
PlaySound(Sound'ProjectileSounds.PTRD_deflect04',,2.0);
Other.TakeDamage( ImpactDamage, Instigator, HitLocation, Normal(Velocity), ImpactDamageType );
}
bDud = true;
Velocity = vect(0,0,0);
LifeSpan=1.0;
SetPhysics(PHYS_Falling);
|
||||
}
|
||||
if( !bDud )
|
||||
{
Explode(HitLocation,Normal(HitLocation-Other.Location));
|
||||
}
|
||||
}
|
||||
defaultproperties
|
||||
{
MyDamageType=Class'NicePack.NiceDamTypeFlameNade'
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceM79IncPickup extends ScrnM79IncPickup;
|
||||
defaultproperties
|
||||
{
ItemName="M79 Incendiary NW"
ItemShortName="M79 Inc NW"
InventoryType=Class'NicePack.NiceM79Inc'
PickupMessage="You got the M79 Incendiary Grenade Launcher NW."
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
class NiceDamTypeMAC10Z extends NiceDamTypeFire
|
||||
abstract;
|
||||
defaultproperties
|
||||
{
heatPart=0.150000
bSniperWeapon=True
bCheckForHeadShots=True
WeaponClass=Class'NicePack.NiceMAC10Z'
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
class NiceMAC10Ammo extends NiceAmmo;
|
||||
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
|
||||
defaultproperties
|
||||
{
WeaponPickupClass=Class'NicePack.NiceMAC10Pickup'
AmmoPickupAmount=30
MaxAmmo=300
InitialAmount=75
PickupClass=Class'NicePack.NiceMAC10AmmoPickup'
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
IconCoords=(X1=336,Y1=82,X2=382,Y2=125)
ItemName="MAC-10 bullets"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceMAC10AmmoPickup extends NiceAmmoPickup;
|
||||
defaultproperties
|
||||
{
AmmoAmount=30
InventoryType=Class'NicePack.NiceMAC10Ammo'
PickupMessage="Rounds .45 cal"
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceMAC10Fire extends NiceHighROFFire;
|
||||
defaultproperties
|
||||
{
FireEndSoundRef="KF_MAC10MPSnd.MAC10_Fire_Loop_End_M"
FireEndStereoSoundRef="KF_MAC10MPSnd.MAC10_Fire_Loop_End_S"
AmbientFireSoundRef="KF_MAC10MPSnd.MAC10_Fire_Loop"
ProjectileSpeed=18300.000000
RecoilRate=0.050000
maxVerticalRecoilAngle=150
maxHorizontalRecoilAngle=100
RecoilVelocityScale=1.500000
ShellEjectClass=Class'ROEffects.KFShellEjectMac'
ShellEjectBoneName="Mac11_Ejector"
bRandomPitchFireSound=False
FireSoundRef="KF_MAC10MPSnd.MAC10_Silenced_Fire"
StereoFireSoundRef="KF_MAC10MPSnd.MAC10_Silenced_FireST"
NoAmmoSoundRef="KF_AK47Snd.AK47_DryFire"
DamageType=Class'NicePack.NiceDamTypeMAC10Z'
DamageMin=36
DamageMax=36
Momentum=6500.000000
FireRate=0.052000
AmmoClass=Class'NicePack.NiceMAC10Ammo'
ShakeRotMag=(X=35.000000,Y=35.000000,Z=200.000000)
ShakeRotRate=(X=8000.000000,Y=8000.000000,Z=8000.000000)
ShakeRotTime=3.000000
ShakeOffsetMag=(X=4.500000,Y=2.800000,Z=5.500000)
ShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000)
ShakeOffsetTime=1.250000
BotRefireRate=0.990000
FlashEmitterClass=Class'ROEffects.MuzzleFlash1stSTG'
aimerror=35.000000
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceMAC10Pickup extends NiceWeaponPickup;
|
||||
defaultproperties
|
||||
{
bBackupWeapon=True
crossPerkIndecies(0)=2
Weight=3.000000
cost=200
AmmoCost=10
BuyClipSize=30
PowerValue=30
SpeedValue=98
RangeValue=40
Description="A highly compact machine pistol. Can be fired in semi or full auto."
ItemName="MAC-10"
ItemShortName="MAC-10"
AmmoItemName=".45 Cal"
AmmoMesh=StaticMesh'KillingFloorStatics.L85Ammo'
CorrespondingPerkIndex=5
EquipmentCategoryID=3
InventoryType=Class'NicePack.NiceMAC10Z'
PickupMessage="You got the MAC-10"
PickupSound=Sound'KF_MAC10MPSnd.MAC10_Pickup'
PickupForce="AssaultRiflePickup"
StaticMesh=StaticMesh'KF_pickups2_Trip.Supers.MAC10_Pickup'
CollisionRadius=25.000000
CollisionHeight=5.000000
|
||||
}
|
||||
9
sources/Weapons/Playable/Incendiary/MAC10/NiceMAC10Z.uc
Normal file
9
sources/Weapons/Playable/Incendiary/MAC10/NiceMAC10Z.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class NiceMAC10Z extends NiceWeapon;
|
||||
#exec OBJ LOAD FILE=KillingFloorHUD.utx
|
||||
#exec OBJ LOAD FILE=Inf_Weapons_Foley.uax
|
||||
simulated function AltFire(float F){
|
||||
DoToggle();
|
||||
}
|
||||
defaultproperties
|
||||
{
reloadPreEndFrame=0.115000
reloadEndFrame=0.538000
reloadChargeEndFrame=0.750000
reloadMagStartFrame=0.288000
reloadChargeStartFrame=0.644000
MagazineBone="Mac11_Mag"
MagCapacity=30
ReloadRate=3.000000
ReloadAnim="Reload"
ReloadAnimRate=1.000000
FlashBoneName="tipS"
WeaponReloadAnim="Reload_Mac10"
Weight=3.000000
bHasAimingMode=True
IdleAimAnim="Idle_Iron"
StandardDisplayFOV=60.000000
SleeveNum=2
TraderInfoTexture=Texture'KillingFloor2HUD.Trader_Weapon_Icons.Trader_Mac_10'
bIsTier2Weapon=True
MeshRef="KF_Weapons2_Trip.Mac10_Trip"
SkinRefs(0)="KF_Weapons2_Trip_T.Special.MAC10_cmb"
SkinRefs(1)="KF_Weapons2_Trip_T.Special.MAC10_SIL_cmb"
SelectSoundRef="KF_MAC10MPSnd.MAC10_Select"
HudImageRef="KillingFloor2HUD.WeaponSelect.Mac_10_Unselected"
SelectedHudImageRef="KillingFloor2HUD.WeaponSelect.Mac_10"
PlayerIronSightFOV=65.000000
ZoomedDisplayFOV=32.000000
FireModeClass(0)=Class'NicePack.NiceMAC10Fire'
FireModeClass(1)=Class'KFMod.NoFire'
PutDownAnim="PutDown"
SelectForce="SwitchToAssaultRifle"
AIRating=0.550000
CurrentRating=0.550000
bShowChargingBar=True
Description="A highly compact machine pistol. Can be fired in semi or full auto."
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
DisplayFOV=55.000000
Priority=75
CustomCrosshair=11
CustomCrossHairTextureName="Crosshairs.HUD.Crosshair_Cross5"
InventoryGroup=3
GroupOffset=6
PickupClass=Class'NicePack.NiceMAC10Pickup'
PlayerViewOffset=(X=25.000000,Y=20.000000,Z=-6.000000)
BobDamping=6.000000
AttachmentClass=Class'KFMod.MAC10Attachment'
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
ItemName="MAC10"
TransientSoundVolume=1.250000
|
||||
}
|
||||
15
sources/Weapons/Playable/Incendiary/Protecta/NiceProtecta.uc
Normal file
15
sources/Weapons/Playable/Incendiary/Protecta/NiceProtecta.uc
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
class NiceProtecta extends Protecta;
|
||||
// Use alt fire to switch fire modes
|
||||
simulated function AltFire(float F)
|
||||
{
|
||||
if(ReadyToFire(0))
|
||||
{
DoToggle();
|
||||
}
|
||||
}
|
||||
exec function SwitchModes()
|
||||
{
|
||||
DoToggle();
|
||||
}
|
||||
defaultproperties
|
||||
{
FireModeClass(0)=Class'NicePack.NiceProtectaFire'
PickupClass=Class'NicePack.NiceProtectaPickup'
ItemName="Flare Shotgun 'Protecta' NW"
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceProtectaAmmo extends ProtectaAmmo;
|
||||
defaultproperties
|
||||
{
PickupClass=Class'NicePack.NiceProtectaAmmoPickup'
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceProtectaAmmoPickup extends ProtectaAmmoPickup;
|
||||
defaultproperties
|
||||
{
InventoryType=Class'NicePack.NiceProtectaAmmo'
|
||||
}
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
class NiceProtectaFire extends ProtectaFire;
|
||||
simulated function bool AllowFire()
|
||||
{
|
||||
if( KFWeapon(Weapon).bIsReloading && KFWeapon(Weapon).MagAmmoRemaining < 1)
return false;
|
||||
if(KFPawn(Instigator).SecondaryItem!=none)
return false;
|
||||
if( KFPawn(Instigator).bThrowingNade )
return false;
|
||||
if( Level.TimeSeconds - LastClickTime>FireRate )
|
||||
{
LastClickTime = Level.TimeSeconds;
|
||||
}
|
||||
if( KFWeapon(Weapon).MagAmmoRemaining<1 )
return false;
|
||||
return super(WeaponFire).AllowFire();
|
||||
}
|
||||
defaultproperties
|
||||
{
maxVerticalRecoilAngle=1000
maxHorizontalRecoilAngle=300
AmmoClass=Class'NicePack.NiceProtectaAmmo'
ProjectileClass=Class'NicePack.NiceProtectaFlare'
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceProtectaFlare extends NiceFlareRevolverProjectile;
|
||||
defaultproperties
|
||||
{
Speed=4500.000000
MaxSpeed=5000.000000
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceProtectaPickup extends ProtectaPickup;
|
||||
defaultproperties
|
||||
{
ItemName="Protecta NW"
ItemShortName="Protecta NW"
InventoryType=Class'NicePack.NiceProtecta'
PickupMessage="You got the Protecta NW"
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
class NiceDamTypeThompsonInc extends NiceDamTypeFire
|
||||
abstract;
|
||||
defaultproperties
|
||||
{
heatPart=0.300000
bCheckForHeadShots=True
WeaponClass=Class'NicePack.NiceThompsonInc'
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
class NiceThompsonInc extends ScrnThompsonInc
|
||||
config(user);
|
||||
defaultproperties
|
||||
{
FireModeClass(0)=Class'NicePack.NiceThompsonIncFire'
PickupClass=Class'NicePack.NiceThompsonIncPickup'
ItemName="Incendiary Tommy Gun NW"
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
class NiceThompsonIncAmmo extends ScrnThompsonIncAmmo;
|
||||
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
|
||||
defaultproperties
|
||||
{
PickupClass=Class'NicePack.NiceThompsonIncAmmoPickup'
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceThompsonIncAmmoPickup extends ScrnThompsonIncAmmoPickup;
|
||||
defaultproperties
|
||||
{
InventoryType=Class'NicePack.NiceThompsonIncAmmo'
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
class NiceThompsonIncFire extends ScrnThompsonIncFire;
|
||||
// Overwritten to not switch damage types for the firebug
|
||||
function DoTrace(Vector Start, Rotator Dir)
|
||||
{
|
||||
local Vector X,Y,Z, End, HitLocation, HitNormal, ArcEnd;
|
||||
local Actor Other;
|
||||
local KFWeaponAttachment WeapAttach;
|
||||
local array<int> HitPoints;
|
||||
local KFPawn HitPawn;
|
||||
MaxRange();
|
||||
Weapon.GetViewAxes(X, Y, Z);
|
||||
if ( Weapon.WeaponCentered() )
|
||||
{
ArcEnd = (Instigator.Location + Weapon.EffectOffset.X * X + 1.5 * Weapon.EffectOffset.Z * Z);
|
||||
}
|
||||
else
|
||||
{
ArcEnd = (Instigator.Location + Instigator.CalcDrawOffset(Weapon) + Weapon.EffectOffset.X * X + Weapon.Hand * Weapon.EffectOffset.Y * Y +
Weapon.EffectOffset.Z * Z);
|
||||
}
|
||||
X = Vector(Dir);
|
||||
End = Start + TraceRange * X;
|
||||
Other = Instigator.HitPointTrace(HitLocation, HitNormal, End, HitPoints, Start,, 1);
|
||||
if ( Other != none && Other != Instigator && Other.Base != Instigator )
|
||||
{
WeapAttach = KFWeaponAttachment(Weapon.ThirdPersonActor);
|
||||
if ( !Other.bWorldGeometry )
{
// Update hit effect except for pawns
if ( !Other.IsA('Pawn') && !Other.IsA('HitScanBlockingVolume') &&
!Other.IsA('ExtendedZCollision') )
{
if( WeapAttach!=none )
{
WeapAttach.UpdateHit(Other, HitLocation, HitNormal);
}
}
|
||||
HitPawn = KFPawn(Other);
|
||||
if ( HitPawn != none )
{
if ( !HitPawn.bDeleteMe )
{
HitPawn.ProcessLocationalDamage(DamageMax, Instigator, HitLocation, Momentum * X, DamageType, HitPoints);
}
}
else
Other.TakeDamage(DamageMax, Instigator, HitLocation, Momentum * X, DamageType);
}
else
{
HitLocation = HitLocation + 2.0 * HitNormal;
|
||||
if ( WeapAttach != none )
{
WeapAttach.UpdateHit(Other,HitLocation,HitNormal);
}
}
|
||||
}
|
||||
else
|
||||
{
HitLocation = End;
HitNormal = Normal(Start - End);
|
||||
}
|
||||
}
|
||||
defaultproperties
|
||||
{
DamageType=Class'NicePack.NiceDamTypeThompsonInc'
AmmoClass=Class'NicePack.NiceThompsonIncAmmo'
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceThompsonIncPickup extends ScrnThompsonIncPickup;
|
||||
defaultproperties
|
||||
{
ItemName="Tommy Gun Incendiary NW"
ItemShortName="Tommy Gun Inc. NW"
InventoryType=Class'NicePack.NiceThompsonInc'
PickupMessage="You got the Incendiary Tommy Gun NW"
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
class NiceDamTypeTrenchgun extends NiceDamTypeFire
|
||||
abstract;
|
||||
defaultproperties
|
||||
{
heatPart=0.400000
MaxPenetrations=3
bIsPowerWeapon=True
bCheckForHeadShots=True
WeaponClass=Class'NicePack.NiceTrenchgun'
DeathString="%k killed %o (Trenchgun)."
FemaleSuicide="%o shot herself in the foot."
MaleSuicide="%o shot himself in the foot."
bRagdollBullet=True
bBulletHit=True
FlashFog=(X=600.000000)
KDamageImpulse=10000.000000
KDeathVel=300.000000
KDeathUpKick=100.000000
VehicleDamageScaling=0.700000
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
class NiceTrenchgun extends NiceWeapon;
|
||||
simulated function fillSubReloadStages(){
|
||||
// Loading 6 shells during 143 frames tops, with first shell loaded at frame 14, with 18 frames between load moments
|
||||
generateReloadStages(6, 143, 14, 18);
|
||||
}
|
||||
defaultproperties
|
||||
{
reloadType=RTYPE_SINGLE
ForceZoomOutOnFireTime=0.010000
MagCapacity=6
ReloadRate=0.700000
ReloadAnim="Reload"
ReloadAnimRate=1.000000
bHoldToReload=True
WeaponReloadAnim="Reload_Shotgun"
Weight=8.000000
bHasAimingMode=True
IdleAimAnim="Idle_Iron"
StandardDisplayFOV=65.000000
TraderInfoTexture=Texture'KillingFloor2HUD.Trader_Weapon_Icons.Trader_TrenchGun'
bIsTier2Weapon=True
MeshRef="KF_Wep_TrenchGun.TrenchGun"
SkinRefs(0)="KF_Weapons8_Trip_T.Weapons.Trenchgun_cmb"
SelectSoundRef="KF_PumpSGSnd.SG_Select"
HudImageRef="KillingFloor2HUD.WeaponSelect.TrenchGun_unselected"
SelectedHudImageRef="KillingFloor2HUD.WeaponSelect.TrenchGun"
PlayerIronSightFOV=70.000000
ZoomedDisplayFOV=50.000000
FireModeClass(0)=Class'NicePack.NiceTrenchgunFire'
FireModeClass(1)=Class'KFMod.NoFire'
PutDownAnim="PutDown"
AIRating=0.600000
CurrentRating=0.600000
bShowChargingBar=True
Description="A WWII-era trench shotgun in 12 gauge, loaded with Dragon's Breath flame rounds. Toasty."
DisplayFOV=65.000000
Priority=142
InventoryGroup=3
GroupOffset=14
PickupClass=Class'NicePack.NiceTrenchgunPickup'
PlayerViewOffset=(X=20.000000,Y=18.750000,Z=-8.000000)
BobDamping=7.000000
AttachmentClass=Class'KFMod.TrenchgunAttachment'
IconCoords=(X1=169,Y1=172,X2=245,Y2=208)
ItemName="Dragon's Breath Trenchgun"
TransientSoundVolume=1.000000
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
class NiceTrenchgunAmmo extends NiceAmmo;
|
||||
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
|
||||
defaultproperties
|
||||
{
WeaponPickupClass=Class'NicePack.NiceTrenchgunPickup'
AmmoPickupAmount=6
MaxAmmo=48
InitialAmount=24
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
IconCoords=(X1=451,Y1=445,X2=510,Y2=500)
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceTrenchgunAmmoPickup extends NiceAmmoPickup;
|
||||
defaultproperties
|
||||
{
AmmoAmount=8
InventoryType=Class'NicePack.NiceTrenchgunAmmo'
PickupMessage="Dragon's Breath Shells"
StaticMesh=None
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceTrenchgunFire extends NiceShotgunFire;
|
||||
defaultproperties
|
||||
{
ProjPerFire=14
bRandomPitchFireSound=True
FireSoundRef="KF_ShotgunDragonsBreathSnd.ShotgunDragon_Fire_Single_M"
StereoFireSoundRef="KF_ShotgunDragonsBreathSnd.ShotgunDragon_Fire_Single_S"
DamageType=Class'NicePack.NiceDamTypeTrenchgun'
DamageMax=18
AmmoClass=Class'NicePack.NiceTrenchgunAmmo'
FlashEmitterClass=Class'KFMod.TrenchgunMuzzFlash'
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
class NiceTrenchgunPickup extends NiceWeaponPickup;
|
||||
defaultproperties
|
||||
{
Weight=8.000000
cost=1250
BuyClipSize=6
PowerValue=75
SpeedValue=40
RangeValue=15
Description="A WWII-era trench shotgun in 12 gauge, loaded with Dragon's Breath flame rounds. Toasty."
ItemName="Trenchgun"
ItemShortName="Trenchgun"
AmmoItemName="Dragon's breath shells"
CorrespondingPerkIndex=5
EquipmentCategoryID=2
InventoryType=Class'NicePack.NiceTrenchgun'
PickupMessage="You got the Trenchgun."
PickupSound=Sound'KF_ShotgunDragonsBreathSnd.Handling.TrenchGun_Pump_Back'
PickupForce="AssaultRiflePickup"
StaticMesh=StaticMesh'KF_pickups5_Trip.Rifles.TrenchGun_Pickup'
CollisionRadius=35.000000
CollisionHeight=5.000000
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue