Prepare fixtures
This commit is contained in:
parent
797e5ea192
commit
9c94356263
6021 changed files with 722805 additions and 22 deletions
202
kf_sources/ScrnHTec/Classes/CryoNade.uc
Normal file
202
kf_sources/ScrnHTec/Classes/CryoNade.uc
Normal file
|
|
@ -0,0 +1,202 @@
|
|||
class CryoNade extends Nade;
|
||||
|
||||
#exec OBJ LOAD FILE=KF_GrenadeSnd.uax
|
||||
#exec OBJ LOAD FILE=Inf_WeaponsTwo.uax
|
||||
#exec OBJ LOAD FILE=KF_LAWSnd.uax
|
||||
|
||||
var() int TotalFreezes; // haw many times do freezing
|
||||
var() float FreezeRate; // How often to do Freezeing
|
||||
var transient float NextFreezeTime; // The next time that this nade will Freeze friendlies or hurt enemies
|
||||
|
||||
var() sound ExplosionSound; // The sound of the rocket exploding
|
||||
|
||||
var bool bNeedToPlayEffects; // Whether or not effects have been played yet
|
||||
|
||||
replication
|
||||
{
|
||||
reliable if (Role==ROLE_Authority)
|
||||
bNeedToPlayEffects;
|
||||
}
|
||||
|
||||
simulated function PostNetReceive()
|
||||
{
|
||||
super.PostNetReceive();
|
||||
if( !bHasExploded && bNeedToPlayEffects )
|
||||
{
|
||||
bNeedToPlayEffects = false;
|
||||
Explode(Location, vect(0,0,1));
|
||||
}
|
||||
}
|
||||
|
||||
simulated function Explode(vector HitLocation, vector HitNormal)
|
||||
{
|
||||
bHasExploded = True;
|
||||
BlowUp(HitLocation);
|
||||
|
||||
PlaySound(ExplosionSound,,TransientSoundVolume);
|
||||
|
||||
if( Role == ROLE_Authority )
|
||||
{
|
||||
bNeedToPlayEffects = true;
|
||||
AmbientSound=Sound'Inf_WeaponsTwo.smoke_loop';
|
||||
}
|
||||
|
||||
if ( EffectIsRelevant(Location,false) )
|
||||
{
|
||||
Spawn(Class'CryoNadeCloud',,, HitLocation, rotator(vect(0,0,1)));
|
||||
Spawn(ExplosionDecal,self,,HitLocation, rotator(-HitNormal));
|
||||
if ( Level.DetailMode >= DM_High )
|
||||
Spawn(class'NitroGroundEffect',self,,Location);
|
||||
}
|
||||
}
|
||||
|
||||
function Timer()
|
||||
{
|
||||
if( !bHidden )
|
||||
{
|
||||
if( !bHasExploded )
|
||||
{
|
||||
Explode(Location, vect(0,0,1));
|
||||
}
|
||||
}
|
||||
else if( bDisintegrated )
|
||||
{
|
||||
AmbientSound=none;
|
||||
Destroy();
|
||||
}
|
||||
}
|
||||
|
||||
simulated function BlowUp(vector HitLocation)
|
||||
{
|
||||
DoFreeze(Damage,DamageRadius, MyDamageType, MomentumTransfer, HitLocation);
|
||||
if ( Role == ROLE_Authority )
|
||||
MakeNoise(1.0);
|
||||
}
|
||||
|
||||
function DoFreeze(float DamageAmount, float DamageRadius, class<DamageType> DamageType, float Momentum, vector HitLocation)
|
||||
{
|
||||
local KFMonster KFM;
|
||||
|
||||
if ( bHurtEntry )
|
||||
return;
|
||||
|
||||
bHurtEntry = true;
|
||||
NextFreezeTime = Level.TimeSeconds + FreezeRate;
|
||||
// if( Fear != none )
|
||||
// Fear.StartleBots();
|
||||
|
||||
foreach CollidingActors (class 'KFMonster', KFM, DamageRadius, HitLocation) {
|
||||
if ( KFM.Health <= 0 )
|
||||
continue;
|
||||
if ( Instigator == None || Instigator.Controller == None )
|
||||
KFM.SetDelayedDamageInstigatorController( InstigatorController );
|
||||
KFM.TakeDamage(DamageAmount,Instigator,KFM.Location,vect(0,0,0),DamageType);
|
||||
}
|
||||
|
||||
bHurtEntry = false;
|
||||
}
|
||||
|
||||
function TakeDamage( int Damage, Pawn InstigatedBy, Vector Hitlocation, Vector Momentum, class<DamageType> damageType, optional int HitIndex)
|
||||
{
|
||||
if( damageType == class'SirenScreamDamage')
|
||||
Disintegrate(HitLocation, vect(0,0,1));
|
||||
}
|
||||
|
||||
// Overridden to tweak the handling of the impact sound
|
||||
simulated function HitWall( vector HitNormal, actor Wall )
|
||||
{
|
||||
local Vector VNorm;
|
||||
local PlayerController PC;
|
||||
|
||||
if ( (Pawn(Wall) != None) || (GameObjective(Wall) != None) )
|
||||
{
|
||||
Explode(Location, HitNormal);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!bTimerSet)
|
||||
{
|
||||
SetTimer(ExplodeTimer, false);
|
||||
bTimerSet = true;
|
||||
}
|
||||
|
||||
// Reflect off Wall w/damping
|
||||
VNorm = (Velocity dot HitNormal) * HitNormal;
|
||||
Velocity = -VNorm * DampenFactor + (Velocity - VNorm) * DampenFactorParallel;
|
||||
|
||||
RandSpin(100000);
|
||||
DesiredRotation.Roll = 0;
|
||||
RotationRate.Roll = 0;
|
||||
Speed = VSize(Velocity);
|
||||
|
||||
if ( Speed < 20 )
|
||||
{
|
||||
bBounce = False;
|
||||
PrePivot.Z = -1.5;
|
||||
SetPhysics(PHYS_None);
|
||||
Timer();
|
||||
SetTimer(0.0,False);
|
||||
DesiredRotation = Rotation;
|
||||
DesiredRotation.Roll = 0;
|
||||
DesiredRotation.Pitch = 0;
|
||||
SetRotation(DesiredRotation);
|
||||
|
||||
// if( Fear == none )
|
||||
// {
|
||||
// //(jc) Changed to use MedicNade-specific grenade that's overridden to not make the ringmaster fear it
|
||||
// Fear = Spawn(class'AvoidMarker_MedicNade');
|
||||
// Fear.SetCollisionSize(DamageRadius,DamageRadius);
|
||||
// Fear.StartleBots();
|
||||
// }
|
||||
|
||||
if ( Trail != None )
|
||||
Trail.mRegen = false; // stop the emitter from regenerating
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( (Level.NetMode != NM_DedicatedServer) && (Speed > 50) )
|
||||
PlaySound(ImpactSound, SLOT_Misc );
|
||||
else
|
||||
{
|
||||
bFixedRotationDir = false;
|
||||
bRotateToDesired = true;
|
||||
DesiredRotation.Pitch = 0;
|
||||
RotationRate.Pitch = 50000;
|
||||
}
|
||||
if ( !Level.bDropDetail && (Level.DetailMode != DM_Low) && (Level.TimeSeconds - LastSparkTime > 0.5) && EffectIsRelevant(Location,false) )
|
||||
{
|
||||
PC = Level.GetLocalPlayerController();
|
||||
if ( (PC.ViewTarget != None) && VSize(PC.ViewTarget.Location - Location) < 6000 )
|
||||
Spawn(HitEffectClass,,, Location, Rotator(HitNormal));
|
||||
LastSparkTime = Level.TimeSeconds;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Tick( float DeltaTime )
|
||||
{
|
||||
if( TotalFreezes > 0 && NextFreezeTime > 0 && NextFreezeTime < Level.TimeSeconds ) {
|
||||
TotalFreezes--;
|
||||
DoFreeze(Damage,DamageRadius, MyDamageType, MomentumTransfer, Location);
|
||||
if( TotalFreezes == 0 )
|
||||
AmbientSound=none;
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
TotalFreezes=10
|
||||
FreezeRate=0.500000
|
||||
ExplosionSound=SoundGroup'KF_GrenadeSnd.NadeBase.MedicNade_Explode'
|
||||
Damage=10.000000
|
||||
DamageRadius=175.000000
|
||||
MyDamageType=Class'ScrnHTec.DamTypeCryoNade'
|
||||
ExplosionDecal=Class'ScrnHTec.NitroDecal'
|
||||
StaticMesh=StaticMesh'KF_pickups5_Trip.nades.MedicNade_Pickup'
|
||||
LifeSpan=8.000000
|
||||
DrawScale=1.000000
|
||||
SoundVolume=150
|
||||
SoundRadius=100.000000
|
||||
TransientSoundVolume=2.000000
|
||||
TransientSoundRadius=200.000000
|
||||
}
|
||||
62
kf_sources/ScrnHTec/Classes/CryoNadeCloud.uc
Normal file
62
kf_sources/ScrnHTec/Classes/CryoNadeCloud.uc
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
class CryoNadeCloud extends Emitter;
|
||||
|
||||
var bool bFlashed;
|
||||
|
||||
simulated function PostBeginPlay()
|
||||
{
|
||||
Super.Postbeginplay();
|
||||
NadeLight();
|
||||
}
|
||||
|
||||
simulated function NadeLight()
|
||||
{
|
||||
if ( !Level.bDropDetail && (Instigator != None)
|
||||
&& ((Level.TimeSeconds - LastRenderTime < 0.2) || (PlayerController(Instigator.Controller) != None)) )
|
||||
{
|
||||
bDynamicLight = true;
|
||||
SetTimer(0.25, false);
|
||||
}
|
||||
else Timer();
|
||||
}
|
||||
|
||||
simulated function Timer()
|
||||
{
|
||||
bDynamicLight = false;
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter0
|
||||
UseColorScale=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
BlendBetweenSubdivisions=True
|
||||
ColorScale(0)=(Color=(B=255,G=235,R=215,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=245,G=225,R=205,A=255))
|
||||
FadeOutFactor=(W=0.000000,X=0.000000,Y=0.000000,Z=0.000000)
|
||||
FadeOutStartTime=5.000000
|
||||
SpinsPerSecondRange=(Y=(Min=0.050000,Max=0.100000),Z=(Min=0.050000,Max=0.100000))
|
||||
StartSpinRange=(X=(Min=-0.500000,Max=0.500000),Y=(Max=1.000000),Z=(Max=1.000000))
|
||||
SizeScale(0)=(RelativeSize=1.000000)
|
||||
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=5.000000)
|
||||
StartSizeRange=(X=(Min=40.000000,Max=40.000000),Y=(Min=40.000000,Max=40.000000),Z=(Min=40.000000,Max=40.000000))
|
||||
InitialParticlesPerSecond=5000.000000
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'kf_fx_trip_t.Misc.smoke_animated'
|
||||
TextureUSubdivisions=8
|
||||
TextureVSubdivisions=8
|
||||
LifetimeRange=(Min=7.000000,Max=7.000000)
|
||||
StartVelocityRange=(X=(Min=-750.000000,Max=750.000000),Y=(Min=-750.000000,Max=750.000000))
|
||||
VelocityLossRange=(X=(Min=10.000000,Max=10.000000),Y=(Min=10.000000,Max=10.000000),Z=(Min=10.000000,Max=10.000000))
|
||||
End Object
|
||||
Emitters(0)=SpriteEmitter'ScrnHTec.CryoNadeCloud.SpriteEmitter0'
|
||||
|
||||
AutoDestroy=True
|
||||
bNoDelete=False
|
||||
RemoteRole=ROLE_SimulatedProxy
|
||||
bNotOnDedServer=False
|
||||
}
|
||||
168
kf_sources/ScrnHTec/Classes/CryoThrower.uc
Normal file
168
kf_sources/ScrnHTec/Classes/CryoThrower.uc
Normal file
|
|
@ -0,0 +1,168 @@
|
|||
class CryoThrower extends KFWeapon;
|
||||
|
||||
simulated function bool StartFire(int Mode)
|
||||
{
|
||||
if( Mode == 1 )
|
||||
return super.StartFire(Mode);
|
||||
|
||||
if( !super.StartFire(Mode) ) // returns false when mag is empty
|
||||
return false;
|
||||
|
||||
if( AmmoAmount(0) <= 0 )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
AnimStopLooping();
|
||||
|
||||
if( !FireMode[Mode].IsInState('FireLoop') && (AmmoAmount(0) > 0) )
|
||||
{
|
||||
FireMode[Mode].StartFiring();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Allow this weapon to auto reload on alt fire
|
||||
simulated function AltFire(float F)
|
||||
{
|
||||
if( MagAmmoRemaining < FireMode[1].AmmoPerFire && !bIsReloading &&
|
||||
FireMode[1].NextFireTime <= Level.TimeSeconds )
|
||||
{
|
||||
// We're dry, ask the server to autoreload
|
||||
ServerRequestAutoReload();
|
||||
|
||||
PlayOwnedSound(FireMode[1].NoAmmoSound,SLOT_None,2.0,,,,false);
|
||||
}
|
||||
|
||||
super.AltFire(F);
|
||||
}
|
||||
|
||||
simulated function AnimEnd(int channel)
|
||||
{
|
||||
if(!FireMode[0].IsInState('FireLoop'))
|
||||
{
|
||||
Super.AnimEnd(channel);
|
||||
}
|
||||
}
|
||||
|
||||
function bool RecommendRangedAttack()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
function float SuggestAttackStyle()
|
||||
{
|
||||
return -1.0;
|
||||
}
|
||||
|
||||
//TODO: LONG ranged?
|
||||
function bool RecommendLongRangedAttack()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
simulated function bool ConsumeAmmo( int Mode, float Load, optional bool bAmountNeededIsMax )
|
||||
{
|
||||
local Inventory Inv;
|
||||
local bool bOutOfAmmo;
|
||||
local KFWeapon KFWeap;
|
||||
|
||||
if ( Super(Weapon).ConsumeAmmo(Mode, Load, bAmountNeededIsMax) )
|
||||
{
|
||||
if ( Load > 0 && (Mode == 0 || bReduceMagAmmoOnSecondaryFire) )
|
||||
MagAmmoRemaining -= Load;
|
||||
|
||||
NetUpdateTime = Level.TimeSeconds - 1;
|
||||
|
||||
if ( FireMode[Mode].AmmoPerFire > 0 && InventoryGroup > 0 && !bMeleeWeapon && bConsumesPhysicalAmmo &&
|
||||
(Ammo[0] == none || FireMode[0] == none || FireMode[0].AmmoPerFire <= 0 || Ammo[0].AmmoAmount < FireMode[0].AmmoPerFire) &&
|
||||
(Ammo[1] == none || FireMode[1] == none || FireMode[1].AmmoPerFire <= 0 || Ammo[1].AmmoAmount < FireMode[1].AmmoPerFire) )
|
||||
{
|
||||
bOutOfAmmo = true;
|
||||
|
||||
for ( Inv = Instigator.Inventory; Inv != none; Inv = Inv.Inventory )
|
||||
{
|
||||
KFWeap = KFWeapon(Inv);
|
||||
|
||||
if ( Inv.InventoryGroup > 0 && KFWeap != none && !KFWeap.bMeleeWeapon && KFWeap.bConsumesPhysicalAmmo &&
|
||||
((KFWeap.Ammo[0] != none && KFWeap.FireMode[0] != none && KFWeap.FireMode[0].AmmoPerFire > 0 &&KFWeap.Ammo[0].AmmoAmount >= KFWeap.FireMode[0].AmmoPerFire) ||
|
||||
(KFWeap.Ammo[1] != none && KFWeap.FireMode[1] != none && KFWeap.FireMode[1].AmmoPerFire > 0 && KFWeap.Ammo[1].AmmoAmount >= KFWeap.FireMode[1].AmmoPerFire)) )
|
||||
{
|
||||
bOutOfAmmo = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( bOutOfAmmo )
|
||||
{
|
||||
PlayerController(Instigator.Controller).Speech('AUTO', 3, "");
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// exec function ProjX(float value)
|
||||
// {
|
||||
// BaseProjectileFire(FireMode[1]).ProjSpawnOffset.X = value;
|
||||
// }
|
||||
// exec function ProjY(float value)
|
||||
// {
|
||||
// BaseProjectileFire(FireMode[1]).ProjSpawnOffset.Y = value;
|
||||
// }
|
||||
// exec function ProjZ(float value)
|
||||
// {
|
||||
// BaseProjectileFire(FireMode[1]).ProjSpawnOffset.Z = value;
|
||||
// }
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MagCapacity=120
|
||||
ReloadRate=4.140000
|
||||
ReloadAnim="Reload"
|
||||
ReloadAnimRate=1.000000
|
||||
WeaponReloadAnim="Reload_IJC_BlowerThrower"
|
||||
MinimumFireRange=50
|
||||
Weight=8.000000
|
||||
bHasAimingMode=True
|
||||
IdleAimAnim="Idle"
|
||||
QuickPutDownTime=0.250000
|
||||
StandardDisplayFOV=70.000000
|
||||
bModeZeroCanDryFire=True
|
||||
TraderInfoTexture=Texture'KF_IJC_HUD.Trader_Weapon_Icons.Trader_BlowerThrower'
|
||||
bIsTier2Weapon=True
|
||||
MeshRef="KF_IJC_Halloween_Weps_2.BlowerThrower"
|
||||
SkinRefs(0)="HTec_A.CryoThrower.CryoThrower_cmb"
|
||||
SelectSoundRef="KF_FY_BlowerThrowerSND.WEP_Bile_Foley_Select"
|
||||
HudImageRef="KF_IJC_HUD.WeaponSelect.BlowerThrower_unselected"
|
||||
SelectedHudImageRef="KF_IJC_HUD.WeaponSelect.BlowerThrower"
|
||||
ZoomInRotation=(Pitch=-1000,Roll=1500)
|
||||
ZoomedDisplayFOV=60.000000
|
||||
FireModeClass(0)=Class'ScrnHTec.CryoThrowerFire'
|
||||
FireModeClass(1)=Class'ScrnHTec.CryoThrowerAltFire'
|
||||
PutDownAnim="PutDown"
|
||||
PutDownTime=0.500000
|
||||
AIRating=0.700000
|
||||
CurrentRating=0.700000
|
||||
Description="A leaf blower modified to spray liquid nitrogen."
|
||||
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
|
||||
DisplayFOV=70.000000
|
||||
Priority=103
|
||||
InventoryGroup=4
|
||||
GroupOffset=21
|
||||
PickupClass=Class'ScrnHTec.CryoThrowerPickup'
|
||||
PlayerViewOffset=(X=15.000000,Y=20.000000,Z=-3.000000)
|
||||
BobDamping=6.000000
|
||||
AttachmentClass=Class'ScrnHTec.CryoThrowerAttachment'
|
||||
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
|
||||
ItemName="HTec Cryo Thrower"
|
||||
TransientSoundVolume=1.250000
|
||||
}
|
||||
117
kf_sources/ScrnHTec/Classes/CryoThrowerAltFire.uc
Normal file
117
kf_sources/ScrnHTec/Classes/CryoThrowerAltFire.uc
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
class CryoThrowerAltFire extends KFShotgunFire;
|
||||
|
||||
simulated function bool AllowFire()
|
||||
{
|
||||
if(KFWeapon(Weapon).bIsReloading)
|
||||
return false;
|
||||
if(KFPawn(Instigator).SecondaryItem!=none)
|
||||
return false;
|
||||
if(KFPawn(Instigator).bThrowingNade)
|
||||
return false;
|
||||
|
||||
if(KFWeapon(Weapon).MagAmmoRemaining < 1)
|
||||
{
|
||||
if( Level.TimeSeconds - LastClickTime>FireRate )
|
||||
{
|
||||
LastClickTime = Level.TimeSeconds;
|
||||
}
|
||||
|
||||
if( AIController(Instigator.Controller)!=None )
|
||||
KFWeapon(Weapon).ReloadMeNow();
|
||||
return false;
|
||||
}
|
||||
|
||||
return super(WeaponFire).AllowFire();
|
||||
}
|
||||
|
||||
// Handle setting new recoil
|
||||
simulated function HandleRecoil(float Rec)
|
||||
{
|
||||
local rotator NewRecoilRotation;
|
||||
local KFPlayerController KFPC;
|
||||
local KFPawn KFPwn;
|
||||
local vector AdjustedVelocity;
|
||||
local float AdjustedSpeed;
|
||||
|
||||
if( Instigator != none )
|
||||
{
|
||||
KFPC = KFPlayerController(Instigator.Controller);
|
||||
KFPwn = KFPawn(Instigator);
|
||||
}
|
||||
|
||||
if( KFPC == none || KFPwn == none )
|
||||
return;
|
||||
|
||||
if( !KFPC.bFreeCamera )
|
||||
{
|
||||
if( Weapon.GetFireMode(1).bIsFiring )
|
||||
{
|
||||
NewRecoilRotation.Pitch = RandRange( maxVerticalRecoilAngle * 0.5, maxVerticalRecoilAngle );
|
||||
NewRecoilRotation.Yaw = RandRange( maxHorizontalRecoilAngle * 0.5, maxHorizontalRecoilAngle );
|
||||
|
||||
if( Rand( 2 ) == 1 )
|
||||
NewRecoilRotation.Yaw = -NewRecoilRotation.Yaw;
|
||||
|
||||
if( Weapon.Owner != none && Weapon.Owner.Physics == PHYS_Falling &&
|
||||
Weapon.Owner.PhysicsVolume.Gravity.Z > class'PhysicsVolume'.default.Gravity.Z )
|
||||
{
|
||||
AdjustedVelocity = Weapon.Owner.Velocity;
|
||||
// Ignore Z velocity in low grav so we don't get massive recoil
|
||||
AdjustedVelocity.Z = 0;
|
||||
AdjustedSpeed = VSize(AdjustedVelocity);
|
||||
//log("AdjustedSpeed = "$AdjustedSpeed$" scale = "$(AdjustedSpeed* RecoilVelocityScale * 0.5));
|
||||
|
||||
// Reduce the falling recoil in low grav
|
||||
NewRecoilRotation.Pitch += (AdjustedSpeed* 3 * 0.5);
|
||||
NewRecoilRotation.Yaw += (AdjustedSpeed* 3 * 0.5);
|
||||
}
|
||||
else
|
||||
{
|
||||
//log("Velocity = "$VSize(Weapon.Owner.Velocity)$" scale = "$(VSize(Weapon.Owner.Velocity)* RecoilVelocityScale));
|
||||
NewRecoilRotation.Pitch += (VSize(Weapon.Owner.Velocity)* 3);
|
||||
NewRecoilRotation.Yaw += (VSize(Weapon.Owner.Velocity)* 3);
|
||||
}
|
||||
|
||||
NewRecoilRotation.Pitch += (Instigator.HealthMax / Instigator.Health * 5);
|
||||
NewRecoilRotation.Yaw += (Instigator.HealthMax / Instigator.Health * 5);
|
||||
NewRecoilRotation *= Rec;
|
||||
|
||||
KFPC.SetRecoil(NewRecoilRotation,RecoilRate * (default.FireRate/FireRate));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
KickMomentum=(X=-85.000000,Z=15.000000)
|
||||
maxVerticalRecoilAngle=1500
|
||||
maxHorizontalRecoilAngle=900
|
||||
FireAimedAnim="FireALL_Iron"
|
||||
bRandomPitchFireSound=False
|
||||
FireSoundRef="KF_FY_BlowerThrowerSND.WEP_Blower_Secondary_Fire_M"
|
||||
StereoFireSoundRef="KF_FY_BlowerThrowerSND.WEP_Blower_Secondary_Fire_S"
|
||||
NoAmmoSoundRef="KF_FlamethrowerSnd.FT_DryFire"
|
||||
ProjPerFire=1
|
||||
ProjSpawnOffset=(X=15.000000,Z=-20.000000)
|
||||
bWaitForRelease=True
|
||||
bAttachSmokeEmitter=True
|
||||
TransientSoundVolume=2.000000
|
||||
TransientSoundRadius=500.000000
|
||||
FireAnim="FireALL"
|
||||
FireAnimRate=0.950000
|
||||
FireRate=0.965000
|
||||
AmmoClass=Class'ScrnHTec.CryoThrowerAmmo'
|
||||
AmmoPerFire=10
|
||||
ShakeRotMag=(X=50.000000,Y=50.000000,Z=400.000000)
|
||||
ShakeRotRate=(X=12500.000000,Y=12500.000000,Z=12500.000000)
|
||||
ShakeRotTime=5.000000
|
||||
ShakeOffsetMag=(X=6.000000,Y=2.000000,Z=10.000000)
|
||||
ShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000)
|
||||
ShakeOffsetTime=3.000000
|
||||
ProjectileClass=Class'ScrnHTec.CryoThrowerAltProjectile'
|
||||
BotRefireRate=1.500000
|
||||
FlashEmitterClass=Class'ScrnHTec.NitroMuzzleFlash'
|
||||
aimerror=1.000000
|
||||
Spread=1000.000000
|
||||
SpreadStyle=SS_Line
|
||||
}
|
||||
9
kf_sources/ScrnHTec/Classes/CryoThrowerAltProjectile.uc
Normal file
9
kf_sources/ScrnHTec/Classes/CryoThrowerAltProjectile.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class CryoThrowerAltProjectile extends CryoThrowerProjectile;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Speed=500.000000
|
||||
MaxSpeed=500.000000
|
||||
TossZ=100.000000
|
||||
DamageRadius=200.000000
|
||||
}
|
||||
14
kf_sources/ScrnHTec/Classes/CryoThrowerAmmo.uc
Normal file
14
kf_sources/ScrnHTec/Classes/CryoThrowerAmmo.uc
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
class CryoThrowerAmmo extends KFAmmunition;
|
||||
|
||||
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=120
|
||||
MaxAmmo=840
|
||||
InitialAmount=300
|
||||
PickupClass=Class'ScrnHTec.CryoThrowerAmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=336,Y1=82,X2=382,Y2=125)
|
||||
ItemName="Liquid Nitrogen"
|
||||
}
|
||||
9
kf_sources/ScrnHTec/Classes/CryoThrowerAmmoPickup.uc
Normal file
9
kf_sources/ScrnHTec/Classes/CryoThrowerAmmoPickup.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class CryoThrowerAmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=120
|
||||
InventoryType=Class'ScrnHTec.CryoThrowerAmmo'
|
||||
PickupMessage="ML of Liquid Nitrogen"
|
||||
StaticMesh=StaticMesh'KillingFloorStatics.FT_AmmoMesh'
|
||||
}
|
||||
86
kf_sources/ScrnHTec/Classes/CryoThrowerAttachment.uc
Normal file
86
kf_sources/ScrnHTec/Classes/CryoThrowerAttachment.uc
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
class CryoThrowerAttachment extends KFWeaponAttachment;
|
||||
|
||||
var array<string> SkinRefs;
|
||||
|
||||
static function PreloadAssets(optional KFWeaponAttachment Spawned)
|
||||
{
|
||||
local int i;
|
||||
|
||||
super.PreloadAssets(Spawned);
|
||||
|
||||
for ( i = 0; i < default.SkinRefs.Length; i++ )
|
||||
default.Skins[i] = Material(DynamicLoadObject(default.SkinRefs[i], class'Material'));
|
||||
|
||||
|
||||
if ( Spawned != none ){
|
||||
for ( i = 0; i < default.SkinRefs.Length; i++ )
|
||||
Spawned.Skins[i] = default.Skins[i];
|
||||
}
|
||||
}
|
||||
|
||||
static function bool UnloadAssets()
|
||||
{
|
||||
local int i;
|
||||
|
||||
super.UnloadAssets();
|
||||
|
||||
for ( i = 0; i < default.SkinRefs.Length; i++ )
|
||||
default.Skins[i] = none;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// No dynamic light when firing this
|
||||
simulated function WeaponLight(){}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
SkinRefs(0)="HTec_A.CryoThrower.CryoThrower_3rd_D"
|
||||
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdNailGun'
|
||||
MovementAnims(0)="JogF_IJC_BlowerThrower"
|
||||
MovementAnims(1)="JogB_IJC_BlowerThrower"
|
||||
MovementAnims(2)="JogL_IJC_BlowerThrower"
|
||||
MovementAnims(3)="JogR_IJC_BlowerThrower"
|
||||
TurnLeftAnim="TurnL_IJC_BlowerThrower"
|
||||
TurnRightAnim="TurnR_IJC_BlowerThrower"
|
||||
CrouchAnims(0)="CHWalkF_IJC_BlowerThrower"
|
||||
CrouchAnims(1)="CHWalkB_IJC_BlowerThrower"
|
||||
CrouchAnims(2)="CHWalkL_IJC_BlowerThrower"
|
||||
CrouchAnims(3)="CHWalkR_IJC_BlowerThrower"
|
||||
WalkAnims(0)="WalkF_IJC_BlowerThrower"
|
||||
WalkAnims(1)="WalkB_IJC_BlowerThrower"
|
||||
WalkAnims(2)="WalkL_IJC_BlowerThrower"
|
||||
WalkAnims(3)="WalkR_IJC_BlowerThrower"
|
||||
CrouchTurnRightAnim="CH_TurnR_IJC_BlowerThrower"
|
||||
CrouchTurnLeftAnim="CH_TurnL_IJC_BlowerThrower"
|
||||
IdleCrouchAnim="CHIdle_IJC_BlowerThrower"
|
||||
IdleWeaponAnim="Idle_IJC_BlowerThrower"
|
||||
IdleRestAnim="Idle_IJC_BlowerThrower"
|
||||
IdleChatAnim="Idle_IJC_BlowerThrower"
|
||||
IdleHeavyAnim="Idle_IJC_BlowerThrower"
|
||||
IdleRifleAnim="Idle_IJC_BlowerThrower"
|
||||
FireAnims(0)="Fire_IJC_BlowerThrower"
|
||||
FireAnims(1)="Fire_IJC_BlowerThrower"
|
||||
FireAnims(2)="Fire_IJC_BlowerThrower"
|
||||
FireAnims(3)="Fire_IJC_BlowerThrower"
|
||||
FireAltAnims(0)="Fire_IJC_BlowerThrower"
|
||||
FireAltAnims(1)="Fire_IJC_BlowerThrower"
|
||||
FireAltAnims(2)="Fire_IJC_BlowerThrower"
|
||||
FireAltAnims(3)="Fire_IJC_BlowerThrower"
|
||||
FireCrouchAnims(0)="CHFire_IJC_BlowerThrower"
|
||||
FireCrouchAnims(1)="CHFire_IJC_BlowerThrower"
|
||||
FireCrouchAnims(2)="CHFire_IJC_BlowerThrower"
|
||||
FireCrouchAnims(3)="CHFire_IJC_BlowerThrower"
|
||||
FireCrouchAltAnims(0)="CHFire_IJC_BlowerThrower"
|
||||
FireCrouchAltAnims(1)="CHFire_IJC_BlowerThrower"
|
||||
FireCrouchAltAnims(2)="CHFire_IJC_BlowerThrower"
|
||||
FireCrouchAltAnims(3)="CHFire_IJC_BlowerThrower"
|
||||
HitAnims(0)="HitF_IJC_BlowerThrower"
|
||||
HitAnims(1)="HitB_IJC_BlowerThrower"
|
||||
HitAnims(2)="HitL_IJC_BlowerThrower"
|
||||
HitAnims(3)="HitR_IJC_BlowerThrower"
|
||||
PostFireBlendStandAnim="Blend_IJC_BlowerThrower"
|
||||
PostFireBlendCrouchAnim="CHBlend_IJC_BlowerThrower"
|
||||
MeshRef="KF_Weapons3rd3_IJC.BlowerThrower_3rd"
|
||||
WeaponAmbientScale=2.000000
|
||||
}
|
||||
20
kf_sources/ScrnHTec/Classes/CryoThrowerFire.uc
Normal file
20
kf_sources/ScrnHTec/Classes/CryoThrowerFire.uc
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
class CryoThrowerFire extends NitroFire;
|
||||
|
||||
|
||||
function float MaxRange()
|
||||
{
|
||||
return 2500;
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
EffectiveRange=2500.000000
|
||||
maxVerticalRecoilAngle=500
|
||||
maxHorizontalRecoilAngle=250
|
||||
ProjSpawnOffset=(X=15.000000,Z=-40.000000)
|
||||
FireLoopAnim="Fire"
|
||||
FireEndAnim="Fire_End"
|
||||
AmmoClass=Class'ScrnHTec.CryoThrowerAmmo'
|
||||
ProjectileClass=Class'ScrnHTec.CryoThrowerProjectile'
|
||||
Spread=2500.000000
|
||||
}
|
||||
26
kf_sources/ScrnHTec/Classes/CryoThrowerPickup.uc
Normal file
26
kf_sources/ScrnHTec/Classes/CryoThrowerPickup.uc
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
class CryoThrowerPickup extends KFWeaponPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=8.000000
|
||||
AmmoCost=55
|
||||
BuyClipSize=100
|
||||
PowerValue=50
|
||||
SpeedValue=80
|
||||
RangeValue=20
|
||||
Description="A leaf blower modified to spray liquid nitrogen."
|
||||
ItemName="HTec Cryo Thrower"
|
||||
ItemShortName="HTec Cryo Thrower"
|
||||
AmmoItemName="Bile"
|
||||
AmmoMesh=StaticMesh'KillingFloorStatics.FT_AmmoMesh'
|
||||
CorrespondingPerkIndex=11
|
||||
EquipmentCategoryID=3
|
||||
InventoryType=Class'ScrnHTec.CryoThrower'
|
||||
PickupMessage="You got the CryoThrower"
|
||||
PickupSound=Sound'KF_FY_BlowerThrowerSND.foley.WEP_Bile_Foley_Pickup'
|
||||
PickupForce="AssaultRiflePickup"
|
||||
StaticMesh=StaticMesh'HTec_A.CryoThrower_Pickup'
|
||||
DrawScale=0.900000
|
||||
CollisionRadius=30.000000
|
||||
CollisionHeight=5.000000
|
||||
}
|
||||
9
kf_sources/ScrnHTec/Classes/CryoThrowerProjectile.uc
Normal file
9
kf_sources/ScrnHTec/Classes/CryoThrowerProjectile.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class CryoThrowerProjectile extends NitroProjectile;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Speed=1200.000000
|
||||
MaxSpeed=1200.000000
|
||||
TossZ=250.000000
|
||||
MyDamageType=Class'ScrnHTec.DamTypeCryoThrower'
|
||||
}
|
||||
9
kf_sources/ScrnHTec/Classes/DamTypeCryoNade.uc
Normal file
9
kf_sources/ScrnHTec/Classes/DamTypeCryoNade.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class DamTypeCryoNade extends DamTypeFreezerBase
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FreezeRatio=12.000000
|
||||
bCheckForHeadShots=False
|
||||
bLocationalHit=False
|
||||
}
|
||||
10
kf_sources/ScrnHTec/Classes/DamTypeCryoThrower.uc
Normal file
10
kf_sources/ScrnHTec/Classes/DamTypeCryoThrower.uc
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
class DamTypeCryoThrower extends DamTypeFreezerBase
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FreezeRatio=5.000000
|
||||
bCheckForHeadShots=False
|
||||
WeaponClass=Class'ScrnHTec.CryoThrower'
|
||||
bLocationalHit=False
|
||||
}
|
||||
39
kf_sources/ScrnHTec/Classes/DamTypeFreezerBase.uc
Normal file
39
kf_sources/ScrnHTec/Classes/DamTypeFreezerBase.uc
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
class DamTypeFreezerBase extends KFWeaponDamageType
|
||||
abstract;
|
||||
|
||||
var float FreezeRatio; // percent of damage used for freezing effect
|
||||
|
||||
// Freeze over Time
|
||||
var int FoT_Duration; // for how long zed will freeze after receiving this damage
|
||||
var float FoT_Ratio; // freeze per second in percent of damage received
|
||||
|
||||
var float ShatteringDamageMult; // damage multiplier to already frozen zeds
|
||||
|
||||
static function AwardKill(KFSteamStatsAndAchievements KFStatsAndAchievements, KFPlayerController Killer, KFMonster Killed )
|
||||
{
|
||||
// do not count kills of decapitated specimens - those are counted in ScoredHeadshot()
|
||||
if ( Killed != none && Killed.bDecapitated )
|
||||
return;
|
||||
|
||||
if( SRStatsBase(KFStatsAndAchievements)!=None && SRStatsBase(KFStatsAndAchievements).Rep!=None )
|
||||
SRStatsBase(KFStatsAndAchievements).Rep.ProgressCustomValue(Class'HTecProg',1);
|
||||
}
|
||||
|
||||
static function ScoredHeadshot(KFSteamStatsAndAchievements KFStatsAndAchievements, class<KFMonster> MonsterClass, bool bLaserSightedM14EBRKill)
|
||||
{
|
||||
if( SRStatsBase(KFStatsAndAchievements)!=None && SRStatsBase(KFStatsAndAchievements).Rep!=None )
|
||||
SRStatsBase(KFStatsAndAchievements).Rep.ProgressCustomValue(Class'HTecProg',1);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FreezeRatio=1.000000
|
||||
ShatteringDamageMult=1.000000
|
||||
WeaponClass=Class'ScrnHTec.FreezerGun'
|
||||
DeathString="%o frozen by %k."
|
||||
FemaleSuicide="%o froze till death."
|
||||
MaleSuicide="%o froze till death."
|
||||
bArmorStops=False
|
||||
DeathOverlayMaterial=Texture'HTec_A.Overlay.IceOverlay'
|
||||
DeathOverlayTime=5.000000
|
||||
}
|
||||
10
kf_sources/ScrnHTec/Classes/DamTypeFreezerDart.uc
Normal file
10
kf_sources/ScrnHTec/Classes/DamTypeFreezerDart.uc
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
class DamTypeFreezerDart extends DamTypeFreezerBase
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FreezeRatio=0.600000
|
||||
FoT_Duration=2
|
||||
FoT_Ratio=0.200000
|
||||
ShatteringDamageMult=1.500000
|
||||
}
|
||||
9
kf_sources/ScrnHTec/Classes/DamTypeFreezerNitro.uc
Normal file
9
kf_sources/ScrnHTec/Classes/DamTypeFreezerNitro.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class DamTypeFreezerNitro extends DamTypeFreezerBase
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FreezeRatio=5.000000
|
||||
bCheckForHeadShots=False
|
||||
bLocationalHit=False
|
||||
}
|
||||
9
kf_sources/ScrnHTec/Classes/DamTypeFreezerNoDmgBonus.uc
Normal file
9
kf_sources/ScrnHTec/Classes/DamTypeFreezerNoDmgBonus.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class DamTypeFreezerNoDmgBonus extends DamTypeFreezerBase
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FreezeRatio=0.600000
|
||||
FoT_Duration=2
|
||||
FoT_Ratio=0.200000
|
||||
}
|
||||
24
kf_sources/ScrnHTec/Classes/DamTypeHTecZEDGun.uc
Normal file
24
kf_sources/ScrnHTec/Classes/DamTypeHTecZEDGun.uc
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
class DamTypeHTecZEDGun extends DamTypeZEDGun
|
||||
abstract;
|
||||
|
||||
|
||||
static function AwardKill(KFSteamStatsAndAchievements KFStatsAndAchievements, KFPlayerController Killer, KFMonster Killed )
|
||||
{
|
||||
// do not count kills of decapitated specimens - those are counted in ScoredHeadshot()
|
||||
if ( Killed != none && Killed.bDecapitated )
|
||||
return;
|
||||
|
||||
if( SRStatsBase(KFStatsAndAchievements)!=None && SRStatsBase(KFStatsAndAchievements).Rep!=None )
|
||||
SRStatsBase(KFStatsAndAchievements).Rep.ProgressCustomValue(Class'HTecProg',1);
|
||||
}
|
||||
|
||||
static function ScoredHeadshot(KFSteamStatsAndAchievements KFStatsAndAchievements, class<KFMonster> MonsterClass, bool bLaserSightedM14EBRKill)
|
||||
{
|
||||
if( SRStatsBase(KFStatsAndAchievements)!=None && SRStatsBase(KFStatsAndAchievements).Rep!=None )
|
||||
SRStatsBase(KFStatsAndAchievements).Rep.ProgressCustomValue(Class'HTecProg',1);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
WeaponClass=Class'ScrnHTec.HTecZEDGun'
|
||||
}
|
||||
23
kf_sources/ScrnHTec/Classes/DamTypeHTecZEDGunMKII.uc
Normal file
23
kf_sources/ScrnHTec/Classes/DamTypeHTecZEDGunMKII.uc
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
class DamTypeHTecZEDGunMKII extends DamTypeZEDGunMKII
|
||||
abstract;
|
||||
|
||||
static function AwardKill(KFSteamStatsAndAchievements KFStatsAndAchievements, KFPlayerController Killer, KFMonster Killed )
|
||||
{
|
||||
// do not count kills of decapitated specimens - those are counted in ScoredHeadshot()
|
||||
if ( Killed != none && Killed.bDecapitated )
|
||||
return;
|
||||
|
||||
if( SRStatsBase(KFStatsAndAchievements)!=None && SRStatsBase(KFStatsAndAchievements).Rep!=None )
|
||||
SRStatsBase(KFStatsAndAchievements).Rep.ProgressCustomValue(Class'HTecProg',1);
|
||||
}
|
||||
|
||||
static function ScoredHeadshot(KFSteamStatsAndAchievements KFStatsAndAchievements, class<KFMonster> MonsterClass, bool bLaserSightedM14EBRKill)
|
||||
{
|
||||
if( SRStatsBase(KFStatsAndAchievements)!=None && SRStatsBase(KFStatsAndAchievements).Rep!=None )
|
||||
SRStatsBase(KFStatsAndAchievements).Rep.ProgressCustomValue(Class'HTecProg',1);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
WeaponClass=Class'ScrnHTec.HTecZEDMKII'
|
||||
}
|
||||
14
kf_sources/ScrnHTec/Classes/DamTypeKVolt.uc
Normal file
14
kf_sources/ScrnHTec/Classes/DamTypeKVolt.uc
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
class DamTypeKVolt extends DamTypeFreezerBase
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FoT_Duration=4
|
||||
FoT_Ratio=0.500000
|
||||
ShatteringDamageMult=2.000000
|
||||
WeaponClass=Class'ScrnHTec.KVolt'
|
||||
bRagdollBullet=True
|
||||
KDamageImpulse=1500.000000
|
||||
KDeathVel=210.000000
|
||||
KDeathUpKick=2.000000
|
||||
}
|
||||
13
kf_sources/ScrnHTec/Classes/DamTypeSirenDart.uc
Normal file
13
kf_sources/ScrnHTec/Classes/DamTypeSirenDart.uc
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
class DamTypeSirenDart extends DamTypeZombieAttack
|
||||
abstract;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
DeathString="%o was pierced by %k's ice shards."
|
||||
FemaleSuicide="%o was pierced by ice shards."
|
||||
MaleSuicide="%o was pierced by ice shards."
|
||||
bDetonatesGoop=True
|
||||
bRagdollBullet=True
|
||||
KDeathVel=400.000000
|
||||
KDeathUpKick=120.000000
|
||||
}
|
||||
22
kf_sources/ScrnHTec/Classes/FreezeAch.uc
Normal file
22
kf_sources/ScrnHTec/Classes/FreezeAch.uc
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
Class FreezeAch extends ScrnAchievements;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AchDefs(0)=(id="Freeze_Dosh",DisplayName="Frozen DO$H",Description="Collect £%c from shattered zeds",Icon=Texture'ScrnAch_T.Achievements.Checked_Cryo',MaxProgress=1337,DataSize=11)
|
||||
AchDefs(1)=(id="Freeze_IceAge",DisplayName="Ice Age 2015",Description="Freeze %c zeds",Icon=Texture'ScrnAch_T.Achievements.Checked_Cryo',MaxProgress=2015,DataSize=11)
|
||||
AchDefs(2)=(id="Freeze_Chainsaw",DisplayName="Ice Sculpting",Description="Cut %c frozen zeds with a Chainsaw",Icon=Texture'ScrnAch_T.Achievements.Checked_Cryo',MaxProgress=93,DataSize=7,Group="TW")
|
||||
AchDefs(3)=(id="Freeze_Storm",DisplayName="Ice Storm",Description="Blow up 10 frozen zeds at once (x%c)",Icon=Texture'ScrnAch_T.Achievements.Checked_Cryo',MaxProgress=15,DataSize=4)
|
||||
AchDefs(4)=(id="Freeze_Expert",DisplayName="Cryo Expert",Description="Do everything yourself: freeze zed, shatter it and collect all 5 pieces of frozen dosh (x%c)",Icon=Texture'ScrnAch_T.Achievements.Checked_Cryo',MaxProgress=50,DataSize=6,Group="Master")
|
||||
AchDefs(5)=(id="Freeze_Dart",DisplayName="Cryo Sniper",Description="Decapitate 30 zeds with ice darts in a single wave(x%c)",Icon=Texture'ScrnAch_T.Achievements.Checked_Cryo',MaxProgress=10,DataSize=4)
|
||||
AchDefs(6)=(id="Freeze_Festival",DisplayName="Ice Sculpture Festival",Description="Get 20 frozen zeds at the same time",Icon=Texture'ScrnAch_T.Achievements.Checked_Cryo',MaxProgress=1,DataSize=1)
|
||||
AchDefs(7)=(id="Freeze_CR",DisplayName="Spider Rain",Description="Freeze %c Crawlers in midair",Icon=Texture'ScrnAch_T.Achievements.Checked_Cryo',MaxProgress=30,DataSize=5)
|
||||
AchDefs(8)=(id="Freeze_FP",DisplayName="Frozen Flesh",Description="Freeze the Fleshpound",Icon=Texture'ScrnAch_T.Achievements.Checked_Cryo',MaxProgress=1,DataSize=1)
|
||||
AchDefs(9)=(id="Freeze_Pat",DisplayName="Frozen Scientist",Description="Freeze the Patriarch",Icon=Texture'ScrnAch_T.Achievements.Checked_Cryo',MaxProgress=1,DataSize=1)
|
||||
AchDefs(10)=(id="Freeze_ShatterPat",DisplayName="Death to the Frozen Scientist",Description="Shatter frozen Patriarch",Icon=Texture'ScrnAch_T.Achievements.Checked_Cryo',MaxProgress=1,DataSize=1,Group="TW")
|
||||
AchDefs(11)=(id="Freeze_ShatterZeds",DisplayName="TeamWork: Shattering Ice",Description="Shatter %c zeds frozen by teammates",Icon=Texture'ScrnAch_T.Achievements.Checked_Cryo',MaxProgress=250,DataSize=8,Group="TW")
|
||||
AchDefs(12)=(id="Freeze_DoshSui",DisplayName="Suicidal Dosh Maniac",Description="Grab £%c of frozen dosh while your health is below 25%",Icon=Texture'ScrnAch_T.Achievements.Checked_Cryo',MaxProgress=99,DataSize=7)
|
||||
AchDefs(13)=(id="OP_HTec",DisplayName="Is HTec OP?",Description="Survive 3+player game where everybody is playing Horzine Technician",Icon=Texture'ScrnAch_T.Teamwork.Checked_TW',MaxProgress=1,DataSize=1,Group="TW")
|
||||
DefaultAchGroup="weap"
|
||||
GroupInfo(1)=(Group="weap",Caption="Custom Weapons")
|
||||
ProgressName="Cryo Achievements"
|
||||
}
|
||||
41
kf_sources/ScrnHTec/Classes/FreezeAchHandler.uc
Normal file
41
kf_sources/ScrnHTec/Classes/FreezeAchHandler.uc
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
class FreezeAchHandler extends ScrnAchHandlerBase;
|
||||
|
||||
var FreezeRules FreezeRules;
|
||||
|
||||
function FindGameRules()
|
||||
{
|
||||
if ( GameRules != none )
|
||||
return;
|
||||
|
||||
super.FindGameRules();
|
||||
|
||||
// make sure that FreezeRules are spawned after ScrnGameRules
|
||||
if ( GameRules != none ) {
|
||||
FreezeRules = Class'FreezeRules'.static.FindOrSpawnMe(Level.Game);
|
||||
FreezeRules.ScrnGameRules = GameRules;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function WaveEnded(byte WaveNum)
|
||||
{
|
||||
local ScrnPlayerInfo SPI;
|
||||
local int i, decaps;
|
||||
|
||||
for ( SPI=GameRules.PlayerInfo; SPI!=none; SPI=SPI.NextPlayerInfo ) {
|
||||
if ( SPI.PlayerOwner == none )
|
||||
continue; // player disconnected
|
||||
|
||||
decaps = 0;
|
||||
for ( i=0; i<SPI.WeapInfos.length; ++i ) {
|
||||
if ( ClassIsChildOf(SPI.WeapInfos[i].DamType, class'DamTypeFreezerBase') )
|
||||
decaps += SPI.WeapInfos[i].DecapsPerWave;
|
||||
}
|
||||
if ( decaps >= 30 )
|
||||
SPI.ProgressAchievement('Freeze_Dart', 1);
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
}
|
||||
6
kf_sources/ScrnHTec/Classes/FreezeParticlesBase.uc
Normal file
6
kf_sources/ScrnHTec/Classes/FreezeParticlesBase.uc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class FreezeParticlesBase extends Emitter;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
bNoDelete=False
|
||||
}
|
||||
13
kf_sources/ScrnHTec/Classes/FreezeParticlesDirectional.uc
Normal file
13
kf_sources/ScrnHTec/Classes/FreezeParticlesDirectional.uc
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
class FreezeParticlesDirectional extends FreezeParticlesBase;
|
||||
|
||||
simulated function Trigger(Actor Other, Pawn EventInstigator)
|
||||
{
|
||||
Emitters[0].SpawnParticle(1);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Style=STY_Additive
|
||||
bHardAttach=True
|
||||
bDirectional=True
|
||||
}
|
||||
122
kf_sources/ScrnHTec/Classes/FreezeReplicationInfo.uc
Normal file
122
kf_sources/ScrnHTec/Classes/FreezeReplicationInfo.uc
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
// FreezeRules controls Zed freezing on server side.
|
||||
// FreezeReplicationInfo is used to replciate freezing effects to clients.
|
||||
|
||||
class FreezeReplicationInfo extends ReplicationInfo;
|
||||
|
||||
var KFLevelRules KFLevelRules;
|
||||
|
||||
var byte FrozenCount;
|
||||
var array<KFMonster> Frozen;
|
||||
|
||||
var const material FrozenMaterial;
|
||||
|
||||
|
||||
replication {
|
||||
reliable if ( bNetDirty && Role == ROLE_Authority )
|
||||
FrozenCount;
|
||||
}
|
||||
|
||||
static function RemoveAnimations(KFMonster M)
|
||||
{
|
||||
local int i;
|
||||
|
||||
for ( i=0; i<ArrayCount(M.MeleeAnims); ++i )
|
||||
M.MeleeAnims[i] = '';
|
||||
for ( i=0; i<ArrayCount(M.HitAnims); ++i )
|
||||
M.HitAnims[i] = '';
|
||||
M.KFHitFront = '';
|
||||
M.KFHitBack = '';
|
||||
M.KFHitLeft = '';
|
||||
M.KFHitRight = '';
|
||||
M.IdleCrouchAnim = '';
|
||||
M.IdleWeaponAnim = '';
|
||||
M.IdleSwimAnim = '';
|
||||
M.IdleRestAnim = '';
|
||||
M.IdleHeavyAnim = '';
|
||||
M.IdleRifleAnim = '';
|
||||
}
|
||||
|
||||
static function RestoreAnimations(KFMonster M)
|
||||
{
|
||||
local int i;
|
||||
|
||||
for ( i=0; i<ArrayCount(M.MeleeAnims); ++i )
|
||||
M.MeleeAnims[i] = M.default.MeleeAnims[i];
|
||||
for ( i=0; i<ArrayCount(M.HitAnims); ++i )
|
||||
M.HitAnims[i] = M.default.HitAnims[i];
|
||||
M.KFHitFront = M.default.KFHitFront;
|
||||
M.KFHitBack = M.default.KFHitBack;
|
||||
M.KFHitLeft = M.default.KFHitLeft;
|
||||
M.KFHitRight = M.default.KFHitRight;
|
||||
M.IdleCrouchAnim = M.default.IdleCrouchAnim;
|
||||
M.IdleWeaponAnim = M.default.IdleWeaponAnim;
|
||||
M.IdleSwimAnim = M.default.IdleSwimAnim;
|
||||
M.IdleRestAnim = M.default.IdleRestAnim;
|
||||
M.IdleHeavyAnim = M.default.IdleHeavyAnim;
|
||||
M.IdleRifleAnim = M.default.IdleRifleAnim;
|
||||
}
|
||||
|
||||
// adds IJC_Project_Santa Gun to the shot
|
||||
auto simulated state InitShop
|
||||
{
|
||||
Begin:
|
||||
while ( KFLevelRules == none && FrozenCount == 0 ) {
|
||||
sleep(1.0);
|
||||
foreach DynamicActors(class'KFLevelRules', KFLevelRules)
|
||||
break;
|
||||
}
|
||||
KFLevelRules.NeutItemForSale.insert(0,1);
|
||||
KFLevelRules.NeutItemForSale[0] = class'FreezerPickup';
|
||||
|
||||
if ( Role < ROLE_Authority )
|
||||
GotoState('Freezing');
|
||||
else
|
||||
GotoState('');
|
||||
}
|
||||
|
||||
simulated state Freezing
|
||||
{
|
||||
simulated function LoadFrozen()
|
||||
{
|
||||
local KFMonster M;
|
||||
local int i;
|
||||
|
||||
for ( i=0; i<Frozen.length; ++i )
|
||||
RestoreAnimations(Frozen[i]);
|
||||
|
||||
foreach DynamicActors(class'KFMonster', M) {
|
||||
if ( M.Health > 0 && M.OverlayMaterial == FrozenMaterial ) {
|
||||
RemoveAnimations(M);
|
||||
Frozen[i++] = M;
|
||||
}
|
||||
}
|
||||
Frozen.length = i;
|
||||
}
|
||||
|
||||
simulated function Tick(float DeltaTime)
|
||||
{
|
||||
local int i;
|
||||
|
||||
// remove dead or unfrozen zeds first
|
||||
while ( i < Frozen.length ) {
|
||||
if ( Frozen[i] == none || Frozen[i].Health <= 0 || Frozen[i].OverlayMaterial != FrozenMaterial )
|
||||
Frozen.remove(i, 1);
|
||||
else
|
||||
++i;
|
||||
}
|
||||
|
||||
if ( Frozen.length != FrozenCount )
|
||||
LoadFrozen();
|
||||
|
||||
for ( i=0; i<Frozen.length; ++i ) {
|
||||
Frozen[i].bIsIdle = false;
|
||||
Frozen[i].bWaitForAnim = true;
|
||||
Frozen[i].StopAnimating();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FrozenMaterial=Texture'HTec_A.Overlay.IceOverlay'
|
||||
}
|
||||
485
kf_sources/ScrnHTec/Classes/FreezeRules.uc
Normal file
485
kf_sources/ScrnHTec/Classes/FreezeRules.uc
Normal file
|
|
@ -0,0 +1,485 @@
|
|||
// FreezeRules controls Zed freezing on server side.
|
||||
// FreezeReplicationInfo is used to replciate freezing effects to clients.
|
||||
|
||||
class FreezeRules extends GameRules;
|
||||
|
||||
var ScrnGameRules ScrnGameRules;
|
||||
|
||||
var FreezeReplicationInfo FreezeRI;
|
||||
var float FreezeTreshold; // % of HealthMax to be done to fully freeze zed
|
||||
var float FrozenDamageResistance; // frozen zed gets less damage
|
||||
var float FrozenDamageMult; // but it is possible to break the ice and instant kill zed
|
||||
var float FrozenDamageMultHS; // damage that can do headshots does more damage to ice
|
||||
var float FrozenDamageMultSG; // shotgun-specific damage mult
|
||||
|
||||
var class<Emitter> ShatteredIce;
|
||||
var transient PlayerController LastShatteredBy; //last player who shattered zed
|
||||
var transient float LastShaterTime;
|
||||
var transient int InstantShatterCounter;
|
||||
var transient float NextChainsawTime;
|
||||
|
||||
var bool bDosh;
|
||||
|
||||
struct SFrozen {
|
||||
var KFMonster M;
|
||||
var KFPlayerController LastFrozenBy;
|
||||
var class<DamTypeFreezerBase> LastFrozenDamType;
|
||||
var bool bFrozen, bWasFrozen;
|
||||
var float CurrentFreeze;
|
||||
var float FreezeTreshold; // when CurrentFreeze reaches this value, zed becomes completely frozen
|
||||
// FoT: Freeze over Time
|
||||
var float FoT;
|
||||
var float FoT_Remaining;
|
||||
var float WarmTime; // time after which zed should get warmed up
|
||||
|
||||
var int Damage; // damage done during freeze
|
||||
var vector FocalPoint;
|
||||
};
|
||||
var transient array<SFrozen> Frozen;
|
||||
|
||||
|
||||
final static function FreezeRules FindOrSpawnMe(GameInfo Game)
|
||||
{
|
||||
local GameRules GR;
|
||||
local FreezeRules FR;
|
||||
|
||||
FR = FreezeRules(Game.GameRulesModifiers);
|
||||
if ( FR == none ) {
|
||||
|
||||
for ( GR = Game.GameRulesModifiers; GR != none && FR == none; GR = GR.NextGameRules )
|
||||
FR = FreezeRules(Game.GameRulesModifiers);
|
||||
|
||||
// Freeze rules not found. Spawn it now
|
||||
if ( FR == none ) {
|
||||
FR = Game.Spawn(Class'FreezeRules', Game);
|
||||
if( Game.GameRulesModifiers==None )
|
||||
Game.GameRulesModifiers = FR;
|
||||
else
|
||||
Game.GameRulesModifiers.AddGameRules(FR);
|
||||
}
|
||||
}
|
||||
|
||||
return FR;
|
||||
}
|
||||
|
||||
|
||||
function PostBeginPlay()
|
||||
{
|
||||
FreezeRI = spawn(class'FreezeReplicationInfo', self);
|
||||
class'ZombieSirenCryo'.default.FreezeRules = self;
|
||||
}
|
||||
|
||||
function AddGameRules(GameRules GR)
|
||||
{
|
||||
if ( GR.class != self.class ) //prevent adding same rules more than once
|
||||
Super.AddGameRules(GR);
|
||||
}
|
||||
|
||||
function int NetDamage( int OriginalDamage, int Damage, pawn injured, pawn instigatedBy,
|
||||
vector HitLocation, out vector Momentum, class<DamageType> DamageType )
|
||||
{
|
||||
local class<KFWeaponDamageType> KFDamType;
|
||||
local class<DamTypeFreezerBase> FreezeDT;
|
||||
local KFPlayerController PC;
|
||||
local KFPlayerReplicationInfo KFPRI;
|
||||
local class<KFVeterancyTypes> Perk;
|
||||
local KFMonster ZedVictim;
|
||||
local int idx;
|
||||
|
||||
KFDamType = class<KFWeaponDamageType>(damageType);
|
||||
ZedVictim = KFMonster(injured);
|
||||
if ( instigatedBy != none )
|
||||
PC = KFPlayerController(instigatedBy.Controller);
|
||||
if ( PC != none )
|
||||
KFPRI = KFPlayerReplicationInfo(PC.PlayerReplicationInfo);
|
||||
if ( KFPRI != none )
|
||||
Perk = KFPRI.ClientVeteranSkill;
|
||||
else
|
||||
Perk = class'KFVeterancyTypes';
|
||||
|
||||
|
||||
if ( KFDamType != none && ZedVictim != none && ZedVictim.Controller != none && ZedVictim.Health > 0 )
|
||||
{
|
||||
FreezeDT = class<DamTypeFreezerBase>(damageType);
|
||||
if ( FreezeDT != none ) {
|
||||
if ( ZedVictim.bBurnified ) {
|
||||
ZedVictim.BurnDown /= 2;
|
||||
if ( ZedVictim.BurnDown == 0 ) {
|
||||
ZedVictim.bBurnified = false;
|
||||
ZedVictim.Timer(); // stop burning behavior
|
||||
}
|
||||
}
|
||||
|
||||
if ( !ZedVictim.bBurnified ) {
|
||||
idx = FrozenIndex(ZedVictim, true);
|
||||
if ( KFPRI != none && KFPRI.ClientVeteranSkill != none )
|
||||
Frozen[idx].CurrentFreeze += Damage * FreezeDT.default.FreezeRatio;
|
||||
if ( Frozen[idx].bFrozen ) {
|
||||
Frozen[idx].WarmTime = fmax(Frozen[idx].WarmTime, Level.TimeSeconds + 0.5);
|
||||
// allow shattering for ice darts
|
||||
if ( FreezeDT.default.bCheckForHeadShots ) {
|
||||
Damage *= FrozenDamageResistance * FreezeDT.default.HeadShotDamageMult
|
||||
* FreezeDT.default.ShatteringDamageMult;
|
||||
Frozen[idx].Damage += Damage * FrozenDamageMultHS;
|
||||
if ( ZedVictim.Health <= Damage + Frozen[idx].Damage ) {
|
||||
Damage += Frozen[idx].Damage;
|
||||
ShatterZed(ZedVictim, idx, instigatedBy.Controller, DamageType);
|
||||
}
|
||||
}
|
||||
else
|
||||
Damage = 0;
|
||||
}
|
||||
else {
|
||||
Frozen[idx].LastFrozenBy = PC;
|
||||
Frozen[idx].LastFrozenDamType = FreezeDT;
|
||||
// Freeze over Time
|
||||
if ( FreezeDT.default.FoT_Duration > 0 && (Frozen[idx].FoT_Remaining < 0.5
|
||||
|| Frozen[idx].FoT < Damage * FreezeDT.default.FoT_Ratio) )
|
||||
{
|
||||
Frozen[idx].FoT_Remaining = FreezeDT.default.FoT_Duration;
|
||||
Frozen[idx].FoT = Damage * FreezeDT.default.FoT_Ratio;
|
||||
}
|
||||
if ( Frozen[idx].CurrentFreeze >= Frozen[idx].FreezeTreshold ) {
|
||||
// enough damage to freeze zed
|
||||
FreezeZed(ZedVictim, idx);
|
||||
Frozen[idx].bFrozen = true;
|
||||
Frozen[idx].WarmTime = fmax(Frozen[idx].WarmTime, Level.TimeSeconds + 2.0);
|
||||
}
|
||||
else
|
||||
Frozen[idx].WarmTime = fmax(Frozen[idx].WarmTime, Level.TimeSeconds + 1.0);
|
||||
}
|
||||
}
|
||||
//debug
|
||||
// Level.GetLocalPlayerController().ClientMessage(Frozen[idx].CurrentFreeze $" / "$ Frozen[idx].FreezeTreshold);
|
||||
}
|
||||
else {
|
||||
idx = FrozenIndex(ZedVictim, false);
|
||||
if ( idx != -1 ) {
|
||||
if ( KFDamType.default.bDealBurningDamage ) {
|
||||
// fire instantly unfreezes zed
|
||||
if ( Frozen[idx].bFrozen )
|
||||
UnfreezeZed(ZedVictim, idx);
|
||||
Frozen.remove(idx, 1);
|
||||
}
|
||||
else if ( Frozen[idx].bFrozen ) {
|
||||
if ( KFDamType.default.bCheckForHeadShots && class<DamTypeCrossbuzzsaw>(KFDamType) == none ) {
|
||||
Damage *= KFDamType.default.HeadShotDamageMult;
|
||||
if ( KFDamType.default.bIsPowerWeapon || KFDamType.default.bIsMeleeDamage ) {
|
||||
Frozen[idx].Damage += Damage * FrozenDamageMultSG;
|
||||
if ( ClassIsChildOf(KFDamType, class'DamTypeChainsaw')
|
||||
&& Level.TimeSeconds > NextChainsawTime )
|
||||
{
|
||||
ProgressAchievement(PC, 'Freeze_Chainsaw', 1);
|
||||
ProgressAchievement(Frozen[idx].LastFrozenBy, 'Freeze_Chainsaw', 1);
|
||||
NextChainsawTime = Level.TimeSeconds + 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
Frozen[idx].Damage += Damage * FrozenDamageMultHS;
|
||||
}
|
||||
else
|
||||
Frozen[idx].Damage += Damage * FrozenDamageMult;
|
||||
Damage *= FrozenDamageResistance;
|
||||
if ( ZedVictim.Health <= Damage + Frozen[idx].Damage ) {
|
||||
Damage += Frozen[idx].Damage;
|
||||
ShatterZed(ZedVictim, idx, instigatedBy.Controller, DamageType);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( NextGameRules != None )
|
||||
return NextGameRules.NetDamage( OriginalDamage,Damage,injured,instigatedBy,HitLocation,Momentum,DamageType);
|
||||
|
||||
return Damage;
|
||||
}
|
||||
|
||||
function bool PreventDeath(Pawn Killed, Controller Killer, class<DamageType> damageType, vector HitLocation)
|
||||
{
|
||||
local KFMonster M;
|
||||
local PlayerController Zapper;
|
||||
|
||||
if ( (NextGameRules != None) && NextGameRules.PreventDeath(Killed,Killer, damageType,HitLocation) )
|
||||
return true;
|
||||
|
||||
M = KFMonster(Killed);
|
||||
if ( M != none && M.ZappedBy != none )
|
||||
Zapper = PlayerController(M.ZappedBy.Controller);
|
||||
// killing zapped zed gives perk progression to zapper
|
||||
if ( Zapper != none && SRStatsBase(Zapper.SteamStatsAndAchievements) != none
|
||||
&& SRStatsBase(Zapper.SteamStatsAndAchievements).Rep != none )
|
||||
SRStatsBase(Zapper.SteamStatsAndAchievements).Rep.ProgressCustomValue(Class'HTecProg', min(1, M.default.ZapThreshold * 4.01));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function bool IsFrozen(KFMonster M)
|
||||
{
|
||||
local int i;
|
||||
|
||||
i = FrozenIndex(M, false);
|
||||
return i >= 0 && Frozen[i].bFrozen;
|
||||
}
|
||||
|
||||
function int FrozenIndex(KFMonster M, bool bCreate)
|
||||
{
|
||||
local int i;
|
||||
|
||||
for ( i=0; i < Frozen.length; ++i )
|
||||
if ( Frozen[i].M == M )
|
||||
return i;
|
||||
|
||||
if ( bCreate ) {
|
||||
Frozen.insert(i, 1);
|
||||
Frozen[i].M = M;
|
||||
Frozen[i].FreezeTreshold = M.HealthMax * FreezeTreshold;
|
||||
Frozen[i].WarmTime = Level.TimeSeconds + 2.0;
|
||||
return i;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
function int GetFrozenCount()
|
||||
{
|
||||
local int i, c;
|
||||
|
||||
for ( i=0; i < Frozen.length; ++i )
|
||||
if ( Frozen[i].bFrozen && Frozen[i].M != none && Frozen[i].M.Health > 0 )
|
||||
++c;
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
|
||||
function Tick(float DeltaTime)
|
||||
{
|
||||
local int i;
|
||||
local bool bRemove;
|
||||
local byte FrozenCount;
|
||||
|
||||
while ( i < Frozen.length ) {
|
||||
bRemove = Frozen[i].M == none || Frozen[i].M.Health <= 0;
|
||||
|
||||
if ( !bRemove ) {
|
||||
if ( Frozen[i].FoT_Remaining > 0 ) {
|
||||
Frozen[i].CurrentFreeze += Frozen[i].FoT * DeltaTime;
|
||||
Frozen[i].FoT_Remaining -= DeltaTime;
|
||||
Frozen[i].WarmTime = fmax(Frozen[i].WarmTime, Level.TimeSeconds + 1.0);
|
||||
if ( !Frozen[i].bFrozen && Frozen[i].CurrentFreeze >= Frozen[i].FreezeTreshold ) {
|
||||
FreezeZed(Frozen[i].M, i);
|
||||
Frozen[i].bFrozen = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ( Frozen[i].CurrentFreeze > 0 && Level.TimeSeconds >= Frozen[i].WarmTime ) {
|
||||
Frozen[i].CurrentFreeze -= fmax(Frozen[i].CurrentFreeze * 0.2, 20.0) * DeltaTime;
|
||||
if ( Frozen[i].bFrozen && Frozen[i].CurrentFreeze < Frozen[i].FreezeTreshold ) {
|
||||
UnfreezeZed(Frozen[i].M, i);
|
||||
Frozen[i].bFrozen = false;
|
||||
Frozen[i].Damage = 0;
|
||||
Frozen[i].CurrentFreeze *= 0.80;
|
||||
}
|
||||
if ( Frozen[i].CurrentFreeze <= 0 )
|
||||
bRemove = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ( Frozen[i].bFrozen ) {
|
||||
FrozenCount++;
|
||||
if ( Frozen[i].M.IsAnimating(0) || Frozen[i].M.IsAnimating(1) )
|
||||
FreezeZed(Frozen[i].M, i);
|
||||
else if ( Frozen[i].M.Controller != none ) {
|
||||
// prevent rotating
|
||||
Frozen[i].M.Controller.FocalPoint = Frozen[i].FocalPoint;
|
||||
Frozen[i].M.Controller.Enemy = none;
|
||||
Frozen[i].M.Controller.Focus = none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( bRemove )
|
||||
Frozen.Remove(i, 1);
|
||||
else
|
||||
i++;
|
||||
}
|
||||
if ( FrozenCount != FreezeRI.FrozenCount ) {
|
||||
FreezeRI.FrozenCount = FrozenCount;
|
||||
FreezeRI.NetUpdateTime = Level.TimeSeconds - 1;
|
||||
}
|
||||
}
|
||||
|
||||
// call it only if zed isn't frozen yet
|
||||
function FreezeZed(KFMonster M, int FrozenIndex)
|
||||
{
|
||||
if ( !Frozen[FrozenIndex].bWasFrozen ) {
|
||||
Frozen[FrozenIndex].bWasFrozen = true;
|
||||
if ( ZombieCrawler(M) != none && M.Physics == PHYS_Falling )
|
||||
ProgressAchievement(Frozen[FrozenIndex].LastFrozenBy, 'Freeze_CR', 1);
|
||||
else if ( ZombieFleshpound(M) != none )
|
||||
ProgressAchievement(Frozen[FrozenIndex].LastFrozenBy, 'Freeze_FP', 1);
|
||||
else if ( ZombieBoss(M) != none )
|
||||
ProgressAchievement(Frozen[FrozenIndex].LastFrozenBy, 'Freeze_Pat', 1);
|
||||
ProgressAchievement(Frozen[FrozenIndex].LastFrozenBy, 'Freeze_IceAge', 1);
|
||||
}
|
||||
if ( Frozen.length >= 20 && GetFrozenCount() >= 20 )
|
||||
ScrnGameRules.ProgressAchievementForAllPlayers('Freeze_Festival', 1, true);
|
||||
|
||||
M.SetOverlayMaterial(FreezeRI.FrozenMaterial, 999, true);
|
||||
Frozen[FrozenIndex].FocalPoint = M.Location + 512*vector(M.Rotation);
|
||||
M.Velocity = M.PhysicsVolume.Gravity;
|
||||
M.AnimAction = '';
|
||||
M.bShotAnim = true;
|
||||
M.bWaitForAnim = true;
|
||||
M.Disable('AnimEnd');
|
||||
class'FreezeReplicationInfo'.static.RemoveAnimations(M);
|
||||
M.Acceleration = vect(0, 0, 0);
|
||||
M.SetTimer(0, false);
|
||||
M.StopAnimating();
|
||||
|
||||
if ( M.HeadRadius > 0 )
|
||||
M.HeadRadius = -M.HeadRadius; // disable headshots
|
||||
|
||||
if ( M.Controller != none ) {
|
||||
M.Controller.FocalPoint = Frozen[FrozenIndex].FocalPoint;
|
||||
M.Controller.Enemy = none;
|
||||
M.Controller.Focus = none;
|
||||
if ( !M.Controller.IsInState('WaitForAnim') )
|
||||
M.Controller.GoToState('WaitForAnim');
|
||||
KFMonsterController(M.Controller).bUseFreezeHack = True;
|
||||
}
|
||||
}
|
||||
|
||||
function UnfreezeZed(KFMonster M, int FrozenIndex)
|
||||
{
|
||||
if ( M == none || M.Controller == none || M.Health <= 0 )
|
||||
return;
|
||||
|
||||
M.SetOverlayMaterial(none, 0.1, true);
|
||||
|
||||
if ( M.HeadRadius < 0 )
|
||||
M.HeadRadius = -M.HeadRadius; //enable headshots
|
||||
M.bShotAnim = false;
|
||||
M.bWaitForAnim = false;
|
||||
M.Enable('AnimEnd');
|
||||
class'FreezeReplicationInfo'.static.RestoreAnimations(M);
|
||||
M.AnimEnd(1);
|
||||
M.AnimEnd(0);
|
||||
//KFMonsterController(M.Controller).WhatToDoNext(99);
|
||||
M.Controller.GotoState('ZombieHunt');
|
||||
M.GroundSpeed = M.GetOriginalGroundSpeed();
|
||||
// this should "wake up" raged scrakes
|
||||
M.TakeDamage(1, M, M.Location, vect(0,0,0), class'DamTypeFreezerBase');
|
||||
}
|
||||
|
||||
function bool ShatterZed(KFMonster ZedVictim, int FrozenIdx, Controller Killer, class<DamageType> DamageType)
|
||||
{
|
||||
local vector loc;
|
||||
local rotator r;
|
||||
local FrozenDosh Dosh, PrevDosh, HeadDosh;
|
||||
local int i;
|
||||
local int MaxDosh;
|
||||
local KFPlayerReplicationInfo KFPRI;
|
||||
local SRStatsBase FreezerStats;
|
||||
|
||||
if ( FrozenIdx < 0 )
|
||||
FrozenIdx = FrozenIndex(ZedVictim, false);
|
||||
if ( FrozenIdx < 0 )
|
||||
return false; // zed is not frozen
|
||||
|
||||
if ( Killer != none )
|
||||
KFPRI = KFPlayerReplicationInfo(Killer.PlayerReplicationInfo);
|
||||
FreezerStats = SRStatsBase(Frozen[FrozenIdx].LastFrozenBy.SteamStatsAndAchievements);
|
||||
loc = ZedVictim.Location;
|
||||
|
||||
if ( bDosh && !ZedVictim.bDecapitated && DamageType != class'SirenScreamDamage' ) {
|
||||
if ( KFPRI != none && KFPRI.ClientVeteranSkill != none )
|
||||
MaxDosh = KFPRI.ClientVeteranSkill.static.GetCostScaling(KFPRI, class'FrozenDosh')
|
||||
* 0.2 * ZedVictim.ScoringValue;
|
||||
else
|
||||
MaxDosh = ZedVictim.ScoringValue / 5;
|
||||
}
|
||||
|
||||
if ( LastShatteredBy == Killer && LastShaterTime == Level.TimeSeconds ) {
|
||||
if ( ++InstantShatterCounter == 10 ) {
|
||||
ProgressAchievement(PlayerController(Killer), 'Freeze_Storm', 1);
|
||||
InstantShatterCounter = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
LastShatteredBy = PlayerController(Killer);
|
||||
LastShaterTime = Level.TimeSeconds;
|
||||
InstantShatterCounter = 1;
|
||||
}
|
||||
|
||||
if ( FreezerStats != none && !ZedVictim.bDecapitated ) {
|
||||
if (ZedVictim.default.Health >= 1500)
|
||||
i = 4;
|
||||
if (ZedVictim.default.Health >= 1000)
|
||||
i = 3;
|
||||
else if (ZedVictim.default.Health >= 500)
|
||||
i = 2;
|
||||
else
|
||||
i = 1;
|
||||
FreezerStats.Rep.ProgressCustomValue(Class'HTecProg', i);
|
||||
|
||||
if ( LastShatteredBy != none && LastShatteredBy != Frozen[FrozenIdx].LastFrozenBy ) {
|
||||
class'ScrnAchievements'.static.ProgressAchievementByID(FreezerStats.Rep, 'Freeze_ShatterZeds', 1);
|
||||
ProgressAchievement(LastShatteredBy, 'Freeze_ShatterZeds', 1);
|
||||
}
|
||||
}
|
||||
if ( ZombieBoss(ZedVictim) != none )
|
||||
ScrnGameRules.ProgressAchievementForAllPlayers('Freeze_ShatterPat', 1, true);
|
||||
|
||||
Spawn(ShatteredIce,,,loc);
|
||||
ZedVictim.bHidden = true;
|
||||
ZedVictim.Died(Killer, DamageType, loc );
|
||||
|
||||
// DO$H DO$H DO$H DO$H DO$H
|
||||
if ( MaxDosh > 0 ) {
|
||||
r = ZedVictim.GetViewRotation();
|
||||
for ( i=0; i<5; ++i ) {
|
||||
Dosh = Spawn(class'FrozenDosh',,, loc);
|
||||
if ( Dosh != none ) {
|
||||
// link all doshes together
|
||||
if ( HeadDosh == none )
|
||||
HeadDosh = Dosh;
|
||||
Dosh.HeadDosh = HeadDosh;
|
||||
if ( PrevDosh != none )
|
||||
PrevDosh.NextDosh = Dosh;
|
||||
|
||||
Dosh.CashAmount = 1 + rand(MaxDosh);
|
||||
Dosh.RespawnTime = 0;
|
||||
Dosh.bDroppedCash = True;
|
||||
if ( Killer == Frozen[FrozenIdx].LastFrozenBy )
|
||||
Dosh.DroppedBy = Killer;
|
||||
Dosh.Velocity = Vector(r) * 100;
|
||||
Dosh.Velocity.Z += 500;
|
||||
Dosh.InitDroppedPickupFor(None);
|
||||
PrevDosh = Dosh;
|
||||
}
|
||||
r.Yaw += 13107;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function bool ProgressAchievement(PlayerController PC, name ID, int Prog)
|
||||
{
|
||||
if ( PC != none && SRStatsBase(PC.SteamStatsAndAchievements) != none )
|
||||
return class'ScrnAchievements'.static.ProgressAchievementByID(SRStatsBase(PC.SteamStatsAndAchievements).Rep, ID, Prog);
|
||||
return false;
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FreezeTreshold=0.333333
|
||||
FrozenDamageResistance=0.500000
|
||||
FrozenDamageMult=1.500000
|
||||
FrozenDamageMultHS=4.500000
|
||||
FrozenDamageMultSG=2.500000
|
||||
ShatteredIce=Class'ScrnHTec.IceChunkEmitter'
|
||||
bDosh=True
|
||||
}
|
||||
35
kf_sources/ScrnHTec/Classes/FreezerAltFire.uc
Normal file
35
kf_sources/ScrnHTec/Classes/FreezerAltFire.uc
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
class FreezerAltFire extends NitroFire;
|
||||
|
||||
|
||||
function float MaxRange()
|
||||
{
|
||||
return 1500;
|
||||
}
|
||||
|
||||
simulated function bool AllowFire()
|
||||
{
|
||||
local FreezerGun W;
|
||||
|
||||
W = FreezerGun(Weapon);
|
||||
if( W.bIsReloading || KFPawn(Instigator).SecondaryItem != none || KFPawn(Instigator).bThrowingNade )
|
||||
return false;
|
||||
|
||||
if ( W.AltMagAmmoRemaining < 1 ) {
|
||||
if ( Level.TimeSeconds - LastClickTime > FireRate ) {
|
||||
W.PlayOwnedSound(NoAmmoSound, SLOT_Interact, TransientSoundVolume,,,, false);
|
||||
LastClickTime = Level.TimeSeconds;
|
||||
if(Weapon.HasAnim(EmptyAnim))
|
||||
Weapon.PlayAnim(EmptyAnim, EmptyAnimRate, 0.0);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
LastClickTime = Level.TimeSeconds;
|
||||
|
||||
return Super(WeaponFire).AllowFire();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoClass=Class'ScrnHTec.FreezerAmmo'
|
||||
ProjectileClass=Class'ScrnHTec.FreezerNitroProjectile'
|
||||
}
|
||||
14
kf_sources/ScrnHTec/Classes/FreezerAmmo.uc
Normal file
14
kf_sources/ScrnHTec/Classes/FreezerAmmo.uc
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
class FreezerAmmo extends KFAmmunition;
|
||||
|
||||
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=90
|
||||
MaxAmmo=540
|
||||
InitialAmount=180
|
||||
PickupClass=Class'ScrnHTec.FreezerAmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=336,Y1=82,X2=382,Y2=125)
|
||||
ItemName="Liquid Nitrogen"
|
||||
}
|
||||
9
kf_sources/ScrnHTec/Classes/FreezerAmmoPickup.uc
Normal file
9
kf_sources/ScrnHTec/Classes/FreezerAmmoPickup.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class FreezerAmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=90
|
||||
InventoryType=Class'ScrnHTec.FreezerAmmo'
|
||||
PickupMessage="ML of Liquid Nitrogen"
|
||||
StaticMesh=StaticMesh'KillingFloorStatics.FT_AmmoMesh'
|
||||
}
|
||||
57
kf_sources/ScrnHTec/Classes/FreezerAttachment.uc
Normal file
57
kf_sources/ScrnHTec/Classes/FreezerAttachment.uc
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
class FreezerAttachment extends KFWeaponAttachment;
|
||||
|
||||
#exec OBJ LOAD FILE=HTec_A.ukx
|
||||
|
||||
// No dynamic light when firing this
|
||||
simulated function WeaponLight(){}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdNailGun'
|
||||
MovementAnims(0)="JogF_Cheetah"
|
||||
MovementAnims(1)="JogB_Cheetah"
|
||||
MovementAnims(2)="JogL_Cheetah"
|
||||
MovementAnims(3)="JogR_Cheetah"
|
||||
TurnLeftAnim="TurnL_Cheetah"
|
||||
TurnRightAnim="TurnR_Cheetah"
|
||||
CrouchAnims(0)="CHwalkF_Cheetah"
|
||||
CrouchAnims(1)="CHwalkB_Cheetah"
|
||||
CrouchAnims(2)="CHwalkL_Cheetah"
|
||||
CrouchAnims(3)="CHwalkR_Cheetah"
|
||||
WalkAnims(0)="WalkF_Cheetah"
|
||||
WalkAnims(1)="WalkB_Cheetah"
|
||||
WalkAnims(2)="WalkL_Cheetah"
|
||||
WalkAnims(3)="WalkR_Cheetah"
|
||||
CrouchTurnRightAnim="CH_TurnR_Cheetah"
|
||||
CrouchTurnLeftAnim="CH_TurnL_Cheetah"
|
||||
IdleCrouchAnim="CHIdle_Cheetah"
|
||||
IdleWeaponAnim="Idle_Cheetah"
|
||||
IdleRestAnim="Idle_Cheetah"
|
||||
IdleChatAnim="Idle_Cheetah"
|
||||
IdleHeavyAnim="Idle_Cheetah"
|
||||
IdleRifleAnim="Idle_Cheetah"
|
||||
FireAnims(0)="Fire_AK47"
|
||||
FireAnims(1)="Fire_AK47"
|
||||
FireAnims(2)="Fire_AK47"
|
||||
FireAnims(3)="Fire_AK47"
|
||||
FireAltAnims(0)="Fire_AK47"
|
||||
FireAltAnims(1)="Fire_AK47"
|
||||
FireAltAnims(2)="Fire_AK47"
|
||||
FireAltAnims(3)="Fire_AK47"
|
||||
FireCrouchAnims(0)="CHFire_AK47"
|
||||
FireCrouchAnims(1)="CHFire_AK47"
|
||||
FireCrouchAnims(2)="CHFire_AK47"
|
||||
FireCrouchAnims(3)="CHFire_AK47"
|
||||
FireCrouchAltAnims(0)="CHFire_AK47"
|
||||
FireCrouchAltAnims(1)="CHFire_AK47"
|
||||
FireCrouchAltAnims(2)="CHFire_AK47"
|
||||
FireCrouchAltAnims(3)="CHFire_AK47"
|
||||
HitAnims(0)="HitF_Cheetah"
|
||||
HitAnims(1)="HitB_Cheetah"
|
||||
HitAnims(2)="HitL_Cheetah"
|
||||
HitAnims(3)="HitR_Cheetah"
|
||||
PostFireBlendStandAnim="Blend_Cheetah"
|
||||
PostFireBlendCrouchAnim="CHBlend_Cheetah"
|
||||
MeshRef="HTec_A.FreezerGun_3rd"
|
||||
Mesh=SkeletalMesh'HTec_A.FreezerGun_3rd'
|
||||
}
|
||||
6
kf_sources/ScrnHTec/Classes/FreezerDart.uc
Normal file
6
kf_sources/ScrnHTec/Classes/FreezerDart.uc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class FreezerDart extends IceDart;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MyDamageType=Class'ScrnHTec.DamTypeFreezerDart'
|
||||
}
|
||||
14
kf_sources/ScrnHTec/Classes/FreezerDartAmmo.uc
Normal file
14
kf_sources/ScrnHTec/Classes/FreezerDartAmmo.uc
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
class FreezerDartAmmo extends KFAmmunition;
|
||||
|
||||
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=30
|
||||
MaxAmmo=240
|
||||
InitialAmount=90
|
||||
PickupClass=Class'ScrnHTec.FreezerDartAmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=336,Y1=82,X2=382,Y2=125)
|
||||
ItemName="Ice Shards"
|
||||
}
|
||||
8
kf_sources/ScrnHTec/Classes/FreezerDartAmmoPickup.uc
Normal file
8
kf_sources/ScrnHTec/Classes/FreezerDartAmmoPickup.uc
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
class FreezerDartAmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=30
|
||||
InventoryType=Class'ScrnHTec.FreezerDartAmmo'
|
||||
PickupMessage="Ice Shards"
|
||||
}
|
||||
67
kf_sources/ScrnHTec/Classes/FreezerFire.uc
Normal file
67
kf_sources/ScrnHTec/Classes/FreezerFire.uc
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
class FreezerFire extends KFShotgunFire;
|
||||
|
||||
simulated function PostBeginPlay()
|
||||
{
|
||||
super.PostBeginPlay();
|
||||
Load = ProjPerFire; // don't use AmmoPerFire here
|
||||
}
|
||||
|
||||
simulated function bool AllowFire()
|
||||
{
|
||||
if(KFWeapon(Weapon).bIsReloading)
|
||||
return false;
|
||||
if(KFPawn(Instigator).SecondaryItem!=none)
|
||||
return false;
|
||||
if(KFPawn(Instigator).bThrowingNade)
|
||||
return false;
|
||||
|
||||
if(KFWeapon(Weapon).MagAmmoRemaining < AmmoPerFire)
|
||||
{
|
||||
if( Level.TimeSeconds - LastClickTime>FireRate )
|
||||
{
|
||||
LastClickTime = Level.TimeSeconds;
|
||||
}
|
||||
|
||||
if( AIController(Instigator.Controller)!=None )
|
||||
KFWeapon(Weapon).ReloadMeNow();
|
||||
return false;
|
||||
}
|
||||
|
||||
return super(WeaponFire).AllowFire();
|
||||
}
|
||||
|
||||
event ModeDoFire()
|
||||
{
|
||||
super.ModeDoFire();
|
||||
Load = ProjPerFire; // don't use AmmoPerFire here
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
RecoilRate=0.130000
|
||||
maxVerticalRecoilAngle=200
|
||||
maxHorizontalRecoilAngle=75
|
||||
FireAimedAnim="Fire_Iron"
|
||||
FireSoundRef="HTec_A.Fire1mono"
|
||||
StereoFireSoundRef="HTec_A.Fire1"
|
||||
NoAmmoSoundRef="KF_NailShotgun.Fire.KF_NailShotgun_Dryfire"
|
||||
ProjPerFire=1
|
||||
ProjSpawnOffset=(X=18.000000,Z=-8.000000)
|
||||
TransientSoundVolume=1.000000
|
||||
FireLoopAnim="Fire"
|
||||
FireAnimRate=1.200000
|
||||
TweenTime=0.001500
|
||||
FireRate=0.150000
|
||||
AmmoClass=Class'ScrnHTec.FreezerDartAmmo'
|
||||
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
|
||||
ProjectileClass=Class'ScrnHTec.FreezerDart'
|
||||
BotRefireRate=0.990000
|
||||
FlashEmitterClass=Class'ScrnHTec.IceDartMuzzleFlash'
|
||||
aimerror=42.000000
|
||||
Spread=0.008000
|
||||
}
|
||||
431
kf_sources/ScrnHTec/Classes/FreezerGun.uc
Normal file
431
kf_sources/ScrnHTec/Classes/FreezerGun.uc
Normal file
|
|
@ -0,0 +1,431 @@
|
|||
class FreezerGun extends KFWeapon;
|
||||
|
||||
#exec OBJ LOAD FILE=HTec_A.ukx
|
||||
|
||||
var ScriptedTexture AmmoCounterScrTex;
|
||||
var string AmmoCounterScrTexRef;
|
||||
var string MyMessage;
|
||||
var Font MyFont, SmallMyFont;
|
||||
var String FontRef, FontSmallRef;
|
||||
var color MyFontColor;
|
||||
|
||||
var int AltMagAmmoRemaining;
|
||||
var() int AltMagCapacity;
|
||||
|
||||
var int RenderedValue;
|
||||
var localized string ReloadMessage;
|
||||
var localized string EmptyMessage;
|
||||
|
||||
var array<Material> GlowSkins; // 0 - glow off, length-1 - all lights on
|
||||
var array<string> GlowSkinRefs; // 0 - glow off, length-1 - all lights on
|
||||
|
||||
replication
|
||||
{
|
||||
reliable if(Role == ROLE_Authority)
|
||||
AltMagAmmoRemaining;
|
||||
|
||||
reliable if( bNetDirty && bNetOwner && Role==ROLE_Authority )
|
||||
AltMagCapacity;
|
||||
}
|
||||
|
||||
static function PreloadAssets(Inventory Inv, optional bool bSkipRefCount)
|
||||
{
|
||||
local FreezerGun W;
|
||||
local int i;
|
||||
|
||||
super.PreloadAssets(Inv, bSkipRefCount);
|
||||
|
||||
default.AmmoCounterScrTex = ScriptedTexture(DynamicLoadObject(default.AmmoCounterScrTexRef, class'ScriptedTexture', true));
|
||||
default.MyFont = Font(DynamicLoadObject(default.FontRef, class'Font', true));
|
||||
default.SmallMyFont = Font(DynamicLoadObject(default.FontSmallRef, class'Font', true));
|
||||
for ( i = 0; i < default.GlowSkinRefs.Length; i++ )
|
||||
default.GlowSkins[i] = Material(DynamicLoadObject(default.GlowSkinRefs[i], class'Material'));
|
||||
|
||||
W = FreezerGun(Inv);
|
||||
if ( W != none ) {
|
||||
W.AmmoCounterScrTex = default.AmmoCounterScrTex;
|
||||
W.SmallMyFont = default.SmallMyFont;
|
||||
W.MyFont = default.MyFont;
|
||||
for ( i = 0; i < default.GlowSkins.Length; i++ )
|
||||
W.GlowSkins[i] = default.GlowSkins[i];
|
||||
}
|
||||
}
|
||||
|
||||
static function bool UnloadAssets()
|
||||
{
|
||||
local int i;
|
||||
|
||||
if ( super.UnloadAssets() ) {
|
||||
default.AmmoCounterScrTex = none;
|
||||
default.SmallMyFont = none;
|
||||
default.MyFont = none;
|
||||
for ( i = 0; i < default.GlowSkins.Length; i++ )
|
||||
default.GlowSkins[i] = none;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
simulated final function SetTextColor( byte R, byte G, byte B )
|
||||
{
|
||||
MyFontColor.R = R;
|
||||
MyFontColor.G = G;
|
||||
MyFontColor.B = B;
|
||||
MyFontColor.A = 255;
|
||||
}
|
||||
|
||||
|
||||
simulated function RenderOverlays( Canvas Canvas )
|
||||
{
|
||||
local float CurValue;
|
||||
|
||||
CurValue = (AmmoAmount(0) + AmmoAmount(1))*1000 + MagAmmoRemaining + AltMagAmmoRemaining;
|
||||
if( MagAmmoRemaining <= 0 && AltMagAmmoRemaining <= 0 )
|
||||
{
|
||||
if( RenderedValue!=-5 )
|
||||
{
|
||||
RenderedValue = -5;
|
||||
MyFont = SmallMyFont;
|
||||
SetTextColor(218,18,18);
|
||||
MyMessage = EmptyMessage;
|
||||
++AmmoCounterScrTex.Revision;
|
||||
GlowOff();
|
||||
}
|
||||
}
|
||||
else if( bIsReloading )
|
||||
{
|
||||
if( RenderedValue!=-4 )
|
||||
{
|
||||
RenderedValue = -4;
|
||||
MyFont = SmallMyFont;
|
||||
SetTextColor(30,38,43);
|
||||
MyMessage = ReloadMessage;
|
||||
++AmmoCounterScrTex.Revision;
|
||||
}
|
||||
}
|
||||
else if( RenderedValue != CurValue )
|
||||
{
|
||||
RenderedValue = CurValue;
|
||||
MyFont = SmallMyFont;
|
||||
|
||||
//if ((MagAmmoRemaining ) <= (MagCapacity/2))
|
||||
// SetTextColor(32,60,77);
|
||||
if ( MagAmmoRemaining < 10 || AltMagAmmoRemaining < 30 )
|
||||
SetTextColor(224,44,56);
|
||||
else
|
||||
SetTextColor(30,38,43);
|
||||
MyMessage = MagAmmoRemaining $ " / " $ AltMagAmmoRemaining;
|
||||
++AmmoCounterScrTex.Revision;
|
||||
// glowstage
|
||||
if ( AltMagAmmoRemaining == 0 )
|
||||
GlowOff();
|
||||
else
|
||||
GlowStage(AltMagAmmoRemaining/15 + 1);
|
||||
}
|
||||
|
||||
AmmoCounterScrTex.Client = Self;
|
||||
Super.RenderOverlays(Canvas);
|
||||
AmmoCounterScrTex.Client = None;
|
||||
}
|
||||
|
||||
simulated function RenderTexture( ScriptedTexture Tex )
|
||||
{
|
||||
local int w, h;
|
||||
|
||||
// Ammo - ( w / 2 ) - ( h / 1.2 )
|
||||
Tex.TextSize( MyMessage, MyFont, w, h );
|
||||
Tex.DrawText( ( Tex.USize / 2.4) - ( w / 2 ), (Tex.VSize / 2 ) - ( h / 2 ),MyMessage, MyFont, MyFontColor );
|
||||
}
|
||||
|
||||
|
||||
simulated function bool ConsumeAmmo( int Mode, float Load, optional bool bAmountNeededIsMax )
|
||||
{
|
||||
local Inventory Inv;
|
||||
local bool bOutOfAmmo;
|
||||
local KFWeapon KFWeap;
|
||||
|
||||
if ( Load > 0 )
|
||||
Load = FireMode[Mode].AmmoPerFire;
|
||||
if ( Super(Weapon).ConsumeAmmo(Mode, Load, bAmountNeededIsMax) )
|
||||
{
|
||||
if ( Load > 0 && (Mode == 0 || bReduceMagAmmoOnSecondaryFire) ) {
|
||||
MagAmmoRemaining -= Load; // Changed from "MagAmmoRemaining--" -- PooSH
|
||||
if ( MagAmmoRemaining < 0 )
|
||||
MagAmmoRemaining = 0;
|
||||
}
|
||||
else if ( Load > 0 && Mode == 1 ) {
|
||||
AltMagAmmoRemaining -= Load;
|
||||
if ( AltMagAmmoRemaining < 0 )
|
||||
AltMagAmmoRemaining = 0;
|
||||
}
|
||||
if ( AltMagAmmoRemaining == 0 )
|
||||
GlowOff();
|
||||
|
||||
NetUpdateTime = Level.TimeSeconds - 1;
|
||||
|
||||
if ( FireMode[Mode].AmmoPerFire > 0 && InventoryGroup > 0 && !bMeleeWeapon && bConsumesPhysicalAmmo
|
||||
&& (Ammo[0] == none || FireMode[0] == none || FireMode[0].AmmoPerFire <= 0 || Ammo[0].AmmoAmount < FireMode[0].AmmoPerFire)
|
||||
&& (Ammo[1] == none || FireMode[1] == none || FireMode[1].AmmoPerFire <= 0 || Ammo[1].AmmoAmount < FireMode[1].AmmoPerFire) )
|
||||
{
|
||||
bOutOfAmmo = true;
|
||||
|
||||
for ( Inv = Instigator.Inventory; Inv != none; Inv = Inv.Inventory )
|
||||
{
|
||||
KFWeap = KFWeapon(Inv);
|
||||
|
||||
if ( Inv.InventoryGroup > 0 && KFWeap != none && !KFWeap.bMeleeWeapon && KFWeap.bConsumesPhysicalAmmo &&
|
||||
((KFWeap.Ammo[0] != none && KFWeap.FireMode[0] != none && KFWeap.FireMode[0].AmmoPerFire > 0 &&KFWeap.Ammo[0].AmmoAmount >= KFWeap.FireMode[0].AmmoPerFire) ||
|
||||
(KFWeap.Ammo[1] != none && KFWeap.FireMode[1] != none && KFWeap.FireMode[1].AmmoPerFire > 0 && KFWeap.Ammo[1].AmmoAmount >= KFWeap.FireMode[1].AmmoPerFire)) )
|
||||
{
|
||||
bOutOfAmmo = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( bOutOfAmmo )
|
||||
{
|
||||
PlayerController(Instigator.Controller).Speech('AUTO', 3, "");
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
simulated function bool StartFire(int Mode)
|
||||
{
|
||||
if( Mode == 0 )
|
||||
return super.StartFire(Mode);
|
||||
|
||||
if( !super.StartFire(Mode) ) // returns false when mag is empty
|
||||
return false;
|
||||
|
||||
if( AmmoAmount(Mode) <= 0 )
|
||||
return false;
|
||||
|
||||
AnimStopLooping();
|
||||
|
||||
if( !FireMode[Mode].IsInState('FireLoop') && (AmmoAmount(Mode) > 0) )
|
||||
{
|
||||
FireMode[Mode].StartFiring();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
simulated function AnimEnd(int channel)
|
||||
{
|
||||
if(!FireMode[1].IsInState('FireLoop'))
|
||||
{
|
||||
Super.AnimEnd(channel);
|
||||
}
|
||||
}
|
||||
|
||||
// Allow this weapon to auto reload on alt fire
|
||||
simulated function Fire(float F)
|
||||
{
|
||||
if( MagAmmoRemaining < FireMode[0].AmmoPerFire && !bIsReloading &&
|
||||
FireMode[0].NextFireTime <= Level.TimeSeconds )
|
||||
{
|
||||
// We're dry, ask the server to autoreload
|
||||
ServerRequestAutoReload();
|
||||
|
||||
PlayOwnedSound(FireMode[0].NoAmmoSound,SLOT_None,2.0,,,,false);
|
||||
}
|
||||
|
||||
super.Fire(F);
|
||||
}
|
||||
|
||||
simulated function AltFire(float F)
|
||||
{
|
||||
if( AltMagAmmoRemaining < FireMode[1].AmmoPerFire && !bIsReloading &&
|
||||
FireMode[1].NextFireTime <= Level.TimeSeconds )
|
||||
{
|
||||
// We're dry, ask the server to autoreload
|
||||
ServerRequestAutoReload();
|
||||
|
||||
PlayOwnedSound(FireMode[1].NoAmmoSound,SLOT_None,2.0,,,,false);
|
||||
}
|
||||
|
||||
super.AltFire(F);
|
||||
}
|
||||
|
||||
simulated function bool AllowReload()
|
||||
{
|
||||
if ( bIsReloading )
|
||||
return false;
|
||||
|
||||
UpdateMagCapacity(Instigator.PlayerReplicationInfo);
|
||||
if ( (MagAmmoRemaining >= MagCapacity || AmmoAmount(0) <= MagAmmoRemaining)
|
||||
&& (AltMagAmmoRemaining >= AltMagCapacity || AmmoAmount(1) <= AltMagAmmoRemaining) )
|
||||
return false;
|
||||
|
||||
if ( KFInvasionBot(Instigator.Controller) != none || KFFriendlyAI(Instigator.Controller) != none )
|
||||
return true;
|
||||
|
||||
return !FireMode[0].IsFiring() && !FireMode[1].IsFiring()
|
||||
&& ClientState != WS_BringUp
|
||||
&& Level.TimeSeconds > FireMode[0].NextFireTime + 0.1
|
||||
&& Level.TimeSeconds > FireMode[1].NextFireTime + 0.1;
|
||||
}
|
||||
|
||||
simulated function UpdateMagCapacity(PlayerReplicationInfo PRI)
|
||||
{
|
||||
local float bonus;
|
||||
|
||||
bonus = 1.0;
|
||||
if ( KFPlayerReplicationInfo(PRI) != none && KFPlayerReplicationInfo(PRI).ClientVeteranSkill != none )
|
||||
{
|
||||
bonus = KFPlayerReplicationInfo(PRI).ClientVeteranSkill.Static.GetMagCapacityMod(KFPlayerReplicationInfo(PRI), self);
|
||||
}
|
||||
MagCapacity = default.MagCapacity * bonus;
|
||||
AltMagCapacity = default.AltMagCapacity * bonus;
|
||||
}
|
||||
|
||||
simulated function WeaponTick(float dt)
|
||||
{
|
||||
if ( Role == ROLE_Authority && bIsReloading && (Level.TimeSeconds - ReloadTimer) >= ReloadRate ) {
|
||||
AddReloadedAmmo();
|
||||
ActuallyFinishReloading();
|
||||
}
|
||||
super.WeaponTick(dt);
|
||||
}
|
||||
|
||||
function AddReloadedAmmo()
|
||||
{
|
||||
UpdateMagCapacity(Instigator.PlayerReplicationInfo);
|
||||
MagAmmoRemaining = min(MagCapacity, AmmoAmount(0));
|
||||
AltMagAmmoRemaining = min(AltMagCapacity, AmmoAmount(1));
|
||||
|
||||
if( !bHoldToReload )
|
||||
{
|
||||
ClientForceAmmoUpdate(0, AmmoAmount(0));
|
||||
ClientForceAmmoUpdate(1, AmmoAmount(1));
|
||||
}
|
||||
|
||||
if ( PlayerController(Instigator.Controller) != none && KFSteamStatsAndAchievements(PlayerController(Instigator.Controller).SteamStatsAndAchievements) != none )
|
||||
{
|
||||
KFSteamStatsAndAchievements(PlayerController(Instigator.Controller).SteamStatsAndAchievements).OnWeaponReloaded();
|
||||
}
|
||||
}
|
||||
|
||||
simulated function ClientFinishReloading()
|
||||
{
|
||||
bIsReloading = false;
|
||||
|
||||
// Reload animation longs 4.5s while weapon becomes ready in 3.6s
|
||||
// Continue animation for last 0.9s if player is not shooting
|
||||
// -- PooSH
|
||||
//PlayIdle();
|
||||
SetTimer(0.9, false);
|
||||
|
||||
if(Instigator.PendingWeapon != none && Instigator.PendingWeapon != self)
|
||||
Instigator.Controller.ClientSwitchToBestWeapon();
|
||||
}
|
||||
|
||||
function GiveTo( pawn Other, optional Pickup Pickup )
|
||||
{
|
||||
UpdateMagCapacity(Other.PlayerReplicationInfo);
|
||||
|
||||
if ( KFWeaponPickup(Pickup)!=None && Pickup.bDropped ) {
|
||||
MagAmmoRemaining = Clamp(KFWeaponPickup(Pickup).MagAmmoRemaining, 0, MagCapacity);
|
||||
AltMagAmmoRemaining = Clamp(FreezerPickup(Pickup).AltMagAmmoRemaining, 0, AltMagCapacity);
|
||||
}
|
||||
else {
|
||||
MagAmmoRemaining = MagCapacity;
|
||||
AltMagAmmoRemaining = AltMagCapacity;
|
||||
}
|
||||
|
||||
Super(Weapon).GiveTo(Other,Pickup);
|
||||
}
|
||||
|
||||
simulated function GlowOn()
|
||||
{
|
||||
GlowStage(255);
|
||||
}
|
||||
|
||||
simulated function GlowOff()
|
||||
{
|
||||
GlowStage(0);
|
||||
}
|
||||
|
||||
simulated function GlowStage(byte Stage)
|
||||
{
|
||||
Skins[0] = GlowSkins[min(Stage,GlowSkins.length-1)];
|
||||
}
|
||||
|
||||
simulated function Timer()
|
||||
{
|
||||
if ( ClientState == WS_ReadyToFire )
|
||||
PlayIdle();
|
||||
else
|
||||
super.Timer();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoCounterScrTexRef="HTec_A.Counter.Counter_Scripted"
|
||||
FontRef="IJCFonts.DigitalBig"
|
||||
FontSmallRef="IJCFonts.DigitalMed"
|
||||
MyFontColor=(B=177,G=148,R=76,A=255)
|
||||
AltMagCapacity=90
|
||||
ReloadMessage="REL"
|
||||
EmptyMessage="---"
|
||||
GlowSkinRefs(0)="HTec_A.FreezerGun.FreezerGun_shdr_off"
|
||||
GlowSkinRefs(1)="HTec_A.FreezerGun.FreezerGun_shdr_1"
|
||||
GlowSkinRefs(2)="HTec_A.FreezerGun.FreezerGun_shdr_2"
|
||||
GlowSkinRefs(3)="HTec_A.FreezerGun.FreezerGun_shdr_3"
|
||||
GlowSkinRefs(4)="HTec_A.FreezerGun.FreezerGun_shdr"
|
||||
MagCapacity=30
|
||||
ReloadRate=3.600000
|
||||
bHasSecondaryAmmo=True
|
||||
bReduceMagAmmoOnSecondaryFire=False
|
||||
ReloadAnim="Reload"
|
||||
ReloadAnimRate=1.000000
|
||||
WeaponReloadAnim="Reload_M7A3"
|
||||
Weight=7.000000
|
||||
bHasAimingMode=True
|
||||
IdleAimAnim="Idle_Iron"
|
||||
StandardDisplayFOV=65.000000
|
||||
bModeZeroCanDryFire=True
|
||||
SleeveNum=3
|
||||
TraderInfoTexture=Texture'HTec_A.HUD.Trader_FreezerGun'
|
||||
bIsTier3Weapon=True
|
||||
MeshRef="HTec_A.FreezerGun"
|
||||
SkinRefs(0)="HTec_A.FreezerGun.FreezerGun_shdr"
|
||||
SkinRefs(1)="HTec_A.Counter.Counter_Shdr"
|
||||
SkinRefs(2)="HTec_A.FreezerGun.FreezerGun_Sight_shdr"
|
||||
SelectSoundRef="KF_NailShotgun.Handling.KF_NailShotgun_Pickup"
|
||||
HudImageRef="HTec_A.HUD.FreezerGun_Unselected"
|
||||
SelectedHudImageRef="HTec_A.HUD.FreezerGun"
|
||||
PlayerIronSightFOV=70.000000
|
||||
ZoomedDisplayFOV=40.000000
|
||||
FireModeClass(0)=Class'ScrnHTec.FreezerFire'
|
||||
FireModeClass(1)=Class'ScrnHTec.FreezerAltFire'
|
||||
PutDownAnim="PutDown"
|
||||
SelectForce="SwitchToAssaultRifle"
|
||||
AIRating=0.550000
|
||||
CurrentRating=0.550000
|
||||
bShowChargingBar=True
|
||||
Description="Cryo Mass Driver v014 or simply a 'Freezer Gun' is developed to ... blah blah blah ... freeze zeds"
|
||||
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
|
||||
DisplayFOV=65.000000
|
||||
Priority=150
|
||||
InventoryGroup=4
|
||||
GroupOffset=15
|
||||
PickupClass=Class'ScrnHTec.FreezerPickup'
|
||||
PlayerViewOffset=(X=25.000000,Y=23.000000,Z=-5.000000)
|
||||
BobDamping=4.500000
|
||||
AttachmentClass=Class'ScrnHTec.FreezerAttachment'
|
||||
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
|
||||
ItemName="Cryo Mass Driver 14 SE"
|
||||
TransientSoundVolume=1.250000
|
||||
}
|
||||
5
kf_sources/ScrnHTec/Classes/FreezerNitroProjectile.uc
Normal file
5
kf_sources/ScrnHTec/Classes/FreezerNitroProjectile.uc
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
class FreezerNitroProjectile extends NitroProjectile;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
}
|
||||
9
kf_sources/ScrnHTec/Classes/FreezerPickup.uc
Normal file
9
kf_sources/ScrnHTec/Classes/FreezerPickup.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class FreezerPickup extends FreezerPrimaryPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoCost=40
|
||||
BuyClipSize=90
|
||||
SecondaryAmmoShortName="-- Liquid Nitrogen"
|
||||
PrimaryWeaponPickup=Class'ScrnHTec.FreezerPrimaryPickup'
|
||||
}
|
||||
40
kf_sources/ScrnHTec/Classes/FreezerPrimaryPickup.uc
Normal file
40
kf_sources/ScrnHTec/Classes/FreezerPrimaryPickup.uc
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
class FreezerPrimaryPickup extends KFWeaponPickup
|
||||
abstract;
|
||||
|
||||
var int AltMagAmmoRemaining;
|
||||
|
||||
function InitDroppedPickupFor(Inventory Inv)
|
||||
{
|
||||
local FreezerGun W;
|
||||
|
||||
W = FreezerGun(Inv);
|
||||
if ( W != none ) {
|
||||
AltMagAmmoRemaining = W.AltMagAmmoRemaining;
|
||||
}
|
||||
super.InitDroppedPickupFor(Inv);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=7.000000
|
||||
cost=4000
|
||||
AmmoCost=25
|
||||
BuyClipSize=30
|
||||
PowerValue=30
|
||||
SpeedValue=55
|
||||
RangeValue=25
|
||||
Description="Cryo Mass Driver v014 or simply a 'Freezer Gun' is developed to ... blah blah blah ... freeze zeds"
|
||||
ItemName="Cryo Mass Driver 14 SE"
|
||||
ItemShortName="Cryo MD14 SE"
|
||||
AmmoItemName="Ice Darts"
|
||||
CorrespondingPerkIndex=11
|
||||
EquipmentCategoryID=3
|
||||
InventoryType=Class'ScrnHTec.FreezerGun'
|
||||
PickupMessage="You got the Cryo Mass Driver 14"
|
||||
PickupSound=Sound'KF_NailShotgun.Handling.KF_NailShotgun_Pickup'
|
||||
PickupForce="AssaultRiflePickup"
|
||||
StaticMesh=StaticMesh'HTec_A.FreezerGun_Pickup'
|
||||
DrawScale=1.500000
|
||||
CollisionRadius=35.000000
|
||||
CollisionHeight=5.000000
|
||||
}
|
||||
57
kf_sources/ScrnHTec/Classes/FrozenDosh.uc
Normal file
57
kf_sources/ScrnHTec/Classes/FrozenDosh.uc
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
class FrozenDosh extends ScrnCashPickup;
|
||||
|
||||
var FrozenDosh HeadDosh, NextDosh;
|
||||
var bool bCryoExpertAchFailed;
|
||||
// fixes none reference issue -- PooSH
|
||||
function GiveCashTo( Pawn Other )
|
||||
{
|
||||
local SRStatsBase Stats;
|
||||
|
||||
if( Other.Controller!=None && Other.Controller.PlayerReplicationInfo!=none ) {
|
||||
Other.Controller.PlayerReplicationInfo.Score += CashAmount;
|
||||
Stats = SRStatsBase(PlayerController(Other.Controller).SteamStatsAndAchievements);
|
||||
if ( Stats != none ) {
|
||||
if ( Other.Health < 25 )
|
||||
class'ScrnAchievements'.static.ProgressAchievementByID(Stats.Rep, 'Freeze_DoshSui', CashAmount);
|
||||
class'ScrnAchievements'.static.ProgressAchievementByID(Stats.Rep, 'Freeze_Dosh', CashAmount);
|
||||
}
|
||||
}
|
||||
if ( DroppedBy != none && DroppedBy == Other.Controller ) {
|
||||
if ( HeadDosh == self && NextDosh == none && !bCryoExpertAchFailed )
|
||||
class'ScrnAchievements'.static.ProgressAchievementByID(Stats.Rep, 'Freeze_Expert', 1);
|
||||
}
|
||||
else if ( HeadDosh != none )
|
||||
HeadDosh.bCryoExpertAchFailed = true;
|
||||
AnnouncePickup(Other);
|
||||
Destroy();
|
||||
}
|
||||
|
||||
simulated function Destroyed()
|
||||
{
|
||||
local FrozenDosh dosh;
|
||||
local int c;
|
||||
|
||||
if ( HeadDosh == self ) {
|
||||
for ( dosh=NextDosh; dosh!=none && (++c)<=10; dosh=dosh.NextDosh ) {
|
||||
dosh.HeadDosh = NextDosh;
|
||||
dosh.bCryoExpertAchFailed = bCryoExpertAchFailed;
|
||||
}
|
||||
}
|
||||
else {
|
||||
for ( dosh=HeadDosh; dosh!=none && (++c)<=10; dosh=dosh.NextDosh )
|
||||
if ( dosh.NextDosh == self ) {
|
||||
dosh.NextDosh = NextDosh;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
super.Destroyed();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FadeOutTime=20.000000
|
||||
bAutoFadeOutTime=False
|
||||
DrawScale=0.300000
|
||||
UV2Texture=None
|
||||
}
|
||||
18
kf_sources/ScrnHTec/Classes/HTecMut.uc
Normal file
18
kf_sources/ScrnHTec/Classes/HTecMut.uc
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
class HTecMut extends Mutator;
|
||||
|
||||
function PostBeginPlay()
|
||||
{
|
||||
// FreezeRules are spawned inside FreezeAchHandler, which ensures that they are added
|
||||
// AFTER ScrnGameRules. Don't spawn them anywhere else.
|
||||
class'ScrnAchievements'.static.RegisterAchievements(class'FreezeAch');
|
||||
Level.Game.Spawn(class'FreezeAchHandler');
|
||||
Destroy();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
bAddToServerPackages=True
|
||||
GroupName="KF-Freezer"
|
||||
FriendlyName="ScrN Horzine Technician"
|
||||
Description="Horzine Technician featuring IJC Cryo Mass Driver 14. Requires ScrN Balance v9+."
|
||||
}
|
||||
6
kf_sources/ScrnHTec/Classes/HTecProg.uc
Normal file
6
kf_sources/ScrnHTec/Classes/HTecProg.uc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class HTecProg extends SRCustomProgressInt;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ProgressName="Frozen/Zapped ZEDs"
|
||||
}
|
||||
11
kf_sources/ScrnHTec/Classes/HTecZEDGun.uc
Normal file
11
kf_sources/ScrnHTec/Classes/HTecZEDGun.uc
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
class HTecZEDGun extends ZEDGun;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=7.000000
|
||||
UnlockedByAchievement=-1
|
||||
FireModeClass(0)=Class'ScrnHTec.HTecZEDGunFire'
|
||||
FireModeClass(1)=Class'ScrnHTec.HTecZEDGunAltFire'
|
||||
PickupClass=Class'ScrnHTec.HTecZEDGunPickup'
|
||||
ItemName="HTec ZED Eradication Device"
|
||||
}
|
||||
5
kf_sources/ScrnHTec/Classes/HTecZEDGunAltFire.uc
Normal file
5
kf_sources/ScrnHTec/Classes/HTecZEDGunAltFire.uc
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
class HTecZEDGunAltFire extends ZEDGunAltFire;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
}
|
||||
6
kf_sources/ScrnHTec/Classes/HTecZEDGunFire.uc
Normal file
6
kf_sources/ScrnHTec/Classes/HTecZEDGunFire.uc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class HTecZEDGunFire extends ZEDGunFire;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ProjectileClass=Class'ScrnHTec.HTecZEDGunProjectile'
|
||||
}
|
||||
9
kf_sources/ScrnHTec/Classes/HTecZEDGunPickup.uc
Normal file
9
kf_sources/ScrnHTec/Classes/HTecZEDGunPickup.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class HTecZEDGunPickup extends ZEDGunPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=7.000000
|
||||
ItemName="HTec ZED Gun"
|
||||
CorrespondingPerkIndex=11
|
||||
InventoryType=Class'ScrnHTec.HTecZEDGun'
|
||||
}
|
||||
7
kf_sources/ScrnHTec/Classes/HTecZEDGunProjectile.uc
Normal file
7
kf_sources/ScrnHTec/Classes/HTecZEDGunProjectile.uc
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
class HTecZEDGunProjectile extends ZEDGunProjectile;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
HeadShotDamageMult=1.100000
|
||||
MyDamageType=Class'ScrnHTec.DamTypeHTecZEDGun'
|
||||
}
|
||||
9
kf_sources/ScrnHTec/Classes/HTecZEDMKII.uc
Normal file
9
kf_sources/ScrnHTec/Classes/HTecZEDMKII.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class HTecZEDMKII extends ScrnZEDMKIIWeapon;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
FireModeClass(0)=Class'ScrnHTec.HTecZEDMKIIFire'
|
||||
FireModeClass(1)=Class'ScrnHTec.HTecZEDMKIIAltFire'
|
||||
PickupClass=Class'ScrnHTec.HTecZEDMKIIPickup'
|
||||
ItemName="HTec ZED Eradication Device MKII"
|
||||
}
|
||||
6
kf_sources/ScrnHTec/Classes/HTecZEDMKIIAltFire.uc
Normal file
6
kf_sources/ScrnHTec/Classes/HTecZEDMKIIAltFire.uc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class HTecZEDMKIIAltFire extends ScrnZEDMKIIAltFire;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ProjectileClass=Class'ScrnHTec.HTecZEDMKIISecondaryProjectile'
|
||||
}
|
||||
6
kf_sources/ScrnHTec/Classes/HTecZEDMKIIFire.uc
Normal file
6
kf_sources/ScrnHTec/Classes/HTecZEDMKIIFire.uc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class HTecZEDMKIIFire extends ZEDMKIIFire;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ProjectileClass=Class'ScrnHTec.HTecZEDMKIIPrimaryProjectile'
|
||||
}
|
||||
9
kf_sources/ScrnHTec/Classes/HTecZEDMKIIPickup.uc
Normal file
9
kf_sources/ScrnHTec/Classes/HTecZEDMKIIPickup.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class HTecZEDMKIIPickup extends ScrnZEDMKIIPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ItemName="HTec ZED Gun MKII"
|
||||
ItemShortName="ZED Gun MKII"
|
||||
CorrespondingPerkIndex=11
|
||||
InventoryType=Class'ScrnHTec.HTecZEDMKII'
|
||||
}
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
class HTecZEDMKIIPrimaryProjectile extends ZEDMKIIPrimaryProjectile;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MyDamageType=Class'ScrnHTec.DamTypeHTecZEDGunMKII'
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
class HTecZEDMKIISecondaryProjectile extends ScrnZEDMKIISecondaryProjectile;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
}
|
||||
351
kf_sources/ScrnHTec/Classes/IceChunkEmitter.uc
Normal file
351
kf_sources/ScrnHTec/Classes/IceChunkEmitter.uc
Normal file
|
|
@ -0,0 +1,351 @@
|
|||
class IceChunkEmitter extends Emitter;
|
||||
|
||||
var() array<Sound> ImpactSounds;
|
||||
|
||||
simulated function PostBeginPlay()
|
||||
{
|
||||
if( ImpactSounds.Length>0 )
|
||||
PlaySound(ImpactSounds[Rand(ImpactSounds.Length)]);
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ImpactSounds(0)=Sound'KFWeaponSound.bullethitglass'
|
||||
ImpactSounds(1)=Sound'KFWeaponSound.bullethitglass2'
|
||||
Begin Object Class=MeshEmitter Name=MeshEmitter0
|
||||
StaticMesh=StaticMesh'HTec_A.IceChunk1'
|
||||
UseCollision=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
DampRotation=True
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
Acceleration=(Z=-1000.000000)
|
||||
DampingFactorRange=(X=(Min=0.200000,Max=0.200000),Y=(Min=0.200000,Max=0.200000),Z=(Min=0.200000,Max=0.200000))
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
MaxParticles=5
|
||||
SpinsPerSecondRange=(X=(Max=1.000000),Y=(Max=1.000000),Z=(Max=1.000000))
|
||||
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
|
||||
RotationDampingFactorRange=(X=(Min=0.200000,Max=0.200000),Y=(Min=0.200000,Max=0.200000),Z=(Min=0.200000,Max=0.200000))
|
||||
StartSizeRange=(X=(Min=5.000000,Max=8.000000),Y=(Min=5.000000,Max=8.000000),Z=(Min=5.000000,Max=8.000000))
|
||||
InitialParticlesPerSecond=10000.000000
|
||||
StartVelocityRange=(X=(Min=-75.000000,Max=75.000000),Y=(Min=-75.000000,Max=75.000000),Z=(Min=-100.000000,Max=300.000000))
|
||||
End Object
|
||||
Emitters(0)=MeshEmitter'ScrnHTec.IceChunkEmitter.MeshEmitter0'
|
||||
|
||||
Begin Object Class=MeshEmitter Name=MeshEmitter2
|
||||
StaticMesh=StaticMesh'HTec_A.IceChunk2'
|
||||
UseCollision=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
DampRotation=True
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
Acceleration=(Z=-1000.000000)
|
||||
DampingFactorRange=(X=(Min=0.200000,Max=0.200000),Y=(Min=0.200000,Max=0.200000),Z=(Min=0.200000,Max=0.200000))
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
MaxParticles=8
|
||||
DetailMode=DM_High
|
||||
SpinsPerSecondRange=(X=(Max=1.000000),Y=(Max=1.000000),Z=(Max=1.000000))
|
||||
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
|
||||
RotationDampingFactorRange=(X=(Min=0.200000,Max=0.200000),Y=(Min=0.200000,Max=0.200000),Z=(Min=0.200000,Max=0.200000))
|
||||
StartSizeRange=(X=(Min=3.000000,Max=6.000000),Y=(Min=3.000000,Max=6.000000),Z=(Min=3.000000,Max=6.000000))
|
||||
InitialParticlesPerSecond=10000.000000
|
||||
StartVelocityRange=(X=(Min=-150.000000,Max=150.000000),Y=(Min=-150.000000,Max=150.000000),Z=(Min=-100.000000,Max=500.000000))
|
||||
End Object
|
||||
Emitters(1)=MeshEmitter'ScrnHTec.IceChunkEmitter.MeshEmitter2'
|
||||
|
||||
Begin Object Class=MeshEmitter Name=MeshEmitter3
|
||||
StaticMesh=StaticMesh'HTec_A.IceChunk3'
|
||||
UseCollision=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
DampRotation=True
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
Acceleration=(Z=-1000.000000)
|
||||
DampingFactorRange=(X=(Min=0.200000,Max=0.200000),Y=(Min=0.200000,Max=0.200000),Z=(Min=0.200000,Max=0.200000))
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
MaxParticles=12
|
||||
DetailMode=DM_High
|
||||
SpinsPerSecondRange=(X=(Max=1.000000),Y=(Max=1.000000),Z=(Max=1.000000))
|
||||
StartSpinRange=(X=(Min=-1.000000,Max=1.000000),Y=(Min=-1.000000,Max=1.000000),Z=(Min=-1.000000,Max=1.000000))
|
||||
RotationDampingFactorRange=(X=(Min=0.200000,Max=0.200000),Y=(Min=0.200000,Max=0.200000),Z=(Min=0.200000,Max=0.200000))
|
||||
StartSizeRange=(X=(Min=2.000000,Max=5.000000),Y=(Min=2.000000,Max=5.000000),Z=(Min=2.000000,Max=5.000000))
|
||||
InitialParticlesPerSecond=10000.000000
|
||||
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=-100.000000,Max=500.000000))
|
||||
End Object
|
||||
Emitters(2)=MeshEmitter'ScrnHTec.IceChunkEmitter.MeshEmitter3'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter8
|
||||
UseCollision=True
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
UseRandomSubdivision=True
|
||||
Acceleration=(Z=-1000.000000)
|
||||
ExtentMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
|
||||
DampingFactorRange=(X=(Min=0.250000,Max=0.250000),Y=(Min=0.250000,Max=0.250000),Z=(Min=0.250000,Max=0.250000))
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
FadeOutStartTime=0.500000
|
||||
MaxParticles=55
|
||||
DetailMode=DM_SuperHigh
|
||||
UseRotationFrom=PTRS_Actor
|
||||
StartSizeRange=(X=(Min=0.700000,Max=1.700000))
|
||||
InitialParticlesPerSecond=10000.000000
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.BulletHits.snowchunksfinal'
|
||||
TextureUSubdivisions=2
|
||||
TextureVSubdivisions=2
|
||||
LifetimeRange=(Min=1.400000,Max=1.400000)
|
||||
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=-300.000000,Max=350.000000))
|
||||
End Object
|
||||
Emitters(3)=SpriteEmitter'ScrnHTec.IceChunkEmitter.SpriteEmitter8'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter9
|
||||
ProjectionNormal=(Y=1.000000,Z=0.000000)
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
Acceleration=(Z=-1000.000000)
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.500000
|
||||
FadeOutStartTime=0.442500
|
||||
FadeInEndTime=0.007500
|
||||
MaxParticles=25
|
||||
DetailMode=DM_High
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinCCWorCW=(X=0.000000)
|
||||
SpinsPerSecondRange=(X=(Max=0.300000))
|
||||
StartSpinRange=(X=(Min=-0.300000,Max=0.300000))
|
||||
SizeScale(0)=(RelativeSize=0.400000)
|
||||
SizeScale(1)=(RelativeTime=0.500000,RelativeSize=0.700000)
|
||||
SizeScale(2)=(RelativeTime=1.000000,RelativeSize=1.300000)
|
||||
StartSizeRange=(X=(Min=20.000000,Max=40.000000),Y=(Min=20.000000,Max=40.000000),Z=(Min=20.000000,Max=40.000000))
|
||||
InitialParticlesPerSecond=10000.000000
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.BulletHits.watersplatter2'
|
||||
TextureUSubdivisions=2
|
||||
TextureVSubdivisions=2
|
||||
LifetimeRange=(Min=0.750000,Max=0.750000)
|
||||
StartVelocityRange=(X=(Min=-150.000000,Max=150.000000),Y=(Min=-150.000000,Max=150.000000),Z=(Min=-25.000000,Max=300.000000))
|
||||
End Object
|
||||
Emitters(4)=SpriteEmitter'ScrnHTec.IceChunkEmitter.SpriteEmitter9'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter10
|
||||
ProjectionNormal=(Y=1.000000,Z=0.000000)
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
Acceleration=(Z=-15.000000)
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.250000
|
||||
FadeOutStartTime=0.175000
|
||||
MaxParticles=5
|
||||
StartLocationRange=(X=(Min=10.000000,Max=10.000000))
|
||||
AddLocationFromOtherEmitter=0
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinCCWorCW=(X=0.000000)
|
||||
SpinsPerSecondRange=(X=(Max=0.200000))
|
||||
StartSpinRange=(X=(Min=-0.300000,Max=0.300000))
|
||||
SizeScale(0)=(RelativeSize=0.400000)
|
||||
SizeScale(1)=(RelativeTime=0.560000,RelativeSize=1.000000)
|
||||
StartSizeRange=(X=(Min=6.000000,Max=60.000000),Y=(Min=6.000000,Max=60.000000),Z=(Min=6.000000,Max=60.000000))
|
||||
InitialParticlesPerSecond=1.000000
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'kf_fx_trip_t.Misc.smoke_animated'
|
||||
TextureUSubdivisions=8
|
||||
TextureVSubdivisions=8
|
||||
LifetimeRange=(Min=0.350000,Max=0.350000)
|
||||
End Object
|
||||
Emitters(5)=SpriteEmitter'ScrnHTec.IceChunkEmitter.SpriteEmitter10'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter11
|
||||
ProjectionNormal=(Y=1.000000,Z=0.000000)
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
Acceleration=(Z=-15.000000)
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.250000
|
||||
FadeOutStartTime=0.175000
|
||||
MaxParticles=8
|
||||
StartLocationRange=(X=(Min=10.000000,Max=10.000000))
|
||||
AddLocationFromOtherEmitter=1
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinCCWorCW=(X=0.000000)
|
||||
SpinsPerSecondRange=(X=(Max=0.200000))
|
||||
StartSpinRange=(X=(Min=-0.300000,Max=0.300000))
|
||||
SizeScale(0)=(RelativeSize=0.400000)
|
||||
SizeScale(1)=(RelativeTime=0.560000,RelativeSize=1.000000)
|
||||
StartSizeRange=(X=(Min=6.000000,Max=60.000000),Y=(Min=6.000000,Max=60.000000),Z=(Min=6.000000,Max=60.000000))
|
||||
InitialParticlesPerSecond=1.000000
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'kf_fx_trip_t.Misc.smoke_animated'
|
||||
TextureUSubdivisions=8
|
||||
TextureVSubdivisions=8
|
||||
LifetimeRange=(Min=0.350000,Max=0.350000)
|
||||
End Object
|
||||
Emitters(6)=SpriteEmitter'ScrnHTec.IceChunkEmitter.SpriteEmitter11'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter12
|
||||
ProjectionNormal=(Y=1.000000,Z=0.000000)
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
Acceleration=(Z=-15.000000)
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.250000
|
||||
FadeOutStartTime=0.175000
|
||||
MaxParticles=12
|
||||
DetailMode=DM_High
|
||||
StartLocationRange=(X=(Min=10.000000,Max=10.000000))
|
||||
AddLocationFromOtherEmitter=2
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinCCWorCW=(X=0.000000)
|
||||
SpinsPerSecondRange=(X=(Max=0.200000))
|
||||
StartSpinRange=(X=(Min=-0.300000,Max=0.300000))
|
||||
SizeScale(0)=(RelativeSize=0.400000)
|
||||
SizeScale(1)=(RelativeTime=0.560000,RelativeSize=1.000000)
|
||||
StartSizeRange=(X=(Min=6.000000,Max=60.000000),Y=(Min=6.000000,Max=60.000000),Z=(Min=6.000000,Max=60.000000))
|
||||
InitialParticlesPerSecond=1.000000
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'kf_fx_trip_t.Misc.smoke_animated'
|
||||
TextureUSubdivisions=8
|
||||
TextureVSubdivisions=8
|
||||
LifetimeRange=(Min=0.350000,Max=0.350000)
|
||||
End Object
|
||||
Emitters(7)=SpriteEmitter'ScrnHTec.IceChunkEmitter.SpriteEmitter12'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter13
|
||||
ProjectionNormal=(Y=1.000000,Z=0.000000)
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
Acceleration=(Z=-1000.000000)
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.250000
|
||||
FadeOutStartTime=0.442500
|
||||
FadeInEndTime=0.007500
|
||||
MaxParticles=12
|
||||
StartLocationRange=(X=(Min=20.000000,Max=20.000000))
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinCCWorCW=(X=0.000000)
|
||||
SpinsPerSecondRange=(X=(Max=0.300000))
|
||||
StartSpinRange=(X=(Min=-0.300000,Max=0.300000))
|
||||
SizeScale(0)=(RelativeSize=0.400000)
|
||||
SizeScale(1)=(RelativeTime=0.500000,RelativeSize=0.900000)
|
||||
SizeScale(2)=(RelativeTime=1.000000,RelativeSize=1.300000)
|
||||
StartSizeRange=(X=(Min=25.000000,Max=45.000000),Y=(Min=25.000000,Max=45.000000),Z=(Min=25.000000,Max=45.000000))
|
||||
InitialParticlesPerSecond=10000.000000
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.BulletHits.watersplashcloud'
|
||||
TextureUSubdivisions=1
|
||||
TextureVSubdivisions=1
|
||||
LifetimeRange=(Min=0.750000,Max=0.750000)
|
||||
StartVelocityRange=(X=(Min=-150.000000,Max=150.000000),Y=(Min=-150.000000,Max=150.000000),Z=(Min=-5.000000,Max=150.000000))
|
||||
End Object
|
||||
Emitters(8)=SpriteEmitter'ScrnHTec.IceChunkEmitter.SpriteEmitter13'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter14
|
||||
ProjectionNormal=(Y=1.000000,Z=0.000000)
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
Acceleration=(Z=-22.000000)
|
||||
DampingFactorRange=(X=(Min=0.250000,Max=0.250000),Y=(Min=0.250000,Max=0.250000),Z=(Min=0.250000,Max=0.250000))
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.500000
|
||||
FadeOutStartTime=2.720000
|
||||
MaxParticles=25
|
||||
DetailMode=DM_High
|
||||
StartLocationRange=(X=(Min=-10.000000,Max=10.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=-10.000000,Max=10.000000))
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinCCWorCW=(X=0.000000)
|
||||
SpinsPerSecondRange=(X=(Max=0.150000))
|
||||
StartSpinRange=(X=(Min=-1.000000,Max=1.000000))
|
||||
SizeScale(0)=(RelativeSize=2.200000)
|
||||
SizeScale(1)=(RelativeTime=0.500000,RelativeSize=3.200000)
|
||||
SizeScale(2)=(RelativeTime=1.000000,RelativeSize=4.000000)
|
||||
StartSizeRange=(X=(Min=1.000000,Max=20.000000),Y=(Min=1.000000,Max=20.000000),Z=(Min=1.000000,Max=20.000000))
|
||||
InitialParticlesPerSecond=10000.000000
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.explosions.DSmoke_2'
|
||||
TextureUSubdivisions=1
|
||||
TextureVSubdivisions=1
|
||||
StartVelocityRange=(X=(Min=-350.000000,Max=350.000000),Y=(Min=-350.000000,Max=350.000000),Z=(Min=-5.000000,Max=50.000000))
|
||||
VelocityLossRange=(X=(Min=3.000000,Max=3.000000),Y=(Min=3.000000,Max=3.000000))
|
||||
End Object
|
||||
Emitters(9)=SpriteEmitter'ScrnHTec.IceChunkEmitter.SpriteEmitter14'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter15
|
||||
UseCollision=True
|
||||
UseColorScale=True
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
UseRandomSubdivision=True
|
||||
Acceleration=(Z=-1000.000000)
|
||||
ExtentMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
|
||||
DampingFactorRange=(X=(Min=0.250000,Max=0.250000),Y=(Min=0.250000,Max=0.250000),Z=(Min=0.250000,Max=0.250000))
|
||||
ColorScale(0)=(Color=(B=174,G=174,R=205,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=174,G=174,R=205,A=255))
|
||||
FadeOutStartTime=0.500000
|
||||
MaxParticles=15
|
||||
UseRotationFrom=PTRS_Actor
|
||||
StartSizeRange=(X=(Min=0.700000,Max=1.700000))
|
||||
InitialParticlesPerSecond=10000.000000
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.BulletHits.snowchunksfinal'
|
||||
TextureUSubdivisions=2
|
||||
TextureVSubdivisions=2
|
||||
LifetimeRange=(Min=1.400000,Max=1.400000)
|
||||
StartVelocityRange=(X=(Min=-200.000000,Max=200.000000),Y=(Min=-200.000000,Max=200.000000),Z=(Min=-300.000000,Max=350.000000))
|
||||
End Object
|
||||
Emitters(10)=SpriteEmitter'ScrnHTec.IceChunkEmitter.SpriteEmitter15'
|
||||
|
||||
AutoDestroy=True
|
||||
bNoDelete=False
|
||||
bNetTemporary=True
|
||||
RemoteRole=ROLE_SimulatedProxy
|
||||
LifeSpan=5.000000
|
||||
TransientSoundVolume=150.000000
|
||||
TransientSoundRadius=80.000000
|
||||
}
|
||||
115
kf_sources/ScrnHTec/Classes/IceDart.uc
Normal file
115
kf_sources/ScrnHTec/Classes/IceDart.uc
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
class IceDart extends ShotgunBullet
|
||||
abstract;
|
||||
|
||||
var Emitter TrailEffect;
|
||||
|
||||
simulated function PostBeginPlay()
|
||||
{
|
||||
Super(Projectile).PostBeginPlay();
|
||||
|
||||
Velocity = Speed * Vector(Rotation); // starts off slower so combo can be done closer
|
||||
|
||||
if ( Level.NetMode != NM_DedicatedServer )
|
||||
{
|
||||
if ( !PhysicsVolume.bWaterVolume )
|
||||
{
|
||||
Trail = Spawn(class'IceDartTracer',self);
|
||||
Trail.Lifespan = Lifespan;
|
||||
if ( Level.DetailMode >= DM_SuperHigh ) {
|
||||
TrailEffect = Spawn(class'IceDartTrail',self);
|
||||
TrailEffect.Lifespan = Lifespan;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
simulated function Destroyed()
|
||||
{
|
||||
if (TrailEffect !=None) {
|
||||
TrailEffect.Kill();
|
||||
TrailEffect.SetPhysics(PHYS_NONE);
|
||||
}
|
||||
Super.Destroyed();
|
||||
}
|
||||
|
||||
simulated function ProcessTouch (Actor Other, vector HitLocation)
|
||||
{
|
||||
local vector X;
|
||||
local Vector TempHitLocation, HitNormal;
|
||||
local array<int> HitPoints;
|
||||
local KFPawn HitPawn;
|
||||
|
||||
if ( Other == none || Other == Instigator || Other.Base == Instigator || !Other.bBlockHitPointTraces )
|
||||
return;
|
||||
|
||||
X = Vector(Rotation);
|
||||
|
||||
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(Damage, Instigator, TempHitLocation, MomentumTransfer * Normal(Velocity), MyDamageType,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(Damage * HeadShotDamageMult, Instigator, HitLocation, MomentumTransfer * Normal(Velocity), MyDamageType);
|
||||
}
|
||||
else
|
||||
{
|
||||
Other.TakeDamage(Damage, Instigator, HitLocation, MomentumTransfer * Normal(Velocity), MyDamageType);
|
||||
}
|
||||
}
|
||||
|
||||
if ( ImpactEffect != None && (Level.NetMode != NM_DedicatedServer) && !Level.bDropDetail && Level.DetailMode > DM_Low )
|
||||
Spawn(ImpactEffect,,, Location, rotator(-HitNormal));
|
||||
|
||||
// no penetration
|
||||
Destroy();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ImpactSounds(0)=SoundGroup'ProjectileSounds.Bullets.Impact_Metal'
|
||||
ImpactSounds(1)=SoundGroup'ProjectileSounds.Bullets.Impact_Metal'
|
||||
ImpactSounds(2)=SoundGroup'ProjectileSounds.Bullets.Impact_Metal'
|
||||
ImpactSounds(3)=SoundGroup'ProjectileSounds.Bullets.Impact_Metal'
|
||||
ImpactSounds(4)=SoundGroup'ProjectileSounds.Bullets.Impact_Metal'
|
||||
ImpactSounds(5)=SoundGroup'ProjectileSounds.Bullets.Impact_Metal'
|
||||
PenDamageReduction=0.000000
|
||||
ImpactEffect=Class'ScrnHTec.IceDartHitEffect'
|
||||
Speed=5000.000000
|
||||
MaxSpeed=7000.000000
|
||||
Damage=45.000000
|
||||
MyDamageType=Class'ScrnHTec.DamTypeFreezerBase'
|
||||
ExplosionDecal=Class'KFMod.NailGunDecal'
|
||||
StaticMesh=StaticMesh'HTec_A.IceDart-PROJ'
|
||||
LifeSpan=5.000000
|
||||
DrawScale=0.500000
|
||||
}
|
||||
27
kf_sources/ScrnHTec/Classes/IceDartHitEffect.uc
Normal file
27
kf_sources/ScrnHTec/Classes/IceDartHitEffect.uc
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
class IceDartHitEffect extends ROHitEffect;
|
||||
|
||||
#exec OBJ LOAD FILE=..\Sounds\ProjectileSounds.uax
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
HitEffects(0)=(HitDecal=Class'ROEffects.BulletHoleDirt',HitEffect=Class'ScrnHTec.IceDartImpact',HitSound=SoundGroup'ProjectileSounds.Bullets.Impact_Dirt')
|
||||
HitEffects(1)=(HitDecal=Class'ROEffects.BulletHoleConcrete',HitEffect=Class'ScrnHTec.IceDartImpact',HitSound=SoundGroup'ProjectileSounds.Bullets.Impact_Asphalt')
|
||||
HitEffects(2)=(HitDecal=Class'ROEffects.BulletHoleDirt',HitEffect=Class'ScrnHTec.IceDartImpact',HitSound=SoundGroup'ProjectileSounds.Bullets.Impact_Dirt')
|
||||
HitEffects(3)=(HitDecal=Class'ROEffects.BulletHoleMetal',HitEffect=Class'ScrnHTec.IceDartImpact',HitSound=SoundGroup'ProjectileSounds.Bullets.Impact_Metal')
|
||||
HitEffects(4)=(HitDecal=Class'ROEffects.BulletHoleWood',HitEffect=Class'ScrnHTec.IceDartImpact',HitSound=SoundGroup'ProjectileSounds.Bullets.Impact_Wood')
|
||||
HitEffects(5)=(HitDecal=Class'ROEffects.BulletHoleDirt',HitEffect=Class'ScrnHTec.IceDartImpact',HitSound=SoundGroup'ProjectileSounds.Bullets.Impact_Grass')
|
||||
HitEffects(6)=(HitDecal=Class'ROEffects.BulletHoleFlesh',HitEffect=Class'ScrnHTec.IceDartImpact',HitSound=SoundGroup'ProjectileSounds.Bullets.Impact_Mud')
|
||||
HitEffects(7)=(HitDecal=Class'ROEffects.BulletHoleIce',HitEffect=Class'ScrnHTec.IceDartImpact',HitSound=SoundGroup'ProjectileSounds.Bullets.Impact_Glass')
|
||||
HitEffects(8)=(HitDecal=Class'ROEffects.BulletHoleSnow',HitEffect=Class'ScrnHTec.IceDartImpact',HitSound=SoundGroup'ProjectileSounds.Bullets.Impact_Snow')
|
||||
HitEffects(9)=(HitEffect=Class'ROEffects.ROBulletHitWaterEffect',HitSound=SoundGroup'ProjectileSounds.Bullets.Impact_Snow')
|
||||
HitEffects(10)=(HitDecal=Class'ROEffects.BulletHoleIce',HitEffect=Class'ROEffects.ROBreakingGlass',HitSound=SoundGroup'ProjectileSounds.Bullets.Impact_Glass')
|
||||
HitEffects(11)=(HitDecal=Class'ROEffects.BulletHoleConcrete',HitEffect=Class'ScrnHTec.IceDartImpact',HitSound=SoundGroup'ProjectileSounds.Bullets.Impact_Gravel')
|
||||
HitEffects(12)=(HitDecal=Class'ROEffects.BulletHoleConcrete',HitEffect=Class'ScrnHTec.IceDartImpact',HitSound=SoundGroup'ProjectileSounds.Bullets.Impact_Asphalt')
|
||||
HitEffects(13)=(HitDecal=Class'ROEffects.BulletHoleWood',HitEffect=Class'ScrnHTec.IceDartImpact',HitSound=SoundGroup'ProjectileSounds.Bullets.Impact_Wood')
|
||||
HitEffects(14)=(HitDecal=Class'ROEffects.BulletHoleSnow',HitEffect=Class'ScrnHTec.IceDartImpact',HitSound=SoundGroup'ProjectileSounds.Bullets.Impact_Mud')
|
||||
HitEffects(15)=(HitDecal=Class'ROEffects.BulletHoleMetalArmor',HitEffect=Class'ScrnHTec.IceDartImpact',HitSound=SoundGroup'ProjectileSounds.Bullets.Impact_Metal')
|
||||
HitEffects(16)=(HitDecal=Class'ROEffects.BulletHoleConcrete',HitEffect=Class'ScrnHTec.IceDartImpact',HitSound=SoundGroup'ProjectileSounds.Bullets.Impact_Wood')
|
||||
HitEffects(17)=(HitDecal=Class'ROEffects.BulletHoleCloth',HitEffect=Class'ScrnHTec.IceDartImpact',HitSound=SoundGroup'ProjectileSounds.Bullets.Impact_Dirt')
|
||||
HitEffects(18)=(HitDecal=Class'ROEffects.BulletHoleMetal',HitEffect=Class'ScrnHTec.IceDartImpact',HitSound=SoundGroup'ProjectileSounds.Bullets.Impact_Dirt')
|
||||
HitEffects(19)=(HitDecal=Class'ROEffects.BulletHoleDirt',HitEffect=Class'ScrnHTec.IceDartImpact',HitSound=SoundGroup'ProjectileSounds.Bullets.Impact_Mud')
|
||||
}
|
||||
115
kf_sources/ScrnHTec/Classes/IceDartImpact.uc
Normal file
115
kf_sources/ScrnHTec/Classes/IceDartImpact.uc
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
class IceDartImpact extends FreezeParticlesDirectional;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter0
|
||||
UseColorScale=True
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
ColorScale(0)=(Color=(B=200,G=150,R=64,A=60))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=200,G=150,R=64,A=60))
|
||||
Opacity=0.200000
|
||||
FadeOutStartTime=0.028000
|
||||
FadeInEndTime=0.006000
|
||||
MaxParticles=1
|
||||
StartSizeRange=(X=(Min=50.000000),Y=(Min=50.000000),Z=(Min=50.000000))
|
||||
InitialParticlesPerSecond=10000.000000
|
||||
Texture=Texture'Effects_Tex.Smoke.MuzzleCorona1stP'
|
||||
LifetimeRange=(Min=0.100000,Max=0.100000)
|
||||
End Object
|
||||
Emitters(0)=SpriteEmitter'ScrnHTec.IceDartImpact.SpriteEmitter0'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter1
|
||||
UseColorScale=True
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
Acceleration=(Z=-5.000000)
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScaleRepeats=1.000000
|
||||
FadeOutStartTime=1.500000
|
||||
MaxParticles=3
|
||||
SpinsPerSecondRange=(Y=(Min=0.050000,Max=0.100000),Z=(Min=0.050000,Max=0.100000))
|
||||
StartSpinRange=(X=(Max=0.400000),Y=(Max=1.000000),Z=(Max=1.000000))
|
||||
SizeScale(1)=(RelativeSize=0.300000)
|
||||
SizeScale(2)=(RelativeTime=1.000000,RelativeSize=0.250000)
|
||||
StartSizeRange=(X=(Min=75.000000),Y=(Min=75.000000),Z=(Min=75.000000))
|
||||
InitialParticlesPerSecond=10000.000000
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'kf_fx_trip_t.Misc.smoke_animated'
|
||||
TextureUSubdivisions=8
|
||||
TextureVSubdivisions=8
|
||||
LifetimeRange=(Min=3.000000,Max=3.000000)
|
||||
StartVelocityRange=(X=(Min=-5.000000,Max=5.000000),Y=(Min=-5.000000,Max=5.000000),Z=(Min=-5.000000,Max=5.000000))
|
||||
End Object
|
||||
Emitters(1)=SpriteEmitter'ScrnHTec.IceDartImpact.SpriteEmitter1'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter2
|
||||
UseCollision=True
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
UseRandomSubdivision=True
|
||||
Acceleration=(Z=-1000.000000)
|
||||
ExtentMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
|
||||
DampingFactorRange=(X=(Min=0.250000,Max=0.250000),Y=(Min=0.250000,Max=0.250000),Z=(Min=0.250000,Max=0.250000))
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.750000
|
||||
FadeOutStartTime=0.500000
|
||||
MaxParticles=7
|
||||
UseRotationFrom=PTRS_Actor
|
||||
StartSizeRange=(X=(Min=0.500000,Max=2.000000))
|
||||
InitialParticlesPerSecond=10000.000000
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.BulletHits.snowchunksfinal'
|
||||
TextureUSubdivisions=2
|
||||
TextureVSubdivisions=2
|
||||
LifetimeRange=(Min=1.400000,Max=1.400000)
|
||||
StartVelocityRange=(X=(Min=-400.000000,Max=400.000000),Y=(Min=-400.000000,Max=400.000000),Z=(Min=-400.000000,Max=600.000000))
|
||||
End Object
|
||||
Emitters(2)=SpriteEmitter'ScrnHTec.IceDartImpact.SpriteEmitter2'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter3
|
||||
UseColorScale=True
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
Acceleration=(Z=-15.000000)
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScaleRepeats=1.000000
|
||||
Opacity=0.500000
|
||||
FadeOutStartTime=1.500000
|
||||
MaxParticles=6
|
||||
SpinsPerSecondRange=(X=(Min=0.050000,Max=0.100000),Y=(Min=0.050000,Max=0.100000),Z=(Min=0.050000,Max=0.100000))
|
||||
StartSpinRange=(X=(Max=1.000000),Y=(Max=1.000000),Z=(Max=1.000000))
|
||||
SizeScale(1)=(RelativeSize=0.400000)
|
||||
SizeScale(2)=(RelativeTime=1.000000,RelativeSize=0.250000)
|
||||
StartSizeRange=(X=(Min=50.000000,Max=75.000000),Y=(Min=50.000000,Max=75.000000),Z=(Min=50.000000,Max=75.000000))
|
||||
InitialParticlesPerSecond=10000.000000
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.explosions.DSmoke_2'
|
||||
TextureUSubdivisions=1
|
||||
TextureVSubdivisions=1
|
||||
LifetimeRange=(Min=3.000000,Max=3.000000)
|
||||
StartVelocityRange=(X=(Min=-7.500000,Max=7.500000),Y=(Min=-7.500000,Max=7.500000),Z=(Min=-20.000000,Max=20.000000))
|
||||
End Object
|
||||
Emitters(3)=SpriteEmitter'ScrnHTec.IceDartImpact.SpriteEmitter3'
|
||||
|
||||
LifeSpan=5.000000
|
||||
}
|
||||
338
kf_sources/ScrnHTec/Classes/IceDartMuzzleFlash.uc
Normal file
338
kf_sources/ScrnHTec/Classes/IceDartMuzzleFlash.uc
Normal file
|
|
@ -0,0 +1,338 @@
|
|||
class IceDartMuzzleFlash extends ROMuzzleFlash1st;
|
||||
|
||||
simulated function Trigger(Actor Other, Pawn EventInstigator)
|
||||
{
|
||||
local int i;
|
||||
|
||||
for ( i=0; i<Emitters.length; ++i ) {
|
||||
Emitters[i].SpawnParticle(1);
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=BeamEmitter Name=BeamEmitter0
|
||||
BeamDistanceRange=(Min=3.000000,Max=300.000000)
|
||||
RotatingSheets=1
|
||||
LowFrequencyNoiseRange=(X=(Min=60.000000,Max=60.000000),Y=(Min=60.000000,Max=60.000000),Z=(Min=60.000000,Max=60.000000))
|
||||
LowFrequencyPoints=8
|
||||
HighFrequencyNoiseRange=(X=(Min=-3.000000,Max=3.000000),Y=(Min=-3.000000,Max=3.000000),Z=(Min=-3.000000,Max=3.000000))
|
||||
HighFrequencyPoints=3
|
||||
UseLowFrequencyScale=True
|
||||
UseBranching=True
|
||||
BranchProbability=(Min=1.000000,Max=1.000000)
|
||||
BranchEmitter=1
|
||||
BranchSpawnAmountRange=(Min=1.000000,Max=2.000000)
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
AutomaticInitialSpawning=False
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.250000
|
||||
FadeOutStartTime=1.120000
|
||||
MaxParticles=8
|
||||
RotationNormal=(X=40.000000,Y=40.000000,Z=40.000000)
|
||||
StartSizeRange=(X=(Min=0.700000,Max=0.700000),Y=(Min=0.700000,Max=0.700000),Z=(Min=0.700000,Max=0.700000))
|
||||
Texture=Texture'HTec_A.fx.Streak'
|
||||
InitialTimeRange=(Max=0.250000)
|
||||
LifetimeRange=(Min=2.000000,Max=2.000000)
|
||||
StartVelocityRange=(X=(Min=-60.000000,Max=60.000000),Y=(Min=-60.000000,Max=60.000000),Z=(Min=-60.000000,Max=60.000000))
|
||||
End Object
|
||||
Emitters(0)=BeamEmitter'ScrnHTec.IceDartMuzzleFlash.BeamEmitter0'
|
||||
|
||||
Begin Object Class=SparkEmitter Name=SparkEmitter0
|
||||
LineSegmentsRange=(Min=0.000000,Max=0.000000)
|
||||
TimeBetweenSegmentsRange=(Min=0.150000,Max=0.150000)
|
||||
UseColorScale=True
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
AutomaticInitialSpawning=False
|
||||
ColorScale(0)=(Color=(B=150,G=150,R=150,A=32))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=150,G=150,R=150,A=32))
|
||||
Opacity=0.110000
|
||||
FadeOutStartTime=0.250000
|
||||
FadeInEndTime=0.250000
|
||||
MaxParticles=3
|
||||
StartLocationShape=PTLS_Sphere
|
||||
UseRotationFrom=PTRS_Actor
|
||||
StartSizeRange=(X=(Min=50.000000,Max=50.000000),Y=(Min=50.000000,Max=50.000000),Z=(Min=50.000000,Max=50.000000))
|
||||
Texture=Texture'Effects_Tex.BulletHits.sparkfinal2'
|
||||
LifetimeRange=(Min=0.200000,Max=0.200000)
|
||||
StartVelocityRange=(X=(Min=200.000000,Max=350.000000),Y=(Min=-150.000000,Max=150.000000),Z=(Min=-150.000000,Max=150.000000))
|
||||
End Object
|
||||
Emitters(1)=SparkEmitter'ScrnHTec.IceDartMuzzleFlash.SparkEmitter0'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter0
|
||||
ProjectionNormal=(Y=1.000000,Z=0.000000)
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
UseRandomSubdivision=True
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.150000
|
||||
FadeOutStartTime=0.640000
|
||||
MaxParticles=1
|
||||
StartLocationRange=(X=(Min=10.000000,Max=10.000000))
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinCCWorCW=(X=0.000000)
|
||||
SpinsPerSecondRange=(X=(Max=0.200000))
|
||||
StartSpinRange=(X=(Min=-0.300000,Max=0.300000))
|
||||
SizeScale(0)=(RelativeSize=0.400000)
|
||||
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=1.000000)
|
||||
StartSizeRange=(X=(Min=45.000000),Y=(Min=45.000000),Z=(Min=45.000000))
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'HTec_A.fx.Dart_Muzzle-1'
|
||||
TextureUSubdivisions=1
|
||||
TextureVSubdivisions=1
|
||||
LifetimeRange=(Min=1.000000,Max=1.000000)
|
||||
StartVelocityRange=(Z=(Min=-25.000000,Max=-15.000000))
|
||||
End Object
|
||||
Emitters(2)=SpriteEmitter'ScrnHTec.IceDartMuzzleFlash.SpriteEmitter0'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter1
|
||||
UseColorScale=True
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
ColorScale(0)=(Color=(B=200,G=150,R=64,A=60))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=200,G=150,R=64,A=60))
|
||||
Opacity=0.200000
|
||||
FadeOutStartTime=0.028000
|
||||
FadeInEndTime=0.006000
|
||||
MaxParticles=1
|
||||
StartSizeRange=(X=(Min=30.000000,Max=60.000000),Y=(Min=30.000000,Max=60.000000),Z=(Min=30.000000,Max=60.000000))
|
||||
Texture=Texture'Effects_Tex.Smoke.MuzzleCorona1stP'
|
||||
LifetimeRange=(Min=0.100000,Max=0.100000)
|
||||
End Object
|
||||
Emitters(3)=SpriteEmitter'ScrnHTec.IceDartMuzzleFlash.SpriteEmitter1'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter2
|
||||
ProjectionNormal=(Y=1.000000,Z=0.000000)
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
UseRandomSubdivision=True
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.350000
|
||||
FadeOutStartTime=0.132000
|
||||
FadeInEndTime=0.015000
|
||||
MaxParticles=1
|
||||
StartLocationRange=(X=(Min=20.000000,Max=20.000000))
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinCCWorCW=(X=0.000000)
|
||||
SpinsPerSecondRange=(X=(Max=0.200000))
|
||||
StartSpinRange=(X=(Min=-0.300000,Max=0.300000))
|
||||
SizeScale(0)=(RelativeSize=0.600000)
|
||||
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=1.000000)
|
||||
SizeScale(2)=(RelativeTime=1.000000,RelativeSize=0.250000)
|
||||
StartSizeRange=(X=(Min=15.000000,Max=35.000000),Y=(Min=15.000000,Max=35.000000),Z=(Min=15.000000,Max=35.000000))
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.Smoke.LightSmoke_8Frame'
|
||||
TextureUSubdivisions=4
|
||||
TextureVSubdivisions=4
|
||||
LifetimeRange=(Min=0.300000,Max=0.300000)
|
||||
StartVelocityRange=(X=(Min=60.000000,Max=150.000000),Z=(Min=-50.000000,Max=-15.000000))
|
||||
End Object
|
||||
Emitters(4)=SpriteEmitter'ScrnHTec.IceDartMuzzleFlash.SpriteEmitter2'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter3
|
||||
ProjectionNormal=(Y=1.000000,Z=0.000000)
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.350000
|
||||
FadeOutStartTime=0.296000
|
||||
FadeInEndTime=0.016000
|
||||
MaxParticles=8
|
||||
StartLocationRange=(X=(Min=20.000000,Max=20.000000))
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinCCWorCW=(X=0.000000)
|
||||
SpinsPerSecondRange=(X=(Max=0.200000))
|
||||
StartSpinRange=(X=(Min=-0.300000,Max=0.300000))
|
||||
SizeScale(0)=(RelativeSize=0.600000)
|
||||
SizeScale(1)=(RelativeTime=0.680000,RelativeSize=1.000000)
|
||||
StartSizeRange=(X=(Min=5.000000,Max=50.000000),Y=(Min=5.000000,Max=50.000000),Z=(Min=5.000000,Max=50.000000))
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.explosions.DSmoke_2'
|
||||
TextureUSubdivisions=1
|
||||
TextureVSubdivisions=1
|
||||
LifetimeRange=(Min=0.800000,Max=0.800000)
|
||||
StartVelocityRange=(X=(Max=150.000000),Z=(Min=-50.000000,Max=-25.000000))
|
||||
End Object
|
||||
Emitters(5)=SpriteEmitter'ScrnHTec.IceDartMuzzleFlash.SpriteEmitter3'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter4
|
||||
UseCollision=True
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
UseRandomSubdivision=True
|
||||
Acceleration=(X=150.000000,Z=-1000.000000)
|
||||
ExtentMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
|
||||
DampingFactorRange=(X=(Min=0.250000,Max=0.250000),Y=(Min=0.250000,Max=0.250000),Z=(Min=0.250000,Max=0.250000))
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.600000
|
||||
FadeOutStartTime=0.500000
|
||||
UseRotationFrom=PTRS_Actor
|
||||
StartSizeRange=(X=(Min=0.700000,Max=1.700000))
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.BulletHits.snowchunksfinal'
|
||||
TextureUSubdivisions=2
|
||||
TextureVSubdivisions=2
|
||||
LifetimeRange=(Min=1.400000,Max=1.400000)
|
||||
StartVelocityRange=(X=(Min=500.000000,Max=800.000000),Y=(Min=-300.000000,Max=300.000000),Z=(Min=-300.000000,Max=300.000000))
|
||||
End Object
|
||||
Emitters(6)=SpriteEmitter'ScrnHTec.IceDartMuzzleFlash.SpriteEmitter4'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter5
|
||||
ProjectionNormal=(Y=1.000000,Z=0.000000)
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
Acceleration=(Z=-15.000000)
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.400000
|
||||
FadeOutStartTime=0.045000
|
||||
MaxParticles=1
|
||||
StartLocationRange=(X=(Min=10.000000,Max=10.000000))
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinCCWorCW=(X=0.000000)
|
||||
SpinsPerSecondRange=(X=(Max=0.200000))
|
||||
StartSpinRange=(X=(Min=-0.300000,Max=0.300000))
|
||||
SizeScale(0)=(RelativeSize=1.000000)
|
||||
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=0.900000)
|
||||
StartSizeRange=(X=(Min=4.000000,Max=45.000000),Y=(Min=4.000000,Max=45.000000),Z=(Min=4.000000,Max=45.000000))
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.Smoke.grenadesmoke_fill'
|
||||
TextureUSubdivisions=1
|
||||
TextureVSubdivisions=1
|
||||
LifetimeRange=(Min=0.100000,Max=0.100000)
|
||||
End Object
|
||||
Emitters(7)=SpriteEmitter'ScrnHTec.IceDartMuzzleFlash.SpriteEmitter5'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter6
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
BlendBetweenSubdivisions=True
|
||||
UseRandomSubdivision=True
|
||||
UseVelocityScale=True
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.400000
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinsPerSecondRange=(X=(Min=0.050000,Max=0.050000))
|
||||
SizeScale(0)=(RelativeSize=0.400000)
|
||||
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=1.300000)
|
||||
StartSizeRange=(X=(Min=15.000000,Max=20.000000))
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.BulletHits.snowfinal2'
|
||||
TextureUSubdivisions=2
|
||||
TextureVSubdivisions=2
|
||||
LifetimeRange=(Min=1.300000,Max=1.300000)
|
||||
StartVelocityRange=(X=(Min=50.000000,Max=250.000000),Y=(Min=-10.000000,Max=10.000000),Z=(Min=-50.000000,Max=-25.000000))
|
||||
VelocityScale(0)=(RelativeVelocity=(X=1.000000,Y=1.000000,Z=1.000000))
|
||||
VelocityScale(1)=(RelativeTime=0.475000,RelativeVelocity=(X=0.100000,Y=0.200000,Z=0.200000))
|
||||
VelocityScale(2)=(RelativeTime=1.000000)
|
||||
End Object
|
||||
Emitters(8)=SpriteEmitter'ScrnHTec.IceDartMuzzleFlash.SpriteEmitter6'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter7
|
||||
ProjectionNormal=(Y=1.000000,Z=0.000000)
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.650000
|
||||
FadeOutStartTime=0.175000
|
||||
MaxParticles=3
|
||||
StartLocationRange=(X=(Min=10.000000,Max=10.000000))
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinCCWorCW=(X=0.000000)
|
||||
SpinsPerSecondRange=(X=(Max=0.200000))
|
||||
StartSpinRange=(X=(Min=-0.300000,Max=0.300000))
|
||||
SizeScale(0)=(RelativeSize=0.400000)
|
||||
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=1.000000)
|
||||
StartSizeRange=(X=(Min=35.000000,Max=60.000000),Y=(Min=35.000000,Max=60.000000),Z=(Min=35.000000,Max=60.000000))
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'kf_fx_trip_t.Misc.smoke_animated'
|
||||
TextureUSubdivisions=8
|
||||
TextureVSubdivisions=8
|
||||
LifetimeRange=(Min=0.450000,Max=0.450000)
|
||||
StartVelocityRange=(Z=(Min=-20.000000,Max=-15.000000))
|
||||
End Object
|
||||
Emitters(9)=SpriteEmitter'ScrnHTec.IceDartMuzzleFlash.SpriteEmitter7'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter8
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
BlendBetweenSubdivisions=True
|
||||
UseRandomSubdivision=True
|
||||
UseVelocityScale=True
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.450000
|
||||
MaxParticles=6
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinsPerSecondRange=(X=(Min=-0.100000,Max=0.100000))
|
||||
StartSpinRange=(X=(Min=-0.250000,Max=0.250000))
|
||||
SizeScale(0)=(RelativeSize=0.600000)
|
||||
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=1.700000)
|
||||
StartSizeRange=(X=(Min=20.000000,Max=27.000000))
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.explosions.DSmoke_2'
|
||||
TextureUSubdivisions=1
|
||||
TextureVSubdivisions=1
|
||||
LifetimeRange=(Min=1.000000,Max=1.000000)
|
||||
StartVelocityRange=(X=(Min=120.000000,Max=220.000000),Y=(Min=-75.000000,Max=75.000000),Z=(Min=-75.000000,Max=75.000000))
|
||||
VelocityScale(0)=(RelativeVelocity=(X=1.000000,Y=1.000000,Z=1.000000))
|
||||
VelocityScale(1)=(RelativeTime=0.475000,RelativeVelocity=(X=0.100000,Y=0.200000,Z=0.200000))
|
||||
VelocityScale(2)=(RelativeTime=1.000000)
|
||||
End Object
|
||||
Emitters(10)=SpriteEmitter'ScrnHTec.IceDartMuzzleFlash.SpriteEmitter8'
|
||||
|
||||
}
|
||||
24
kf_sources/ScrnHTec/Classes/IceDartTracer.uc
Normal file
24
kf_sources/ScrnHTec/Classes/IceDartTracer.uc
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
class IceDartTracer extends pclSmoke;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
mParticleType=PT_Stream
|
||||
mStartParticles=0
|
||||
mMaxParticles=40
|
||||
mLifeRange(0)=0.100000
|
||||
mLifeRange(1)=0.100000
|
||||
mRegenRange(0)=60.000000
|
||||
mRegenRange(1)=60.000000
|
||||
mSpawnVecB=(X=20.000000,Z=0.000000)
|
||||
mSizeRange(0)=5.000000
|
||||
mSizeRange(1)=5.000000
|
||||
mGrowthRate=-0.500000
|
||||
mColorRange(0)=(B=200,G=128,R=128,A=64)
|
||||
mColorRange(1)=(B=200,G=128,R=128,A=64)
|
||||
mNumTileColumns=1
|
||||
mNumTileRows=1
|
||||
Physics=PHYS_Trailer
|
||||
LifeSpan=2.900000
|
||||
Skins(0)=Texture'kf_fx_trip_t.Misc.NailTrailT'
|
||||
Style=STY_Additive
|
||||
}
|
||||
81
kf_sources/ScrnHTec/Classes/IceDartTrail.uc
Normal file
81
kf_sources/ScrnHTec/Classes/IceDartTrail.uc
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
class IceDartTrail extends FreezeParticlesDirectional;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter0
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
UniformSize=True
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.330000
|
||||
FadeOutStartTime=1.080000
|
||||
FadeInEndTime=0.120000
|
||||
MaxParticles=40
|
||||
SpinsPerSecondRange=(X=(Min=0.400000,Max=1.000000),Y=(Min=0.500000,Max=1.000000),Z=(Min=0.500000,Max=1.000000))
|
||||
StartSpinRange=(X=(Max=1.000000),Y=(Max=1.000000),Z=(Max=1.000000))
|
||||
StartSizeRange=(X=(Min=0.500000,Max=1.400000),Y=(Min=0.500000,Max=1.400000),Z=(Min=0.500000,Max=1.400000))
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.BulletHits.snowfinal2'
|
||||
TextureUSubdivisions=2
|
||||
TextureVSubdivisions=2
|
||||
LifetimeRange=(Min=2.000000,Max=2.000000)
|
||||
StartVelocityRange=(X=(Min=-300.000000,Max=300.000000),Y=(Min=-300.000000,Max=300.000000),Z=(Min=-300.000000,Max=300.000000))
|
||||
VelocityLossRange=(X=(Max=5.000000),Y=(Max=5.000000),Z=(Max=5.000000))
|
||||
End Object
|
||||
Emitters(0)=SpriteEmitter'ScrnHTec.IceDartTrail.SpriteEmitter0'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter2
|
||||
UseColorScale=True
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UniformSize=True
|
||||
ColorScale(0)=(Color=(B=140,G=140,R=140,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=120,G=120,R=120,A=150))
|
||||
Opacity=0.750000
|
||||
FadeOutStartTime=0.900000
|
||||
FadeInEndTime=0.200000
|
||||
MaxParticles=50
|
||||
StartLocationShape=PTLS_Polar
|
||||
SpinCCWorCW=(X=0.000000)
|
||||
SpinsPerSecondRange=(X=(Max=2.000000))
|
||||
StartSpinRange=(X=(Min=-0.350000,Max=0.400000))
|
||||
StartSizeRange=(X=(Min=2.000000,Max=4.000000),Y=(Min=2.000000,Max=4.000000),Z=(Min=2.000000,Max=4.000000))
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'HTec_A.fx.Ice_Trail'
|
||||
LifetimeRange=(Min=2.000000,Max=2.000000)
|
||||
StartVelocityRange=(Y=(Min=-100.000000,Max=100.000000),Z=(Min=-100.000000,Max=100.000000))
|
||||
VelocityLossRange=(Y=(Max=10.000000),Z=(Max=10.000000))
|
||||
End Object
|
||||
Emitters(1)=SpriteEmitter'ScrnHTec.IceDartTrail.SpriteEmitter2'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter3
|
||||
UseColorScale=True
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UniformSize=True
|
||||
ColorScale(0)=(Color=(B=140,G=140,R=140,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=120,G=120,R=120,A=180))
|
||||
Opacity=0.750000
|
||||
FadeOutStartTime=0.900000
|
||||
FadeInEndTime=0.200000
|
||||
MaxParticles=50
|
||||
StartLocationShape=PTLS_Sphere
|
||||
SpinsPerSecondRange=(X=(Min=1.000000,Max=3.000000))
|
||||
StartSpinRange=(X=(Min=-0.350000,Max=0.400000))
|
||||
StartSizeRange=(X=(Min=1.000000,Max=3.000000),Y=(Min=1.000000,Max=3.000000),Z=(Min=1.000000,Max=3.000000))
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'HTec_A.fx.Ice_Trail'
|
||||
LifetimeRange=(Min=2.000000,Max=2.000000)
|
||||
StartVelocityRange=(Y=(Min=-100.000000,Max=100.000000),Z=(Min=-100.000000,Max=100.000000))
|
||||
VelocityLossRange=(Y=(Max=10.000000),Z=(Max=10.000000))
|
||||
End Object
|
||||
Emitters(2)=SpriteEmitter'ScrnHTec.IceDartTrail.SpriteEmitter3'
|
||||
|
||||
Physics=PHYS_Trailer
|
||||
LifeSpan=5.000000
|
||||
}
|
||||
110
kf_sources/ScrnHTec/Classes/KVolt.uc
Normal file
110
kf_sources/ScrnHTec/Classes/KVolt.uc
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
//=============================================================================
|
||||
// K-VOLT 2
|
||||
//=============================================================================
|
||||
class KVolt extends KFWeapon
|
||||
config(user);
|
||||
|
||||
#exec OBJ LOAD FILE=HTec_A.ukx
|
||||
|
||||
|
||||
//=============================================================================
|
||||
// Dynamic Asset Load
|
||||
//=============================================================================
|
||||
|
||||
//=============================================================================
|
||||
// Functions
|
||||
//=============================================================================
|
||||
|
||||
exec function ReloadMeNow()
|
||||
{
|
||||
if(!AllowReload())
|
||||
return;
|
||||
|
||||
if ( ThirdPersonActor != none && Level.NetMode != NM_DedicatedServer )
|
||||
KVoltAttachment(ThirdPersonActor).PlayReload();
|
||||
|
||||
super.ReloadMeNow();
|
||||
}
|
||||
|
||||
function bool RecommendRangedAttack()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
simulated function SetZoomBlendColor(Canvas c)
|
||||
{
|
||||
local Byte val;
|
||||
local Color clr;
|
||||
local Color fog;
|
||||
|
||||
clr.R = 255;
|
||||
clr.G = 255;
|
||||
clr.B = 255;
|
||||
clr.A = 255;
|
||||
|
||||
if( Instigator.Region.Zone.bDistanceFog )
|
||||
{
|
||||
fog = Instigator.Region.Zone.DistanceFogColor;
|
||||
val = 0;
|
||||
val = Max( val, fog.R);
|
||||
val = Max( val, fog.G);
|
||||
val = Max( val, fog.B);
|
||||
if( val > 128 )
|
||||
{
|
||||
val -= 128;
|
||||
clr.R -= val;
|
||||
clr.G -= val;
|
||||
clr.B -= val;
|
||||
}
|
||||
}
|
||||
c.DrawColor = clr;
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MagCapacity=40
|
||||
ReloadRate=2.900000
|
||||
ReloadAnim="Reload"
|
||||
ReloadAnimRate=1.000000
|
||||
WeaponReloadAnim="Reload_Kriss"
|
||||
Weight=3.000000
|
||||
bHasAimingMode=True
|
||||
IdleAimAnim="Idle_Iron"
|
||||
StandardDisplayFOV=70.000000
|
||||
bModeZeroCanDryFire=True
|
||||
TraderInfoTexture=Texture'HTec_A.KVolt.kvolt_trader'
|
||||
MeshRef="HTec_A.kvolt_mesh"
|
||||
SkinRefs(0)="HTec_A.KVolt.kvolt_tex_a"
|
||||
SkinRefs(2)="HTec_A.KVolt.kvolt_text"
|
||||
SkinRefs(3)="HTec_A.KVolt.kvolt_a_shdr"
|
||||
SkinRefs(4)="HTec_A.KVolt.kvolt_b_shdr"
|
||||
SelectSoundRef="HTec_A.KVolt.kvolt_deploy"
|
||||
HudImageRef="HTec_A.KVolt.kvolt_unsel"
|
||||
SelectedHudImageRef="HTec_A.KVolt.kvolt_sel"
|
||||
PlayerIronSightFOV=65.000000
|
||||
ZoomedDisplayFOV=40.000000
|
||||
FireModeClass(0)=Class'ScrnHTec.KVoltFire'
|
||||
FireModeClass(1)=Class'KFMod.NoFire'
|
||||
PutDownAnim="PutDown"
|
||||
SelectAnimRate=1.000000
|
||||
BringUpTime=0.700000
|
||||
SelectForce="SwitchToAssaultRifle"
|
||||
AIRating=0.550000
|
||||
CurrentRating=0.550000
|
||||
bShowChargingBar=True
|
||||
Description="Horzine modification of The K-Volt Prototype to fire cryo darts. K-Volt's cryo darts are weaker than Mass Driver's, but they have longer aftereffect and enhanced shattering capability."
|
||||
EffectOffset=(X=100.000000,Y=25.000000,Z=-10.000000)
|
||||
DisplayFOV=70.000000
|
||||
Priority=70
|
||||
CustomCrosshair=11
|
||||
CustomCrossHairTextureName="Crosshairs.HUD.Crosshair_Cross5"
|
||||
InventoryGroup=3
|
||||
GroupOffset=1
|
||||
PickupClass=Class'ScrnHTec.KVoltPickup'
|
||||
PlayerViewOffset=(X=20.000000,Y=21.500000,Z=-9.000000)
|
||||
BobDamping=6.000000
|
||||
AttachmentClass=Class'ScrnHTec.KVoltAttachment'
|
||||
IconCoords=(X1=245,Y1=39,X2=329,Y2=79)
|
||||
ItemName="HTec K-VOLT Cryo"
|
||||
TransientSoundVolume=1.250000
|
||||
}
|
||||
17
kf_sources/ScrnHTec/Classes/KVoltAmmo.uc
Normal file
17
kf_sources/ScrnHTec/Classes/KVoltAmmo.uc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
//=============================================================================
|
||||
// L85 Ammo.
|
||||
//=============================================================================
|
||||
class KVoltAmmo extends KFAmmunition;
|
||||
|
||||
#EXEC OBJ LOAD FILE=KillingFloorHUD.utx
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoPickupAmount=50
|
||||
MaxAmmo=400
|
||||
InitialAmount=150
|
||||
PickupClass=Class'ScrnHTec.KVoltAmmoAmmoPickup'
|
||||
IconMaterial=Texture'KillingFloorHUD.Generic.HUD'
|
||||
IconCoords=(X1=336,Y1=82,X2=382,Y2=125)
|
||||
ItemName="Cryo darts"
|
||||
}
|
||||
9
kf_sources/ScrnHTec/Classes/KVoltAmmoAmmoPickup.uc
Normal file
9
kf_sources/ScrnHTec/Classes/KVoltAmmoAmmoPickup.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class KVoltAmmoAmmoPickup extends KFAmmoPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmmoAmount=50
|
||||
InventoryType=Class'ScrnHTec.KVoltAmmo'
|
||||
PickupMessage="Cryo Darts"
|
||||
StaticMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
}
|
||||
47
kf_sources/ScrnHTec/Classes/KVoltAttachment.uc
Normal file
47
kf_sources/ScrnHTec/Classes/KVoltAttachment.uc
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
class KVoltAttachment extends KrissMAttachment;
|
||||
|
||||
var transient bool bReloading;
|
||||
var transient float ReloadFinishTime;
|
||||
var name ReloadAnim3rd;
|
||||
var name InstigatorReloadAnim; // pawn's animation name
|
||||
var float InstigatorReloadRate; // shouldn't be sligthly longer than pawns's reload animation to avoid double playing
|
||||
|
||||
|
||||
simulated function Tick(float dt)
|
||||
{
|
||||
super.Tick(dt);
|
||||
|
||||
if ( bReloading && Level.TimeSeconds > ReloadFinishTime )
|
||||
bReloading = false;
|
||||
else if ( !bReloading && Level.NetMode == NM_Client && Instigator != none && Instigator.AnimAction == InstigatorReloadAnim )
|
||||
PlayReload();
|
||||
}
|
||||
|
||||
simulated function PlayReload()
|
||||
{
|
||||
if ( bReloading )
|
||||
return;
|
||||
bReloading = true;
|
||||
ReloadFinishTime = Level.TimeSeconds + InstigatorReloadRate;
|
||||
PlayAnim(ReloadAnim3rd);
|
||||
}
|
||||
|
||||
simulated function Notify_3rd_HideMag()
|
||||
{
|
||||
SetBoneScale(0,0.0,'kvolt_mag');
|
||||
}
|
||||
|
||||
simulated function Notify_3rd_ShowMag()
|
||||
{
|
||||
SetBoneScale(0,1.0,'kvolt_mag');
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ReloadAnim3rd="Reload"
|
||||
InstigatorReloadAnim="Reload_Kriss"
|
||||
InstigatorReloadRate=3.500000
|
||||
mMuzFlashClass=Class'ROEffects.MuzzleFlash3rdNailGun'
|
||||
mShellCaseEmitterClass=None
|
||||
MeshRef="HTec_A.kvolt_3rd"
|
||||
}
|
||||
9
kf_sources/ScrnHTec/Classes/KVoltDart.uc
Normal file
9
kf_sources/ScrnHTec/Classes/KVoltDart.uc
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
class KVoltDart extends IceDart;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Speed=3000.000000
|
||||
MaxSpeed=5000.000000
|
||||
Damage=22.000000
|
||||
MyDamageType=Class'ScrnHTec.DamTypeKVolt'
|
||||
}
|
||||
57
kf_sources/ScrnHTec/Classes/KVoltFire.uc
Normal file
57
kf_sources/ScrnHTec/Classes/KVoltFire.uc
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
//=============================================================================
|
||||
//L85 Fire
|
||||
//=============================================================================
|
||||
class KVoltFire extends KFShotgunFire;
|
||||
|
||||
simulated function bool AllowFire()
|
||||
{
|
||||
if(KFWeapon(Weapon).bIsReloading)
|
||||
return false;
|
||||
if(KFPawn(Instigator).SecondaryItem!=none)
|
||||
return false;
|
||||
if(KFPawn(Instigator).bThrowingNade)
|
||||
return false;
|
||||
|
||||
if(KFWeapon(Weapon).MagAmmoRemaining < AmmoPerFire)
|
||||
{
|
||||
if( Level.TimeSeconds - LastClickTime>FireRate )
|
||||
{
|
||||
LastClickTime = Level.TimeSeconds;
|
||||
}
|
||||
|
||||
if( AIController(Instigator.Controller)!=None )
|
||||
KFWeapon(Weapon).ReloadMeNow();
|
||||
return false;
|
||||
}
|
||||
|
||||
return super(WeaponFire).AllowFire();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
RecoilRate=0.070000
|
||||
maxVerticalRecoilAngle=125
|
||||
maxHorizontalRecoilAngle=50
|
||||
FireAimedAnim="Fire_Iron"
|
||||
FireSoundRef="HTec_A.KVolt.kvolt_fire_m"
|
||||
StereoFireSoundRef="HTec_A.KVolt.kvolt_fire_s"
|
||||
NoAmmoSoundRef="KF_NailShotgun.Fire.KF_NailShotgun_Dryfire"
|
||||
ProjPerFire=1
|
||||
bPawnRapidFireAnim=True
|
||||
TransientSoundVolume=1.000000
|
||||
TweenTime=0.015000
|
||||
FireForce="AssaultRifleFire"
|
||||
FireRate=0.075000
|
||||
AmmoClass=Class'ScrnHTec.KVoltAmmo'
|
||||
ShakeRotMag=(X=75.000000,Y=75.000000,Z=250.000000)
|
||||
ShakeRotRate=(X=10000.000000,Y=10000.000000,Z=10000.000000)
|
||||
ShakeRotTime=0.500000
|
||||
ShakeOffsetMag=(X=6.000000,Y=3.000000,Z=10.000000)
|
||||
ShakeOffsetRate=(X=1000.000000,Y=1000.000000,Z=1000.000000)
|
||||
ShakeOffsetTime=1.000000
|
||||
ProjectileClass=Class'ScrnHTec.KVoltDart'
|
||||
BotRefireRate=0.990000
|
||||
FlashEmitterClass=Class'ScrnHTec.IceDartMuzzleFlash'
|
||||
aimerror=42.000000
|
||||
Spread=0.010000
|
||||
}
|
||||
30
kf_sources/ScrnHTec/Classes/KVoltPickup.uc
Normal file
30
kf_sources/ScrnHTec/Classes/KVoltPickup.uc
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
//=============================================================================
|
||||
// KVOLT 2 PICKUP
|
||||
//=============================================================================
|
||||
class KVoltPickup extends KFWeaponPickup;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Weight=3.000000
|
||||
cost=1000
|
||||
AmmoCost=23
|
||||
BuyClipSize=40
|
||||
PowerValue=54
|
||||
SpeedValue=90
|
||||
RangeValue=80
|
||||
Description="Horzine modification of The K-Volt Prototype to fire cryo darts. K-Volt's cryo darts are weaker than Mass Driver's, but they have longer aftereffect and enhanced shattering capability."
|
||||
ItemName="HTec K-VOLT Cryo"
|
||||
ItemShortName="HTec K-VOLT"
|
||||
AmmoItemName="Cryo Darts"
|
||||
AmmoMesh=StaticMesh'KillingFloorStatics.L85Ammo'
|
||||
CorrespondingPerkIndex=11
|
||||
EquipmentCategoryID=2
|
||||
InventoryType=Class'ScrnHTec.KVolt'
|
||||
PickupMessage="You got the HTec K-VOLT Cryo"
|
||||
PickupSound=Sound'HTec_A.KVolt.kvolt_magin'
|
||||
PickupForce="AssaultRiflePickup"
|
||||
StaticMesh=StaticMesh'HTec_A.kvolt_pickup'
|
||||
DrawScale=1.200000
|
||||
CollisionRadius=25.000000
|
||||
CollisionHeight=5.000000
|
||||
}
|
||||
18
kf_sources/ScrnHTec/Classes/NitroDecal.uc
Normal file
18
kf_sources/ScrnHTec/Classes/NitroDecal.uc
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
class NitroDecal extends ProjectedDecal;
|
||||
|
||||
#exec OBJ LOAD FILE=HTec_A.ukx
|
||||
|
||||
simulated function BeginPlay()
|
||||
{
|
||||
if ( !Level.bDropDetail && FRand() < 0.4 )
|
||||
ProjTexture = texture'HTec_A.Nitro.NitroSplat';
|
||||
Super.BeginPlay();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
bClipStaticMesh=True
|
||||
CullDistance=7000.000000
|
||||
LifeSpan=5.000000
|
||||
DrawScale=0.500000
|
||||
}
|
||||
209
kf_sources/ScrnHTec/Classes/NitroFire.uc
Normal file
209
kf_sources/ScrnHTec/Classes/NitroFire.uc
Normal file
|
|
@ -0,0 +1,209 @@
|
|||
class NitroFire extends CrossbowFire
|
||||
abstract;
|
||||
|
||||
// sound
|
||||
var sound FireEndSound; // The sound to play at the end of the ambient fire sound
|
||||
var sound FireEndStereoSound; // The sound to play at the end of the ambient fire sound in first person stereo
|
||||
var float AmbientFireSoundRadius; // The sound radius for the ambient fire sound
|
||||
var sound AmbientFireSound; // How loud to play the looping ambient fire sound
|
||||
var byte AmbientFireVolume; // The ambient fire sound
|
||||
|
||||
|
||||
var string FireEndSoundRef;
|
||||
var string FireEndStereoSoundRef;
|
||||
var string AmbientFireSoundRef;
|
||||
|
||||
static function PreloadAssets(LevelInfo LevelInfo, optional KFShotgunFire Spawned)
|
||||
{
|
||||
local NitroFire F;
|
||||
|
||||
super.PreloadAssets(LevelInfo, Spawned);
|
||||
|
||||
if ( default.FireEndSoundRef != "" )
|
||||
{
|
||||
default.FireEndSound = sound(DynamicLoadObject(default.FireEndSoundRef, class'sound', true));
|
||||
}
|
||||
|
||||
if ( LevelInfo.bLowSoundDetail || (default.FireEndStereoSoundRef == "" && default.FireEndStereoSound == none) )
|
||||
{
|
||||
default.FireEndStereoSound = default.FireEndSound;
|
||||
}
|
||||
else
|
||||
{
|
||||
default.FireEndStereoSound = sound(DynamicLoadObject(default.FireEndStereoSoundRef, class'Sound', true));
|
||||
}
|
||||
|
||||
if ( default.AmbientFireSoundRef != "" )
|
||||
{
|
||||
default.AmbientFireSound = sound(DynamicLoadObject(default.AmbientFireSoundRef, class'sound', true));
|
||||
}
|
||||
|
||||
F = NitroFire(Spawned);
|
||||
if ( F != none ) {
|
||||
F.FireEndSound = default.FireEndSound;
|
||||
F.FireEndStereoSound = default.FireEndStereoSound;
|
||||
F.AmbientFireSound = default.AmbientFireSound;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static function bool UnloadAssets()
|
||||
{
|
||||
default.FireEndSound = none;
|
||||
default.FireEndStereoSound = none;
|
||||
default.AmbientFireSound = none;
|
||||
|
||||
return super.UnloadAssets();
|
||||
}
|
||||
|
||||
|
||||
// Sends the fire class to the looping state
|
||||
function StartFiring()
|
||||
{
|
||||
GotoState('FireLoop');
|
||||
}
|
||||
|
||||
// Handles toggling the weapon attachment's ambient sound on and off
|
||||
function PlayAmbientSound(Sound aSound)
|
||||
{
|
||||
local WeaponAttachment WA;
|
||||
|
||||
WA = WeaponAttachment(Weapon.ThirdPersonActor);
|
||||
|
||||
if ( Weapon == none || (WA == none))
|
||||
return;
|
||||
|
||||
if(aSound == None)
|
||||
{
|
||||
WA.SoundVolume = WA.default.SoundVolume;
|
||||
WA.SoundRadius = WA.default.SoundRadius;
|
||||
}
|
||||
else
|
||||
{
|
||||
WA.SoundVolume = AmbientFireVolume;
|
||||
WA.SoundRadius = AmbientFireSoundRadius;
|
||||
}
|
||||
|
||||
WA.AmbientSound = aSound;
|
||||
}
|
||||
|
||||
// Make sure we are in the fire looping state when we fire
|
||||
event ModeDoFire()
|
||||
{
|
||||
if( AllowFire() && IsInState('FireLoop'))
|
||||
{
|
||||
Super.ModeDoFire();
|
||||
}
|
||||
}
|
||||
|
||||
simulated function bool AllowFire()
|
||||
{
|
||||
if(KFWeapon(Weapon).bIsReloading)
|
||||
return false;
|
||||
if(KFWeapon(Weapon).MagAmmoRemaining < 1)
|
||||
{
|
||||
if(Level.TimeSeconds - LastClickTime > FireRate)
|
||||
{
|
||||
Weapon.PlayOwnedSound(NoAmmoSound, SLOT_Interact, TransientSoundVolume,,,, false);
|
||||
LastClickTime = Level.TimeSeconds;
|
||||
if(Weapon.HasAnim(EmptyAnim))
|
||||
weapon.PlayAnim(EmptyAnim, EmptyAnimRate, 0.0);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
LastClickTime = Level.TimeSeconds;
|
||||
return Super.AllowFire();
|
||||
}
|
||||
|
||||
/* =================================================================================== *
|
||||
* FireLoop
|
||||
* This state handles looping the firing animations and ambient fire sounds as well
|
||||
* as firing rounds.
|
||||
*
|
||||
* modified by: Ramm 1/17/05
|
||||
* =================================================================================== */
|
||||
state FireLoop
|
||||
{
|
||||
function BeginState()
|
||||
{
|
||||
NextFireTime = Level.TimeSeconds - 0.1; //fire now!
|
||||
|
||||
Weapon.LoopAnim(FireLoopAnim, FireLoopAnimRate, TweenTime);
|
||||
|
||||
PlayAmbientSound(AmbientFireSound);
|
||||
}
|
||||
|
||||
// Overriden because we play an anbient fire sound
|
||||
function PlayFiring() {}
|
||||
function ServerPlayFiring() {}
|
||||
|
||||
function EndState()
|
||||
{
|
||||
Weapon.AnimStopLooping();
|
||||
PlayAmbientSound(none);
|
||||
if( Weapon.Instigator != none && Weapon.Instigator.IsLocallyControlled() &&
|
||||
Weapon.Instigator.IsFirstPerson() && StereoFireSound != none )
|
||||
{
|
||||
Weapon.PlayOwnedSound(FireEndStereoSound,SLOT_None,AmbientFireVolume/127,,AmbientFireSoundRadius,,false);
|
||||
}
|
||||
else
|
||||
{
|
||||
Weapon.PlayOwnedSound(FireEndSound,SLOT_None,AmbientFireVolume/127,,AmbientFireSoundRadius);
|
||||
}
|
||||
Weapon.StopFire(ThisModeNum);
|
||||
}
|
||||
|
||||
function StopFiring()
|
||||
{
|
||||
GotoState('');
|
||||
}
|
||||
|
||||
function ModeTick(float dt)
|
||||
{
|
||||
Super.ModeTick(dt);
|
||||
|
||||
if ( !bIsFiring || !AllowFire() ) // stopped firing, magazine empty
|
||||
{
|
||||
GotoState('');
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function float MaxRange()
|
||||
{
|
||||
return 1500;
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
AmbientFireSoundRadius=500.000000
|
||||
AmbientFireVolume=255
|
||||
FireEndSoundRef="HTec_A.Fire2endmono"
|
||||
FireEndStereoSoundRef="HTec_A.Fire2endstereo"
|
||||
AmbientFireSoundRef="HTec_A.Fire2loopstereo"
|
||||
EffectiveRange=1500.000000
|
||||
maxVerticalRecoilAngle=300
|
||||
maxHorizontalRecoilAngle=150
|
||||
FireSoundRef=
|
||||
NoAmmoSoundRef="KF_FlamethrowerSnd.FT_DryFire"
|
||||
ProjSpawnOffset=(X=12.000000,Y=5.000000,Z=-22.000000)
|
||||
bSplashDamage=True
|
||||
bRecommendSplashDamage=True
|
||||
bWaitForRelease=False
|
||||
bAttachSmokeEmitter=True
|
||||
TransientSoundVolume=1.000000
|
||||
TransientSoundRadius=500.000000
|
||||
FireAnim="'"
|
||||
FireLoopAnim="FireAlt"
|
||||
FireEndAnim="FireAltEnd"
|
||||
FireRate=0.070000
|
||||
ShakeRotMag=(X=0.000000,Y=0.000000,Z=0.000000)
|
||||
ShakeRotRate=(X=0.000000,Y=0.000000,Z=0.000000)
|
||||
ShakeOffsetMag=(X=0.000000,Y=0.000000,Z=0.000000)
|
||||
ProjectileClass=Class'ScrnHTec.NitroProjectile'
|
||||
BotRefireRate=0.070000
|
||||
FlashEmitterClass=Class'ScrnHTec.NitroMuzzleFlash'
|
||||
Spread=1500.000000
|
||||
SpreadStyle=SS_Random
|
||||
}
|
||||
37
kf_sources/ScrnHTec/Classes/NitroGroundEffect.uc
Normal file
37
kf_sources/ScrnHTec/Classes/NitroGroundEffect.uc
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
class NitroGroundEffect extends FreezeParticlesDirectional;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter0
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
ExtentMultiplier=(X=0.000000,Y=0.000000)
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.470000
|
||||
FadeOutStartTime=0.940000
|
||||
FadeInEndTime=0.300000
|
||||
MaxParticles=50
|
||||
StartLocationShape=PTLS_Polar
|
||||
SpinsPerSecondRange=(X=(Max=0.035000))
|
||||
StartSpinRange=(X=(Min=-0.200000,Max=0.300000))
|
||||
SizeScale(0)=(RelativeTime=0.500000,RelativeSize=0.900000)
|
||||
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=0.500000)
|
||||
StartSizeRange=(X=(Min=15.000000,Max=35.000000),Y=(Min=15.000000,Max=35.000000),Z=(Min=15.000000,Max=35.000000))
|
||||
InitialParticlesPerSecond=60.000000
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.explosions.DSmoke_2'
|
||||
LifetimeRange=(Min=2.000000,Max=2.000000)
|
||||
StartVelocityRange=(X=(Min=-85.000000,Max=85.000000),Y=(Min=-85.000000,Max=85.000000))
|
||||
StartVelocityRadialRange=(Min=-40.000000,Max=40.000000)
|
||||
End Object
|
||||
Emitters(0)=SpriteEmitter'ScrnHTec.NitroGroundEffect.SpriteEmitter0'
|
||||
|
||||
LifeSpan=5.000000
|
||||
}
|
||||
67
kf_sources/ScrnHTec/Classes/NitroImpact.uc
Normal file
67
kf_sources/ScrnHTec/Classes/NitroImpact.uc
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
class NitroImpact extends FreezeParticlesDirectional;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter1
|
||||
UseColorScale=True
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
Acceleration=(Z=-5.000000)
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScaleRepeats=1.000000
|
||||
FadeOutStartTime=1.500000
|
||||
MaxParticles=3
|
||||
SpinsPerSecondRange=(Y=(Min=0.050000,Max=0.100000),Z=(Min=0.050000,Max=0.100000))
|
||||
StartSpinRange=(X=(Max=0.400000),Y=(Max=1.000000),Z=(Max=1.000000))
|
||||
SizeScale(1)=(RelativeSize=0.300000)
|
||||
SizeScale(2)=(RelativeTime=1.000000,RelativeSize=0.250000)
|
||||
StartSizeRange=(X=(Min=65.000000,Max=120.000000),Y=(Min=65.000000,Max=120.000000),Z=(Min=65.000000,Max=120.000000))
|
||||
InitialParticlesPerSecond=10000.000000
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'kf_fx_trip_t.Misc.smoke_animated'
|
||||
TextureUSubdivisions=8
|
||||
TextureVSubdivisions=8
|
||||
LifetimeRange=(Min=3.000000,Max=3.000000)
|
||||
StartVelocityRange=(X=(Min=-5.000000,Max=5.000000),Y=(Min=-5.000000,Max=5.000000),Z=(Min=-5.000000,Max=5.000000))
|
||||
End Object
|
||||
Emitters(0)=SpriteEmitter'ScrnHTec.NitroImpact.SpriteEmitter1'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter3
|
||||
UseColorScale=True
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
Acceleration=(Z=-15.000000)
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScaleRepeats=1.000000
|
||||
Opacity=0.500000
|
||||
FadeOutStartTime=1.500000
|
||||
MaxParticles=8
|
||||
SpinsPerSecondRange=(X=(Min=0.050000,Max=0.100000),Y=(Min=0.050000,Max=0.100000),Z=(Min=0.050000,Max=0.100000))
|
||||
StartSpinRange=(X=(Max=1.000000),Y=(Max=1.000000),Z=(Max=1.000000))
|
||||
SizeScale(1)=(RelativeSize=0.400000)
|
||||
SizeScale(2)=(RelativeTime=1.000000,RelativeSize=0.250000)
|
||||
StartSizeRange=(X=(Min=45.000000,Max=65.000000),Y=(Min=45.000000,Max=65.000000),Z=(Min=45.000000,Max=65.000000))
|
||||
InitialParticlesPerSecond=10000.000000
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.explosions.DSmoke_2'
|
||||
TextureUSubdivisions=1
|
||||
TextureVSubdivisions=1
|
||||
LifetimeRange=(Min=3.000000,Max=3.000000)
|
||||
StartVelocityRange=(X=(Min=-7.500000,Max=7.500000),Y=(Min=-7.500000,Max=7.500000),Z=(Min=-20.000000,Max=20.000000))
|
||||
End Object
|
||||
Emitters(1)=SpriteEmitter'ScrnHTec.NitroImpact.SpriteEmitter3'
|
||||
|
||||
LifeSpan=5.000000
|
||||
}
|
||||
306
kf_sources/ScrnHTec/Classes/NitroMuzzleFlash.uc
Normal file
306
kf_sources/ScrnHTec/Classes/NitroMuzzleFlash.uc
Normal file
|
|
@ -0,0 +1,306 @@
|
|||
class NitroMuzzleFlash extends ROMuzzleFlash1st;
|
||||
|
||||
simulated function Trigger(Actor Other, Pawn EventInstigator)
|
||||
{
|
||||
local int i;
|
||||
|
||||
for ( i=0; i<Emitters.length; ++i ) {
|
||||
Emitters[i].SpawnParticle(1);
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter0
|
||||
UseCollision=True
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
UseRandomSubdivision=True
|
||||
Acceleration=(X=150.000000,Z=-1000.000000)
|
||||
ExtentMultiplier=(X=0.000000,Y=0.000000,Z=0.000000)
|
||||
DampingFactorRange=(X=(Min=0.250000,Max=0.250000),Y=(Min=0.250000,Max=0.250000),Z=(Min=0.250000,Max=0.250000))
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
FadeOutStartTime=0.500000
|
||||
MaxParticles=45
|
||||
UseRotationFrom=PTRS_Actor
|
||||
StartSizeRange=(X=(Min=0.700000,Max=1.700000))
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.BulletHits.snowchunksfinal'
|
||||
TextureUSubdivisions=2
|
||||
TextureVSubdivisions=2
|
||||
LifetimeRange=(Min=1.400000,Max=1.400000)
|
||||
StartVelocityRange=(X=(Min=150.000000,Max=650.000000),Y=(Min=-155.000000,Max=155.000000),Z=(Min=-155.000000,Max=155.000000))
|
||||
End Object
|
||||
Emitters(0)=SpriteEmitter'ScrnHTec.NitroMuzzleFlash.SpriteEmitter0'
|
||||
|
||||
Begin Object Class=BeamEmitter Name=BeamEmitter0
|
||||
BeamDistanceRange=(Min=3.000000,Max=300.000000)
|
||||
RotatingSheets=1
|
||||
LowFrequencyNoiseRange=(X=(Min=60.000000,Max=60.000000),Y=(Min=60.000000,Max=60.000000),Z=(Min=60.000000,Max=60.000000))
|
||||
LowFrequencyPoints=8
|
||||
HighFrequencyNoiseRange=(X=(Min=-3.000000,Max=3.000000),Y=(Min=-3.000000,Max=3.000000),Z=(Min=-3.000000,Max=3.000000))
|
||||
HighFrequencyPoints=3
|
||||
UseLowFrequencyScale=True
|
||||
UseBranching=True
|
||||
BranchProbability=(Min=1.000000,Max=1.000000)
|
||||
BranchEmitter=1
|
||||
BranchSpawnAmountRange=(Min=1.000000,Max=2.000000)
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
AutomaticInitialSpawning=False
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.370000
|
||||
FadeOutStartTime=1.120000
|
||||
MaxParticles=5
|
||||
RotationNormal=(X=40.000000,Y=40.000000,Z=40.000000)
|
||||
StartSizeRange=(X=(Min=0.700000,Max=0.700000),Y=(Min=0.700000,Max=0.700000),Z=(Min=0.700000,Max=0.700000))
|
||||
Texture=Texture'HTec_A.fx.Streak'
|
||||
InitialTimeRange=(Max=0.250000)
|
||||
LifetimeRange=(Min=2.000000,Max=2.000000)
|
||||
StartVelocityRange=(X=(Min=-40.000000,Max=40.000000),Y=(Min=-40.000000,Max=40.000000),Z=(Min=-40.000000,Max=40.000000))
|
||||
End Object
|
||||
Emitters(1)=BeamEmitter'ScrnHTec.NitroMuzzleFlash.BeamEmitter0'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter1
|
||||
ProjectionNormal=(Y=1.000000,Z=0.000000)
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.100000
|
||||
FadeOutStartTime=0.540000
|
||||
FadeInEndTime=0.015000
|
||||
MaxParticles=16
|
||||
StartLocationRange=(X=(Min=20.000000,Max=20.000000))
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinCCWorCW=(X=0.000000)
|
||||
SpinsPerSecondRange=(X=(Max=0.300000))
|
||||
StartSpinRange=(X=(Min=-0.300000,Max=0.300000))
|
||||
SizeScale(0)=(RelativeSize=0.300000)
|
||||
SizeScale(1)=(RelativeTime=0.500000,RelativeSize=0.600000)
|
||||
SizeScale(2)=(RelativeTime=1.000000,RelativeSize=1.000000)
|
||||
StartSizeRange=(X=(Min=45.000000,Max=80.000000),Y=(Min=45.000000,Max=80.000000),Z=(Min=45.000000,Max=80.000000))
|
||||
Texture=Texture'HTec_A.fx.Liquid'
|
||||
TextureUSubdivisions=1
|
||||
TextureVSubdivisions=1
|
||||
LifetimeRange=(Min=0.750000,Max=0.750000)
|
||||
StartVelocityRange=(X=(Min=200.000000,Max=600.000000),Z=(Min=-50.000000,Max=-15.000000))
|
||||
End Object
|
||||
Emitters(2)=SpriteEmitter'ScrnHTec.NitroMuzzleFlash.SpriteEmitter1'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter2
|
||||
ProjectionNormal=(Y=1.000000,Z=0.000000)
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.500000
|
||||
FadeOutStartTime=0.442500
|
||||
FadeInEndTime=0.007500
|
||||
MaxParticles=12
|
||||
StartLocationRange=(X=(Min=20.000000,Max=20.000000))
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinCCWorCW=(X=0.000000)
|
||||
SpinsPerSecondRange=(X=(Max=0.300000))
|
||||
StartSpinRange=(X=(Min=-0.300000,Max=0.300000))
|
||||
SizeScale(0)=(RelativeSize=0.400000)
|
||||
SizeScale(1)=(RelativeTime=0.500000,RelativeSize=0.700000)
|
||||
SizeScale(2)=(RelativeTime=1.000000,RelativeSize=1.300000)
|
||||
StartSizeRange=(X=(Min=40.000000,Max=50.000000),Y=(Min=40.000000,Max=50.000000),Z=(Min=40.000000,Max=50.000000))
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.BulletHits.watersplatter2'
|
||||
TextureUSubdivisions=2
|
||||
TextureVSubdivisions=2
|
||||
LifetimeRange=(Min=0.750000,Max=0.750000)
|
||||
StartVelocityRange=(X=(Min=150.000000,Max=650.000000),Z=(Min=-50.000000,Max=-15.000000))
|
||||
End Object
|
||||
Emitters(3)=SpriteEmitter'ScrnHTec.NitroMuzzleFlash.SpriteEmitter2'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter3
|
||||
ProjectionNormal=(Y=1.000000,Z=0.000000)
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
Acceleration=(Z=-15.000000)
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.850000
|
||||
FadeOutStartTime=0.175000
|
||||
MaxParticles=8
|
||||
StartLocationRange=(X=(Min=10.000000,Max=10.000000))
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinCCWorCW=(X=0.000000)
|
||||
SpinsPerSecondRange=(X=(Max=0.200000))
|
||||
StartSpinRange=(X=(Min=-0.300000,Max=0.300000))
|
||||
SizeScale(0)=(RelativeSize=0.400000)
|
||||
SizeScale(1)=(RelativeTime=0.560000,RelativeSize=1.000000)
|
||||
StartSizeRange=(X=(Min=35.000000,Max=60.000000),Y=(Min=35.000000,Max=60.000000),Z=(Min=35.000000,Max=60.000000))
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'kf_fx_trip_t.Misc.smoke_animated'
|
||||
TextureUSubdivisions=8
|
||||
TextureVSubdivisions=8
|
||||
LifetimeRange=(Min=0.350000,Max=0.350000)
|
||||
End Object
|
||||
Emitters(4)=SpriteEmitter'ScrnHTec.NitroMuzzleFlash.SpriteEmitter3'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter4
|
||||
ProjectionNormal=(Y=1.000000,Z=0.000000)
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.250000
|
||||
FadeOutStartTime=0.442500
|
||||
FadeInEndTime=0.007500
|
||||
MaxParticles=12
|
||||
StartLocationRange=(X=(Min=20.000000,Max=20.000000))
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinCCWorCW=(X=0.000000)
|
||||
SpinsPerSecondRange=(X=(Max=0.300000))
|
||||
StartSpinRange=(X=(Min=-0.300000,Max=0.300000))
|
||||
SizeScale(0)=(RelativeSize=0.400000)
|
||||
SizeScale(1)=(RelativeTime=0.500000,RelativeSize=0.900000)
|
||||
SizeScale(2)=(RelativeTime=1.000000,RelativeSize=1.300000)
|
||||
StartSizeRange=(X=(Min=35.000000,Max=55.000000),Y=(Min=35.000000,Max=55.000000),Z=(Min=35.000000,Max=55.000000))
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.BulletHits.watersplashcloud'
|
||||
TextureUSubdivisions=1
|
||||
TextureVSubdivisions=1
|
||||
LifetimeRange=(Min=0.750000,Max=0.750000)
|
||||
StartVelocityRange=(X=(Min=350.000000,Max=600.000000),Z=(Min=-50.000000,Max=-15.000000))
|
||||
End Object
|
||||
Emitters(5)=SpriteEmitter'ScrnHTec.NitroMuzzleFlash.SpriteEmitter4'
|
||||
|
||||
Begin Object Class=SparkEmitter Name=SparkEmitter0
|
||||
LineSegmentsRange=(Min=0.000000,Max=0.000000)
|
||||
TimeBetweenSegmentsRange=(Min=0.150000,Max=0.150000)
|
||||
UseColorScale=True
|
||||
FadeOut=True
|
||||
RespawnDeadParticles=False
|
||||
AutomaticInitialSpawning=False
|
||||
ColorScale(0)=(Color=(B=150,G=150,R=150,A=32))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=150,G=150,R=150,A=32))
|
||||
Opacity=0.110000
|
||||
FadeOutStartTime=0.250000
|
||||
FadeInEndTime=0.250000
|
||||
MaxParticles=8
|
||||
StartLocationShape=PTLS_Sphere
|
||||
UseRotationFrom=PTRS_Actor
|
||||
StartSizeRange=(X=(Min=50.000000,Max=50.000000),Y=(Min=50.000000,Max=50.000000),Z=(Min=50.000000,Max=50.000000))
|
||||
Texture=Texture'Effects_Tex.BulletHits.sparkfinal2'
|
||||
LifetimeRange=(Min=0.500000,Max=0.500000)
|
||||
StartVelocityRange=(X=(Min=800.000000,Max=1500.000000),Y=(Min=-250.000000,Max=250.000000),Z=(Min=-250.000000,Max=250.000000))
|
||||
End Object
|
||||
Emitters(6)=SparkEmitter'ScrnHTec.NitroMuzzleFlash.SparkEmitter0'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter5
|
||||
UseColorScale=True
|
||||
RespawnDeadParticles=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
ColorScale(0)=(Color=(B=200,G=150,R=64,A=60))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=200,G=150,R=64,A=60))
|
||||
Opacity=0.200000
|
||||
FadeOutStartTime=0.100000
|
||||
MaxParticles=1
|
||||
StartSizeRange=(X=(Min=45.000000,Max=60.000000),Y=(Min=45.000000,Max=60.000000),Z=(Min=45.000000,Max=60.000000))
|
||||
Texture=Texture'Effects_Tex.Smoke.MuzzleCorona1stP'
|
||||
LifetimeRange=(Min=0.100000,Max=0.100000)
|
||||
End Object
|
||||
Emitters(7)=SpriteEmitter'ScrnHTec.NitroMuzzleFlash.SpriteEmitter5'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter6
|
||||
ProjectionNormal=(Y=1.000000,Z=0.000000)
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.300000
|
||||
FadeOutStartTime=2.760000
|
||||
FadeInEndTime=0.640000
|
||||
MaxParticles=60
|
||||
StartLocationRange=(X=(Min=-20.000000,Max=20.000000),Y=(Min=-20.000000,Max=20.000000),Z=(Min=-20.000000,Max=20.000000))
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinCCWorCW=(X=0.000000)
|
||||
SpinsPerSecondRange=(X=(Max=0.150000))
|
||||
StartSpinRange=(X=(Min=-1.000000,Max=1.000000))
|
||||
SizeScale(0)=(RelativeSize=2.200000)
|
||||
SizeScale(1)=(RelativeTime=0.500000,RelativeSize=3.200000)
|
||||
SizeScale(2)=(RelativeTime=1.000000,RelativeSize=4.000000)
|
||||
StartSizeRange=(X=(Min=1.000000,Max=20.000000),Y=(Min=1.000000,Max=20.000000),Z=(Min=1.000000,Max=20.000000))
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.explosions.DSmoke_2'
|
||||
TextureUSubdivisions=1
|
||||
TextureVSubdivisions=1
|
||||
StartVelocityRange=(X=(Min=15.000000,Max=130.000000),Y=(Min=-15.000000,Max=15.000000),Z=(Min=-15.000000,Max=15.000000))
|
||||
End Object
|
||||
Emitters(8)=SpriteEmitter'ScrnHTec.NitroMuzzleFlash.SpriteEmitter6'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter7
|
||||
ProjectionNormal=(Y=1.000000,Z=0.000000)
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
AutomaticInitialSpawning=False
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.300000
|
||||
FadeOutStartTime=0.300000
|
||||
FadeInEndTime=0.022500
|
||||
MaxParticles=20
|
||||
StartLocationRange=(X=(Min=-20.000000,Max=20.000000))
|
||||
UseRotationFrom=PTRS_Actor
|
||||
SpinCCWorCW=(X=0.000000)
|
||||
SpinsPerSecondRange=(X=(Max=0.300000))
|
||||
StartSpinRange=(X=(Min=-0.300000,Max=0.300000))
|
||||
SizeScale(0)=(RelativeSize=0.300000)
|
||||
SizeScale(1)=(RelativeTime=0.500000,RelativeSize=0.600000)
|
||||
SizeScale(2)=(RelativeTime=1.000000,RelativeSize=1.600000)
|
||||
StartSizeRange=(X=(Min=35.000000,Max=80.000000),Y=(Min=35.000000,Max=80.000000),Z=(Min=35.000000,Max=80.000000))
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.explosions.DSmoke_2'
|
||||
TextureUSubdivisions=1
|
||||
TextureVSubdivisions=1
|
||||
LifetimeRange=(Min=0.750000,Max=0.750000)
|
||||
StartVelocityRange=(X=(Min=150.000000,Max=550.000000))
|
||||
End Object
|
||||
Emitters(9)=SpriteEmitter'ScrnHTec.NitroMuzzleFlash.SpriteEmitter7'
|
||||
|
||||
}
|
||||
250
kf_sources/ScrnHTec/Classes/NitroProjectile.uc
Normal file
250
kf_sources/ScrnHTec/Classes/NitroProjectile.uc
Normal file
|
|
@ -0,0 +1,250 @@
|
|||
class NitroProjectile extends ShotgunBullet
|
||||
abstract;
|
||||
|
||||
var class<Emitter> Trail1Class, Trail2Class;
|
||||
var Emitter Trail1, Trail2;
|
||||
|
||||
|
||||
simulated function PostBeginPlay()
|
||||
{
|
||||
SetTimer(0.2, true);
|
||||
|
||||
Velocity = Speed * Vector(Rotation);
|
||||
|
||||
if ( Level.NetMode != NM_DedicatedServer )
|
||||
{
|
||||
if ( !PhysicsVolume.bWaterVolume )
|
||||
{
|
||||
Trail1 = Spawn(Trail1Class,self);
|
||||
Trail2 = Spawn(Trail2Class,self);
|
||||
}
|
||||
}
|
||||
|
||||
Velocity.z += TossZ;
|
||||
}
|
||||
|
||||
simulated function PostNetBeginPlay()
|
||||
{
|
||||
local PlayerController PC;
|
||||
|
||||
Super.PostNetBeginPlay();
|
||||
|
||||
if ( Level.NetMode == NM_DedicatedServer )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ( Level.bDropDetail || (Level.DetailMode == DM_Low) )
|
||||
{
|
||||
bDynamicLight = false;
|
||||
LightType = LT_None;
|
||||
}
|
||||
else
|
||||
{
|
||||
PC = Level.GetLocalPlayerController();
|
||||
if ( (Instigator != None) && (PC == Instigator.Controller) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ( (PC == None) || (PC.ViewTarget == None) || (VSize(PC.ViewTarget.Location - Location) > 3000) )
|
||||
{
|
||||
bDynamicLight = false;
|
||||
LightType = LT_None;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
simulated function Landed( vector HitNormal )
|
||||
{
|
||||
Explode(Location,HitNormal);
|
||||
if ( Level.DetailMode >= DM_High )
|
||||
Spawn(class'NitroGroundEffect',self,,Location);
|
||||
}
|
||||
|
||||
simulated function Explode(vector HitLocation,vector HitNormal)
|
||||
{
|
||||
if ( Role == ROLE_Authority )
|
||||
{
|
||||
HurtRadius(Damage, DamageRadius, MyDamageType, MomentumTransfer, HitLocation );
|
||||
}
|
||||
|
||||
PlaySound(ImpactSound, SLOT_Misc);
|
||||
|
||||
if ( KFHumanPawn(Instigator) != none && !Level.bDropDetail ) {
|
||||
if ( EffectIsRelevant(Location,false) ) {
|
||||
Spawn(ExplosionDecal,self,,Location, rotator(-HitNormal));
|
||||
if ( Level.DetailMode > DM_Low ) {
|
||||
Spawn(class'NitroSplash',self,,HitLocation,rotator(HitNormal));
|
||||
if ( Level.DetailMode >= DM_SuperHigh )
|
||||
Spawn(class'NitroImpact',self,,HitLocation,rotator(-HitNormal));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SetCollisionSize(0.0, 0.0);
|
||||
Destroy();
|
||||
}
|
||||
|
||||
// overrided to don't damage projectiles
|
||||
simulated function HurtRadius( float DamageAmount, float DamageRadius, class<DamageType> DamageType, float Momentum, vector HitLocation )
|
||||
{
|
||||
local actor Victims;
|
||||
local float damageScale, dist;
|
||||
local vector dir;
|
||||
|
||||
if ( bHurtEntry )
|
||||
return;
|
||||
|
||||
bHurtEntry = true;
|
||||
foreach VisibleCollidingActors( class 'Actor', Victims, DamageRadius, HitLocation )
|
||||
{
|
||||
// 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') && !Victims.IsA('Projectile') )
|
||||
{
|
||||
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;
|
||||
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.IsA('Projectile') )
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
simulated function Destroyed()
|
||||
{
|
||||
if ( Trail != none ) {
|
||||
Trail.mRegen=False;
|
||||
Trail.SetPhysics(PHYS_None);
|
||||
}
|
||||
|
||||
if ( Trail1 != none ) {
|
||||
Trail1.Kill();
|
||||
Trail1.SetPhysics(PHYS_None);
|
||||
}
|
||||
|
||||
if ( Trail2 != none ) {
|
||||
Trail2.Kill();
|
||||
Trail2.SetPhysics(PHYS_None);
|
||||
}
|
||||
|
||||
Super.Destroyed();
|
||||
}
|
||||
|
||||
simulated function ProcessTouch (Actor Other, vector HitLocation)
|
||||
{
|
||||
if ( Other == none || Other == Instigator || Other.Base == Instigator )
|
||||
return;
|
||||
|
||||
if ( Other != Instigator && !Other.IsA('PhysicsVolume') && !Other.IsA('Projectile')
|
||||
&& !Other.IsA('ROBulletWhipAttachment') )
|
||||
{
|
||||
// Don't allow hits on people on the same team
|
||||
// if( KFHumanPawn(Other) != none && Instigator != none
|
||||
// && KFHumanPawn(Other).GetTeamNum() == Instigator.GetTeamNum() )
|
||||
// return;
|
||||
if ( KFPawn(Other) != none && KFPawn(Other).BurnDown > 1 )
|
||||
KFPawn(Other).BurnDown /= 2;
|
||||
|
||||
Explode(self.Location,self.Location);
|
||||
}
|
||||
}
|
||||
|
||||
simulated singular function HitWall(vector HitNormal, actor Wall)
|
||||
{
|
||||
if ( Role == ROLE_Authority )
|
||||
{
|
||||
if ( !Wall.bStatic && !Wall.bWorldGeometry )
|
||||
{
|
||||
if ( Instigator == None || Instigator.Controller == None )
|
||||
{
|
||||
Wall.SetDelayedDamageInstigatorController( InstigatorController );
|
||||
}
|
||||
|
||||
Wall.TakeDamage( Damage, instigator, Location, MomentumTransfer * Normal(Velocity), MyDamageType);
|
||||
|
||||
if ( DamageRadius > 0 && Vehicle(Wall) != None && Vehicle(Wall).Health > 0 )
|
||||
{
|
||||
Vehicle(Wall).DriverRadiusDamage(Damage, DamageRadius, InstigatorController, MyDamageType, MomentumTransfer, Location);
|
||||
}
|
||||
|
||||
HurtWall = Wall;
|
||||
}
|
||||
|
||||
MakeNoise(1.0);
|
||||
}
|
||||
|
||||
Explode(Location + ExploWallOut * HitNormal, HitNormal);
|
||||
|
||||
HurtWall = None;
|
||||
}
|
||||
|
||||
// simulated function Timer()
|
||||
// {
|
||||
// if ( Trail2 != none )
|
||||
// Trail2.SetDrawScale(Trail2.DrawScale * 1.5);
|
||||
// }
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Trail1Class=Class'ScrnHTec.NitroTrail'
|
||||
Trail2Class=Class'ScrnHTec.NitroTrailB'
|
||||
MaxPenetrations=1
|
||||
PenDamageReduction=0.000000
|
||||
HeadShotDamageMult=1.000000
|
||||
Speed=750.000000
|
||||
MaxSpeed=750.000000
|
||||
TossZ=200.000000
|
||||
Damage=5.000000
|
||||
DamageRadius=120.000000
|
||||
MomentumTransfer=0.000000
|
||||
MyDamageType=Class'ScrnHTec.DamTypeFreezerNitro'
|
||||
ImpactSound=SoundGroup'KF_EnemiesFinalSnd.Bloat.Bloat_AcidSplash'
|
||||
ExplosionDecal=Class'ScrnHTec.NitroDecal'
|
||||
DrawType=DT_None
|
||||
StaticMesh=None
|
||||
Physics=PHYS_Falling
|
||||
LifeSpan=5.000000
|
||||
DrawScale=5.000000
|
||||
Style=STY_None
|
||||
bBlockHitPointTraces=False
|
||||
}
|
||||
6
kf_sources/ScrnHTec/Classes/NitroSplash.uc
Normal file
6
kf_sources/ScrnHTec/Classes/NitroSplash.uc
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
class NitroSplash extends AlienSmallHit;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Skins(0)=Texture'HTec_A.Nitro.NitroSplash'
|
||||
}
|
||||
57
kf_sources/ScrnHTec/Classes/NitroTrail.uc
Normal file
57
kf_sources/ScrnHTec/Classes/NitroTrail.uc
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
class NitroTrail extends FreezeParticlesBase;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter0
|
||||
UseColorScale=True
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UniformSize=True
|
||||
ColorScale(0)=(Color=(B=255,G=240,R=190,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=240,R=190,A=255))
|
||||
FadeOutStartTime=0.378000
|
||||
FadeInEndTime=0.014000
|
||||
MaxParticles=40
|
||||
SpinsPerSecondRange=(X=(Max=0.025000))
|
||||
StartSpinRange=(X=(Min=-0.200000,Max=0.200000))
|
||||
StartSizeRange=(X=(Min=3.000000,Max=32.000000),Y=(Min=3.000000,Max=32.000000),Z=(Min=3.000000,Max=32.000000))
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'kf_fx_trip_t.Misc.smoke_animated'
|
||||
TextureUSubdivisions=8
|
||||
TextureVSubdivisions=8
|
||||
LifetimeRange=(Min=1.000000,Max=1.400000)
|
||||
End Object
|
||||
Emitters(0)=SpriteEmitter'ScrnHTec.NitroTrail.SpriteEmitter0'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter1
|
||||
UseCollision=True
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
UniformSize=True
|
||||
Acceleration=(Z=-400.000000)
|
||||
DampingFactorRange=(X=(Min=0.250000,Max=0.250000),Y=(Min=0.250000,Max=0.250000),Z=(Min=0.250000,Max=0.250000))
|
||||
ColorScale(0)=(Color=(B=255,G=255,R=255,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=255,R=255,A=255))
|
||||
Opacity=0.330000
|
||||
FadeOutStartTime=1.080000
|
||||
FadeInEndTime=0.120000
|
||||
MaxParticles=40
|
||||
SpinsPerSecondRange=(X=(Min=0.400000,Max=1.000000),Y=(Min=0.500000,Max=1.000000),Z=(Min=0.500000,Max=1.000000))
|
||||
StartSpinRange=(X=(Max=1.000000),Y=(Max=1.000000),Z=(Max=1.000000))
|
||||
StartSizeRange=(X=(Min=0.500000,Max=1.400000),Y=(Min=0.500000,Max=1.400000),Z=(Min=0.500000,Max=1.400000))
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.BulletHits.snowfinal2'
|
||||
TextureUSubdivisions=2
|
||||
TextureVSubdivisions=2
|
||||
LifetimeRange=(Min=2.000000,Max=2.000000)
|
||||
StartVelocityRange=(X=(Min=-300.000000,Max=300.000000),Y=(Min=-300.000000,Max=300.000000),Z=(Min=-300.000000,Max=300.000000))
|
||||
VelocityLossRange=(Y=(Max=5.000000),Z=(Max=5.000000))
|
||||
End Object
|
||||
Emitters(1)=SpriteEmitter'ScrnHTec.NitroTrail.SpriteEmitter1'
|
||||
|
||||
Physics=PHYS_Trailer
|
||||
LifeSpan=2.900000
|
||||
}
|
||||
70
kf_sources/ScrnHTec/Classes/NitroTrailB.uc
Normal file
70
kf_sources/ScrnHTec/Classes/NitroTrailB.uc
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
class NitroTrailB extends FreezeParticlesBase;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter0
|
||||
UseColorScale=True
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
Acceleration=(Z=-30.000000)
|
||||
ExtentMultiplier=(X=0.000000,Y=0.000000,Z=0.100000)
|
||||
ColorScale(0)=(Color=(B=255,G=240,R=190,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=240,R=190,A=255))
|
||||
Opacity=0.330000
|
||||
FadeOutStartTime=1.353000
|
||||
FadeInEndTime=0.891000
|
||||
StartLocationOffset=(Z=-10.000000)
|
||||
SpinsPerSecondRange=(X=(Max=0.010000))
|
||||
StartSpinRange=(X=(Min=-0.200000,Max=0.300000))
|
||||
SizeScale(0)=(RelativeTime=0.750000,RelativeSize=0.750000)
|
||||
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=0.800000)
|
||||
StartSizeRange=(X=(Min=40.000000,Max=40.000000),Y=(Min=40.000000,Max=40.000000),Z=(Min=40.000000,Max=40.000000))
|
||||
InitialParticlesPerSecond=5.000000
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.explosions.DSmoke_2'
|
||||
LifetimeRange=(Min=3.300000,Max=3.300000)
|
||||
StartVelocityRange=(X=(Min=-5.000000,Max=5.000000),Y=(Min=-5.000000,Max=5.000000),Z=(Min=-10.000000,Max=-10.000000))
|
||||
StartVelocityRadialRange=(Min=-40.000000,Max=40.000000)
|
||||
End Object
|
||||
Emitters(0)=SpriteEmitter'ScrnHTec.NitroTrailB.SpriteEmitter0'
|
||||
|
||||
Begin Object Class=SpriteEmitter Name=SpriteEmitter1
|
||||
UseColorScale=True
|
||||
FadeOut=True
|
||||
FadeIn=True
|
||||
RespawnDeadParticles=False
|
||||
SpinParticles=True
|
||||
UseSizeScale=True
|
||||
UseRegularSizeScale=False
|
||||
UniformSize=True
|
||||
ExtentMultiplier=(X=0.000000,Y=0.000000,Z=0.100000)
|
||||
ColorScale(0)=(Color=(B=255,G=240,R=190,A=255))
|
||||
ColorScale(1)=(RelativeTime=1.000000,Color=(B=255,G=240,R=190,A=255))
|
||||
Opacity=0.330000
|
||||
FadeOutStartTime=0.940000
|
||||
FadeInEndTime=0.300000
|
||||
MaxParticles=13
|
||||
StartLocationOffset=(Z=-20.000000)
|
||||
StartLocationRange=(X=(Min=-20.000000,Max=20.000000),Y=(Min=-20.000000,Max=20.000000))
|
||||
SpinsPerSecondRange=(X=(Max=0.010000))
|
||||
StartSpinRange=(X=(Min=-0.200000,Max=0.300000))
|
||||
SizeScale(0)=(RelativeTime=0.500000,RelativeSize=0.750000)
|
||||
SizeScale(1)=(RelativeTime=1.000000,RelativeSize=0.350000)
|
||||
StartSizeRange=(X=(Min=45.000000,Max=45.000000),Y=(Min=45.000000,Max=45.000000),Z=(Min=45.000000,Max=45.000000))
|
||||
InitialParticlesPerSecond=6.500000
|
||||
DrawStyle=PTDS_AlphaBlend
|
||||
Texture=Texture'Effects_Tex.explosions.DSmoke_2'
|
||||
LifetimeRange=(Min=2.000000,Max=2.000000)
|
||||
StartVelocityRange=(X=(Min=-50.000000,Max=50.000000),Y=(Min=-50.000000,Max=50.000000),Z=(Min=-60.000000,Max=-60.000000))
|
||||
StartVelocityRadialRange=(Min=-40.000000,Max=40.000000)
|
||||
End Object
|
||||
Emitters(1)=SpriteEmitter'ScrnHTec.NitroTrailB.SpriteEmitter1'
|
||||
|
||||
Physics=PHYS_Trailer
|
||||
LifeSpan=2.900000
|
||||
}
|
||||
171
kf_sources/ScrnHTec/Classes/ScrnVetHTec.uc
Normal file
171
kf_sources/ScrnHTec/Classes/ScrnVetHTec.uc
Normal file
|
|
@ -0,0 +1,171 @@
|
|||
class ScrnVetHTec extends ScrnVeterancyTypes
|
||||
abstract;
|
||||
|
||||
static function int GetStatValueInt(ClientPerkRepLink StatOther, byte ReqNum)
|
||||
{
|
||||
return StatOther.GetCustomValueInt(Class'HTecProg');
|
||||
}
|
||||
|
||||
static function AddCustomStats( ClientPerkRepLink Other )
|
||||
{
|
||||
super.AddCustomStats(Other); //init achievements
|
||||
Other.AddCustomValue(Class'HTecProg');
|
||||
}
|
||||
|
||||
static function float GetWeaponMovementSpeedBonus(KFPlayerReplicationInfo KFPRI, Weapon Weap)
|
||||
{
|
||||
local ScrnHumanPawn p;
|
||||
|
||||
// doesn't work on client side, unless pawn is locally controlled
|
||||
if ( Controller(KFPRI.Owner) != none )
|
||||
p = ScrnHumanPawn(Controller(KFPRI.Owner).Pawn);
|
||||
if ( p != none )
|
||||
return fmax(0.0, p.GetCurrentVestClass().default.SpeedModifier);
|
||||
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
static function float GetMagCapacityModStatic(KFPlayerReplicationInfo KFPRI, class<KFWeapon> Other)
|
||||
{
|
||||
if ( ClassIsChildOf(Other, class'HTecZEDGun') || ClassIsChildOf(Other, class'HTecZEDMKII')
|
||||
|| ClassIsChildOf(Other, class'CryoThrower')
|
||||
|| ClassIsInArray(default.PerkedWeapons, Other) //v3 - custom weapon support
|
||||
)
|
||||
{
|
||||
return 1.2001 + 0.025 * GetClientVeteranSkillLevel(KFPRI);
|
||||
}
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
static function float GetAmmoPickupMod(KFPlayerReplicationInfo KFPRI, KFAmmunition Other)
|
||||
{
|
||||
return AddExtraAmmoFor(KFPRI, Other.class);
|
||||
}
|
||||
|
||||
static function float AddExtraAmmoFor(KFPlayerReplicationInfo KFPRI, Class<Ammunition> AmmoType)
|
||||
{
|
||||
if ( AmmoType == class'FragAmmo' )
|
||||
return 1.0 + 0.20 * GetClientVeteranSkillLevel(KFPRI)/2; // 1 extra nade per 2 levels
|
||||
else if ( ClassIsChildOf(AmmoType, class'KVoltAmmo')
|
||||
|| ClassIsChildOf(AmmoType, class'CryoThrowerAmmo')
|
||||
|| ClassIsChildOf(AmmoType, class'FreezerAmmo')
|
||||
|| ClassIsChildOf(AmmoType, class'FreezerDartAmmo')
|
||||
|| ClassIsChildOf(AmmoType, class'ZEDGunAmmo')
|
||||
|| ClassIsChildOf(AmmoType, class'ZEDMKIIAmmo' )
|
||||
|| ClassIsInArray(default.PerkedAmmo, AmmoType) //v3 - custom weapon support
|
||||
)
|
||||
return 1.0 + 0.05 * GetClientVeteranSkillLevel(KFPRI);
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
static function int AddDamage(KFPlayerReplicationInfo KFPRI, KFMonster Injured, KFPawn DamageTaker, int InDamage, class<DamageType> DmgType)
|
||||
{
|
||||
if ( DmgType == default.DefaultDamageTypeNoBonus )
|
||||
return InDamage;
|
||||
|
||||
if ( ClassIsChildOf(DmgType, class'DamTypeFreezerBase')
|
||||
|| ClassIsChildOf(DmgType, class'DamTypeZEDGun')
|
||||
|| ClassIsChildOf(DmgType, class'DamTypeZEDGunMKII') )
|
||||
{
|
||||
// 30% base bonus + 5% per level
|
||||
InDamage *= 1.30 + 0.05 * GetClientVeteranSkillLevel(KFPRI);
|
||||
}
|
||||
|
||||
return InDamage;
|
||||
}
|
||||
|
||||
static function int ReduceDamage(KFPlayerReplicationInfo KFPRI, KFPawn Injured, Pawn Instigator, int InDamage, class<DamageType> DmgType)
|
||||
{
|
||||
if ( InDamage == 0 )
|
||||
return 0;
|
||||
|
||||
if ( Instigator == Injured && ClassIsChildOf(DmgType, class'DamTypeFreezerBase') )
|
||||
return 0; // can't freeze himself
|
||||
|
||||
if ( (DmgType == class'DamTypeVomit' || DmgType == class'SirenScreamDamage')
|
||||
&& Injured != none && Injured.ShieldStrength > 100 )
|
||||
InDamage *= 0.4;
|
||||
|
||||
return max(1, InDamage); // at least 1 damage must be done
|
||||
}
|
||||
|
||||
static function class<Grenade> GetNadeType(KFPlayerReplicationInfo KFPRI)
|
||||
{
|
||||
return class'CryoNade';
|
||||
}
|
||||
|
||||
static function bool CanCookNade(KFPlayerReplicationInfo KFPRI, Weapon Weap)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static function float GetCostScaling(KFPlayerReplicationInfo KFPRI, class<Pickup> Item)
|
||||
{
|
||||
// couldn't find any good place to put it...
|
||||
class'ScrnHorzineVestPickup'.default.CorrespondingPerkIndex = default.PerkIndex;
|
||||
|
||||
if ( Item == class'FrozenDosh' ) {
|
||||
return 3.0;
|
||||
}
|
||||
else if ( ClassIsChildOf(Item, class'ZEDGunPickup') || ClassIsChildOf(Item, class'ZEDMKIIPickup')
|
||||
|| ClassIsChildOf(Item, class'KVoltPickup') || ClassIsChildOf(Item, class'CryoThrowerPickup')
|
||||
|| ClassIsChildOf(Item, class'FreezerPickup')
|
||||
|| ClassIsChildOf(Item, class'ScrnHorzineVestPickup')
|
||||
|| ClassIsInArray(default.PerkedPickups, Item) )
|
||||
{
|
||||
// 30% base discount + 5% extra per level
|
||||
return fmax(0.10, 0.70 - 0.05 * GetClientVeteranSkillLevel(KFPRI));
|
||||
}
|
||||
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
static function float GetAmmoCostScaling(KFPlayerReplicationInfo KFPRI, class<Pickup> Item)
|
||||
{
|
||||
if ( ClassIsChildOf(Item, class'FragPickup') )
|
||||
return 1.5; // more expensive cryo nades
|
||||
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
static function string GetCustomLevelInfo( byte Level )
|
||||
{
|
||||
local string S;
|
||||
|
||||
S = Default.CustomLevelInfo;
|
||||
ReplaceText(S,"%L",string(Level));
|
||||
ReplaceText(S,"%x",GetPercentStr(0.30 + 0.05*Level));
|
||||
ReplaceText(S,"%m",GetPercentStr(0.20 + 0.025*Level));
|
||||
ReplaceText(S,"%a",GetPercentStr(0.05*Level));
|
||||
ReplaceText(S,"%g",string(Level/2));
|
||||
ReplaceText(S,"%$",GetPercentStr(fmin(0.90, 0.30 + 0.05*Level)));
|
||||
return S;
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
progressArray0(0)=30
|
||||
progressArray0(1)=75
|
||||
progressArray0(2)=300
|
||||
progressArray0(3)=1500
|
||||
progressArray0(4)=4500
|
||||
progressArray0(5)=10500
|
||||
progressArray0(6)=16500
|
||||
DefaultDamageType=Class'ScrnHTec.DamTypeFreezerDart'
|
||||
DefaultDamageTypeNoBonus=Class'ScrnHTec.DamTypeFreezerNoDmgBonus'
|
||||
OnHUDIcons(0)=(PerkIcon=Texture'ScrnTex.Perks.HTec_Gray',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Gray',DrawColor=(B=255,G=255,R=255,A=255))
|
||||
OnHUDIcons(1)=(PerkIcon=Texture'ScrnTex.Perks.HTec_Gold',StarIcon=Texture'KillingFloor2HUD.Perk_Icons.Hud_Perk_Star_Gold',DrawColor=(B=255,G=255,R=255,A=255))
|
||||
OnHUDIcons(2)=(PerkIcon=Texture'ScrnTex.Perks.HTec_Green',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Green',DrawColor=(B=255,G=255,R=255,A=255))
|
||||
OnHUDIcons(3)=(PerkIcon=Texture'ScrnTex.Perks.HTec_Blue',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Blue',DrawColor=(B=255,G=255,R=255,A=255))
|
||||
OnHUDIcons(4)=(PerkIcon=Texture'ScrnTex.Perks.HTec_Purple',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Purple',DrawColor=(B=255,G=255,R=255,A=255))
|
||||
OnHUDIcons(5)=(PerkIcon=Texture'ScrnTex.Perks.HTec_Orange',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Orange',DrawColor=(B=255,G=255,R=255,A=255))
|
||||
OnHUDIcons(6)=(PerkIcon=Texture'ScrnTex.Perks.HTec_Blood',StarIcon=Texture'ScrnTex.Perks.Hud_Perk_Star_Blood',DrawColor=(B=255,G=255,R=255,A=255))
|
||||
SamePerkAch="OP_HTec"
|
||||
SkillInfo="PERK SKILLS (HTec v4.00):|Cryo Grenades|Higher frozen dosh value|Armor does not slow you down|60% less damage from Bloat Bile and Siren Scream while Armor > 100"
|
||||
CustomLevelInfo="PERK BONUSES (LEVEL %L):|%x more damage with ZED/Cryo Guns|%x faster freezing|%m larger ZED Gun clips|%a more ZED/Cryo Ammo|+%g extra Cryo grenades|%$ discount on HTec Inventory"
|
||||
PerkIndex=11
|
||||
OnHUDIcon=Texture'ScrnTex.Perks.HTec'
|
||||
OnHUDGoldIcon=Texture'ScrnTex.Perks.HTec_Gold'
|
||||
VeterancyName="Horzine Technician"
|
||||
Requirements(0)="Freeze or zap %x ZEDs"
|
||||
}
|
||||
65
kf_sources/ScrnHTec/Classes/SirenDart.uc
Normal file
65
kf_sources/ScrnHTec/Classes/SirenDart.uc
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
class SirenDart extends IceDart;
|
||||
|
||||
simulated function PostBeginPlay()
|
||||
{
|
||||
super.PostBeginPlay();
|
||||
|
||||
SetDrawScale(DrawScale * (0.5 + 3.0 * frand()));
|
||||
}
|
||||
|
||||
|
||||
simulated function ProcessTouch (Actor Other, vector HitLocation)
|
||||
{
|
||||
local vector X;
|
||||
local Vector TempHitLocation, HitNormal;
|
||||
local array<int> HitPoints;
|
||||
// local KFPawn HitPawn;
|
||||
|
||||
if ( Other == none || Other == Instigator || Other.Base == Instigator || !Other.bBlockHitPointTraces )
|
||||
return;
|
||||
|
||||
X = Vector(Rotation);
|
||||
|
||||
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;
|
||||
|
||||
// do not call to ProcessLocationalDamage() because it significantly lowers amout of damage we're dealing
|
||||
Other.TakeDamage(Damage, Instigator, HitLocation, MomentumTransfer * Normal(Velocity), MyDamageType);
|
||||
|
||||
// HitPawn = KFPawn(Other);
|
||||
// if ( HitPawn != none && !HitPawn.bDeleteMe)
|
||||
// HitPawn.ProcessLocationalDamage(Damage, Instigator, TempHitLocation, MomentumTransfer * Normal(Velocity), MyDamageType,HitPoints);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Pawn(Other) != none && Pawn(Other).IsHeadShot(HitLocation, X, 1.0))
|
||||
{
|
||||
Pawn(Other).TakeDamage(Damage * HeadShotDamageMult, Instigator, HitLocation, MomentumTransfer * Normal(Velocity), MyDamageType);
|
||||
}
|
||||
else
|
||||
{
|
||||
Other.TakeDamage(Damage, Instigator, HitLocation, MomentumTransfer * Normal(Velocity), MyDamageType);
|
||||
}
|
||||
}
|
||||
|
||||
if ( ImpactEffect != None && (Level.NetMode != NM_DedicatedServer) && !Level.bDropDetail && Level.DetailMode > DM_Low )
|
||||
Spawn(ImpactEffect,,, Location, rotator(-HitNormal));
|
||||
|
||||
// no penetration
|
||||
Destroy();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Speed=1000.000000
|
||||
MaxSpeed=3000.000000
|
||||
Damage=8.000000
|
||||
MyDamageType=Class'ScrnHTec.DamTypeSirenDart'
|
||||
}
|
||||
214
kf_sources/ScrnHTec/Classes/ZombieSirenCryo.uc
Normal file
214
kf_sources/ScrnHTec/Classes/ZombieSirenCryo.uc
Normal file
|
|
@ -0,0 +1,214 @@
|
|||
// Siren that is capable of shattering frozen zeds
|
||||
// @author PooSH, 2015
|
||||
class ZombieSirenCryo extends ZombieSiren
|
||||
abstract;
|
||||
|
||||
var transient float LastScreamTime; // prevent scream canceling
|
||||
var transient float NextFrozenCheckTime; // next time we'll need to check for frozen zeds
|
||||
var FreezeRules FreezeRules; // this is set in FreezeRules.PostBeginPlay()
|
||||
|
||||
var class<Projectile> ShatterProjClass;
|
||||
|
||||
function TakeDamage(int Damage, Pawn InstigatedBy, Vector HitLocation, Vector Momentum, class<DamageType> DamType, optional int HitIndex)
|
||||
{
|
||||
if (InstigatedBy == none || class<KFWeaponDamageType>(DamType) == none)
|
||||
Super(Monster).TakeDamage(Damage, instigatedBy, hitLocation, momentum, DamType); // skip NONE-reference error -- PooSH
|
||||
else
|
||||
Super(KFMonster).TakeDamage(Damage, instigatedBy, hitLocation, momentum, DamType);
|
||||
}
|
||||
|
||||
|
||||
// should Siren scream to shatter zeds between her and A
|
||||
function bool ShouldDoShatterScream(Actor A)
|
||||
{
|
||||
local int i, FrozenCount, CanShatterCount;
|
||||
local float ScreamRadiusSqr;
|
||||
|
||||
if ( FreezeRules == none || Level.TimeSeconds < NextFrozenCheckTime )
|
||||
return false; // already checked
|
||||
|
||||
NextFrozenCheckTime = Level.TimeSeconds + 2.0;
|
||||
if ( FreezeRules.Frozen.Length == 0 )
|
||||
return false;
|
||||
|
||||
NextFrozenCheckTime = Level.TimeSeconds + 5;
|
||||
ScreamRadiusSqr = ScreamRadius * ScreamRadius;
|
||||
for ( i = 0; i < FreezeRules.Frozen.Length; ++i ) {
|
||||
if ( FreezeRules.Frozen[i].M != none && FreezeRules.Frozen[i].bFrozen ) {
|
||||
++FrozenCount;
|
||||
if ( VSizeSquared(FreezeRules.Frozen[i].M.Location - Location) < ScreamRadiusSqr) {
|
||||
++CanShatterCount;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( CanShatterCount > 0 && CanShatterCount > 5.0 * frand() ) {
|
||||
NextFrozenCheckTime = Level.TimeSeconds + 5; // give cool down before next shattering
|
||||
return true;
|
||||
}
|
||||
|
||||
if ( CanShatterCount > 0 )
|
||||
NextFrozenCheckTime = Level.TimeSeconds + 0.5;
|
||||
else if ( FrozenCount > 0 )
|
||||
NextFrozenCheckTime = Level.TimeSeconds + 1;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function RangedAttack(Actor A)
|
||||
{
|
||||
local int LastFireTime;
|
||||
local float Dist;
|
||||
|
||||
if ( bShotAnim )
|
||||
return;
|
||||
|
||||
Dist = VSize(A.Location - Location);
|
||||
|
||||
if ( Physics == PHYS_Swimming )
|
||||
{
|
||||
SetAnimAction('Claw');
|
||||
bShotAnim = true;
|
||||
LastFireTime = Level.TimeSeconds;
|
||||
}
|
||||
else if ( Dist < MeleeRange + CollisionRadius + A.CollisionRadius
|
||||
&& (bDecapitated || bZapped || Level.TimeSeconds - LastScreamTime < 7) )
|
||||
{
|
||||
bShotAnim = true;
|
||||
LastFireTime = Level.TimeSeconds;
|
||||
SetAnimAction('Claw');
|
||||
//PlaySound(sound'Claw2s', SLOT_Interact); KFTODO: Replace this
|
||||
Controller.bPreparingMove = true;
|
||||
Acceleration = vect(0,0,0);
|
||||
}
|
||||
else if( Dist <= ScreamRadius && !bDecapitated && !bZapped
|
||||
|| (Level.TimeSeconds > NextFrozenCheckTime && ShouldDoShatterScream(A)) )
|
||||
{
|
||||
LastScreamTime = Level.TimeSeconds;
|
||||
bShotAnim=true;
|
||||
SetAnimAction('Siren_Scream');
|
||||
// Only stop moving if we are close
|
||||
if( Dist < ScreamRadius * 0.25 )
|
||||
{
|
||||
Controller.bPreparingMove = true;
|
||||
Acceleration = vect(0,0,0);
|
||||
}
|
||||
else
|
||||
{
|
||||
Acceleration = AccelRate * Normal(A.Location - Location);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// overridden to shatter zeds
|
||||
// fixed instigator in calling TakeDamage()
|
||||
simulated function HurtRadius( float DamageAmount, float DamageRadius, class<DamageType> DamageType, float Momentum, vector HitLocation )
|
||||
{
|
||||
local actor Victims;
|
||||
local KFMonster M;
|
||||
local float damageScale, dist;
|
||||
local vector dir;
|
||||
local float UsedDamageAmount;
|
||||
|
||||
|
||||
if( bHurtEntry )
|
||||
return;
|
||||
|
||||
bHurtEntry = true;
|
||||
foreach VisibleCollidingActors( class 'Actor', Victims, DamageRadius, HitLocation )
|
||||
{
|
||||
// don't let blast damage affect fluid - VisibleCollisingActors doesn't really work for them - jag
|
||||
// Or Karma actors in this case. Self inflicted Death due to flying chairs is uncool for a zombie of your stature.
|
||||
if( (Victims != self) && !Victims.IsA('FluidSurfaceInfo') && !Victims.IsA('ExtendedZCollision') )
|
||||
{
|
||||
Momentum = ScreamForce; // bugfix, when pull wasn't applied always -- PooSH
|
||||
dir = Victims.Location - HitLocation;
|
||||
dist = FMax(1,VSize(dir));
|
||||
dir = dir/dist;
|
||||
|
||||
M = KFMonster(Victims);
|
||||
if ( M != none ) {
|
||||
UsedDamageAmount = 1; // just a little bit to pass it in NetDamage()
|
||||
damageScale = 1;
|
||||
|
||||
if ( FreezeRules != none && FreezeRules.IsFrozen(M) ) {
|
||||
ShatterFrozenZed(M, HitLocation, dist);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else {
|
||||
damageScale = 1 - FMax(0,(dist - Victims.CollisionRadius)/DamageRadius);
|
||||
if (!Victims.IsA('KFHumanPawn')) // If it aint human, don't pull the vortex crap on it.
|
||||
Momentum = 0;
|
||||
|
||||
if (Victims.IsA('KFGlassMover'))
|
||||
UsedDamageAmount = 100000; // Siren always shatters glass
|
||||
else
|
||||
UsedDamageAmount = DamageAmount;
|
||||
}
|
||||
|
||||
Victims.TakeDamage(damageScale * UsedDamageAmount, self, Victims.Location - 0.5 * (Victims.CollisionHeight + Victims.CollisionRadius) * dir,(damageScale * Momentum * dir),DamageType);
|
||||
|
||||
if ( Vehicle(Victims) != None && Vehicle(Victims).Health > 0)
|
||||
Vehicle(Victims).DriverRadiusDamage(UsedDamageAmount, DamageRadius, Controller, DamageType, Momentum, HitLocation);
|
||||
}
|
||||
}
|
||||
bHurtEntry = false;
|
||||
}
|
||||
|
||||
// turns frozen monster into deadly ice shards
|
||||
function ShatterFrozenZed(KFMonster M, Vector HitLocation, float Distance)
|
||||
{
|
||||
local vector ProjLoc;
|
||||
local float ColH, ColR;
|
||||
local float DmgMult;
|
||||
local int Count;
|
||||
local Projectile proj;
|
||||
local float DistancePct;
|
||||
|
||||
// save zed's data, because he'll be dead after shattering
|
||||
HitLocation = M.Location; // calculate shard offset from the center of zed, not where it got hit
|
||||
ColH = M.CollisionHeight;
|
||||
ColR = M.CollisionRadius;
|
||||
Count = M.Health / 50;
|
||||
|
||||
if ( !FreezeRules.ShatterZed(M, -1, Controller, ScreamDamageType) )
|
||||
return; // unable to shatter zed
|
||||
|
||||
DistancePct = Distance/ScreamRadius;
|
||||
|
||||
if ( M != none )
|
||||
M.SetCollision(false);
|
||||
|
||||
DmgMult = DifficultyDamageModifer();
|
||||
if ( Count > 20 ) {
|
||||
DmgMult += float(Count-20) / 20.0;
|
||||
Count = 20;
|
||||
}
|
||||
|
||||
ProjLoc = HitLocation; // first projectile always spawn in the center to fly a straight line
|
||||
while ( Count > 0 ) {
|
||||
--Count;
|
||||
|
||||
proj = Spawn(ShatterProjClass, self, '', ProjLoc, rotator(ProjLoc - Location));
|
||||
if ( proj != none ) {
|
||||
proj.Instigator = self;
|
||||
proj.Damage *= DmgMult;
|
||||
// if ( DistancePct > 0.5 ) {
|
||||
// proj.Damage *= 1.5 - DistancePct;
|
||||
// }
|
||||
}
|
||||
// pickup random location inside collision cylinder for the next projectile
|
||||
ProjLoc = HitLocation;
|
||||
ProjLoc.X += ColR * (0.70 - 1.4 * frand());
|
||||
ProjLoc.Y += ColR * (0.70 - 1.4 * frand());
|
||||
ProjLoc.Z += ColH * (0.50 - 1.0 * frand());
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ShatterProjClass=Class'ScrnHTec.SirenDart'
|
||||
ScreamDamage=6
|
||||
MenuName="Cryo Siren"
|
||||
}
|
||||
25
kf_sources/ScrnHTec/Classes/ZombieSirenCryo_CIRCUS.uc
Normal file
25
kf_sources/ScrnHTec/Classes/ZombieSirenCryo_CIRCUS.uc
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class ZombieSirenCryo_CIRCUS extends ZombieSirenCryo;
|
||||
|
||||
#exec OBJ LOAD FILE=KF_EnemiesFinalSnd_CIRCUS.uax
|
||||
|
||||
static simulated function PreCacheMaterials(LevelInfo myLevel)
|
||||
{//should be derived and used.
|
||||
myLevel.AddPrecacheMaterial(FinalBlend'KF_Specimens_Trip_T.siren_hair_fb');
|
||||
myLevel.AddPrecacheMaterial(Combiner'KF_Specimens_Trip_CIRCUS_T.Siren_Circus.siren_CIRCUS_CMB');
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MoanVoice=SoundGroup'KF_EnemiesFinalSnd_CIRCUS.siren.Siren_Talk'
|
||||
JumpSound=SoundGroup'KF_EnemiesFinalSnd_CIRCUS.siren.Siren_Jump'
|
||||
DetachedHeadClass=Class'KFChar.SeveredHeadSiren_CIRCUS'
|
||||
HitSound(0)=SoundGroup'KF_EnemiesFinalSnd_CIRCUS.siren.Siren_Pain'
|
||||
DeathSound(0)=SoundGroup'KF_EnemiesFinalSnd_CIRCUS.siren.Siren_Death'
|
||||
AmbientSound=Sound'KF_BaseSiren_CIRCUS.Siren_IdleLoop'
|
||||
Mesh=SkeletalMesh'KF_Freaks_Trip_CIRCUS.Siren_Circus'
|
||||
Skins(0)=FinalBlend'KF_Specimens_Trip_T.siren_hair_fb'
|
||||
Skins(1)=Combiner'KF_Specimens_Trip_CIRCUS_T.Siren_Circus.siren_CIRCUS_CMB'
|
||||
}
|
||||
20
kf_sources/ScrnHTec/Classes/ZombieSirenCryo_HALLOWEEN.uc
Normal file
20
kf_sources/ScrnHTec/Classes/ZombieSirenCryo_HALLOWEEN.uc
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class ZombieSirenCryo_HALLOWEEN extends ZombieSirenCryo;
|
||||
|
||||
#exec OBJ LOAD FILE=KF_EnemiesFinalSnd_HALLOWEEN.uax
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MoanVoice=SoundGroup'KF_EnemiesFinalSnd_HALLOWEEN.siren.Siren_Talk'
|
||||
JumpSound=SoundGroup'KF_EnemiesFinalSnd_HALLOWEEN.siren.Siren_Jump'
|
||||
DetachedLegClass=Class'KFChar.SeveredLegSiren_HALLOWEEN'
|
||||
DetachedHeadClass=Class'KFChar.SeveredHeadSiren_HALLOWEEN'
|
||||
HitSound(0)=SoundGroup'KF_EnemiesFinalSnd_HALLOWEEN.siren.Siren_Pain'
|
||||
DeathSound(0)=SoundGroup'KF_EnemiesFinalSnd_HALLOWEEN.siren.Siren_Death'
|
||||
AmbientSound=Sound'KF_BaseSiren_HALLOWEEN.Siren_IdleLoop'
|
||||
Mesh=SkeletalMesh'KF_Freaks_Trip_HALLOWEEN.Siren_Halloween'
|
||||
Skins(0)=Combiner'KF_Specimens_Trip_HALLOWEEN_T.siren.Siren_RedneckZombie_CMB'
|
||||
Skins(1)=FinalBlend'KF_Specimens_Trip_HALLOWEEN_T.siren.Siren_RedneckZombie_Hair_FB'
|
||||
}
|
||||
15
kf_sources/ScrnHTec/Classes/ZombieSirenCryo_STANDARD.uc
Normal file
15
kf_sources/ScrnHTec/Classes/ZombieSirenCryo_STANDARD.uc
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
class ZombieSirenCryo_STANDARD extends ZombieSirenCryo;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MoanVoice=SoundGroup'KF_EnemiesFinalSnd.siren.Siren_Talk'
|
||||
JumpSound=SoundGroup'KF_EnemiesFinalSnd.siren.Siren_Jump'
|
||||
DetachedLegClass=Class'KFChar.SeveredLegSiren'
|
||||
DetachedHeadClass=Class'KFChar.SeveredHeadSiren'
|
||||
HitSound(0)=SoundGroup'KF_EnemiesFinalSnd.siren.Siren_Pain'
|
||||
DeathSound(0)=SoundGroup'KF_EnemiesFinalSnd.siren.Siren_Death'
|
||||
AmbientSound=Sound'KF_BaseSiren.Siren_IdleLoop'
|
||||
Mesh=SkeletalMesh'KF_Freaks_Trip.Siren_Freak'
|
||||
Skins(0)=FinalBlend'KF_Specimens_Trip_T.siren_hair_fb'
|
||||
Skins(1)=Combiner'KF_Specimens_Trip_T.siren_cmb'
|
||||
}
|
||||
26
kf_sources/ScrnHTec/Classes/ZombieSirenCryo_XMas.uc
Normal file
26
kf_sources/ScrnHTec/Classes/ZombieSirenCryo_XMas.uc
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
//-----------------------------------------------------------
|
||||
//
|
||||
//-----------------------------------------------------------
|
||||
class ZombieSirenCryo_XMas extends ZombieSirenCryo;
|
||||
|
||||
#exec OBJ LOAD FILE=KF_EnemiesFinalSnd_Xmas.uax
|
||||
|
||||
static simulated function PreCacheMaterials(LevelInfo myLevel)
|
||||
{//should be derived and used.
|
||||
myLevel.AddPrecacheMaterial(Combiner'KF_Specimens_Trip_XMAS_T.caroler_cmb');
|
||||
myLevel.AddPrecacheMaterial(Combiner'KF_Specimens_Trip_XMAS_T.caroler_env_cmb');
|
||||
myLevel.AddPrecacheMaterial(Texture'KF_Specimens_Trip_XMAS_T.caroler_diffuse');
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MoanVoice=SoundGroup'KF_EnemiesFinalSnd.siren.Siren_Talk'
|
||||
JumpSound=SoundGroup'KF_EnemiesFinalSnd_Xmas.siren.Siren_Jump'
|
||||
DetachedHeadClass=Class'KFChar.SeveredHeadSiren_XMas'
|
||||
HitSound(0)=SoundGroup'KF_EnemiesFinalSnd_Xmas.siren.Siren_Pain'
|
||||
DeathSound(0)=SoundGroup'KF_EnemiesFinalSnd_Xmas.siren.Siren_Death'
|
||||
AmbientSound=Sound'KF_BaseSiren.Siren_IdleLoop'
|
||||
Mesh=SkeletalMesh'KF_Freaks_Trip_Xmas.Caroler'
|
||||
Skins(0)=FinalBlend'KF_Specimens_Trip_T.siren_hair_fb'
|
||||
Skins(1)=Shader'KF_Specimens_Trip_XMAS_T.Caroler.caroler_shdr'
|
||||
}
|
||||
89
kf_sources/ScrnHTec/Classes/index.html
Normal file
89
kf_sources/ScrnHTec/Classes/index.html
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
<html>
|
||||
<head><title>Index of /kf_sources/ScrnHTec/Classes/</title></head>
|
||||
<body>
|
||||
<h1>Index of /kf_sources/ScrnHTec/Classes/</h1><hr><pre><a href="../">../</a>
|
||||
<a href="CryoNade.uc">CryoNade.uc</a> 01-Jul-2020 18:12 5800
|
||||
<a href="CryoNadeCloud.uc">CryoNadeCloud.uc</a> 01-Jul-2020 18:12 2185
|
||||
<a href="CryoThrower.uc">CryoThrower.uc</a> 01-Jul-2020 18:12 4743
|
||||
<a href="CryoThrowerAltFire.uc">CryoThrowerAltFire.uc</a> 01-Jul-2020 18:12 4061
|
||||
<a href="CryoThrowerAltProjectile.uc">CryoThrowerAltProjectile.uc</a> 01-Jul-2020 18:12 192
|
||||
<a href="CryoThrowerAmmo.uc">CryoThrowerAmmo.uc</a> 01-Jul-2020 18:12 375
|
||||
<a href="CryoThrowerAmmoPickup.uc">CryoThrowerAmmoPickup.uc</a> 01-Jul-2020 18:12 256
|
||||
<a href="CryoThrowerAttachment.uc">CryoThrowerAttachment.uc</a> 01-Jul-2020 18:12 3121
|
||||
<a href="CryoThrowerFire.uc">CryoThrowerFire.uc</a> 01-Jul-2020 18:12 462
|
||||
<a href="CryoThrowerPickup.uc">CryoThrowerPickup.uc</a> 01-Jul-2020 18:12 839
|
||||
<a href="CryoThrowerProjectile.uc">CryoThrowerProjectile.uc</a> 01-Jul-2020 18:12 209
|
||||
<a href="DamTypeCryoNade.uc">DamTypeCryoNade.uc</a> 01-Jul-2020 18:12 175
|
||||
<a href="DamTypeCryoThrower.uc">DamTypeCryoThrower.uc</a> 01-Jul-2020 18:12 223
|
||||
<a href="DamTypeFreezerBase.uc">DamTypeFreezerBase.uc</a> 01-Jul-2020 18:12 1625
|
||||
<a href="DamTypeFreezerDart.uc">DamTypeFreezerDart.uc</a> 01-Jul-2020 18:12 201
|
||||
<a href="DamTypeFreezerNitro.uc">DamTypeFreezerNitro.uc</a> 01-Jul-2020 18:12 178
|
||||
<a href="DamTypeFreezerNoDmgBonus.uc">DamTypeFreezerNoDmgBonus.uc</a> 01-Jul-2020 18:12 171
|
||||
<a href="DamTypeHTecZEDGun.uc">DamTypeHTecZEDGun.uc</a> 01-Jul-2020 18:12 962
|
||||
<a href="DamTypeHTecZEDGunMKII.uc">DamTypeHTecZEDGunMKII.uc</a> 01-Jul-2020 18:12 969
|
||||
<a href="DamTypeKVolt.uc">DamTypeKVolt.uc</a> 01-Jul-2020 18:12 322
|
||||
<a href="DamTypeSirenDart.uc">DamTypeSirenDart.uc</a> 01-Jul-2020 18:12 360
|
||||
<a href="FreezeAch.uc">FreezeAch.uc</a> 01-Jul-2020 18:12 3022
|
||||
<a href="FreezeAchHandler.uc">FreezeAchHandler.uc</a> 01-Jul-2020 18:12 1067
|
||||
<a href="FreezeParticlesBase.uc">FreezeParticlesBase.uc</a> 01-Jul-2020 18:12 93
|
||||
<a href="FreezeParticlesDirectional.uc">FreezeParticlesDirectional.uc</a> 01-Jul-2020 18:12 265
|
||||
<a href="FreezeReplicationInfo.uc">FreezeReplicationInfo.uc</a> 01-Jul-2020 18:12 3316
|
||||
<a href="FreezeRules.uc">FreezeRules.uc</a> 01-Jul-2020 18:12 18531
|
||||
<a href="FreezerAltFire.uc">FreezerAltFire.uc</a> 01-Jul-2020 18:12 858
|
||||
<a href="FreezerAmmo.uc">FreezerAmmo.uc</a> 01-Jul-2020 18:12 366
|
||||
<a href="FreezerAmmoPickup.uc">FreezerAmmoPickup.uc</a> 01-Jul-2020 18:12 247
|
||||
<a href="FreezerAttachment.uc">FreezerAttachment.uc</a> 01-Jul-2020 18:12 1964
|
||||
<a href="FreezerDart.uc">FreezerDart.uc</a> 01-Jul-2020 18:12 117
|
||||
<a href="FreezerDartAmmo.uc">FreezerDartAmmo.uc</a> 01-Jul-2020 18:12 368
|
||||
<a href="FreezerDartAmmoPickup.uc">FreezerDartAmmoPickup.uc</a> 01-Jul-2020 18:12 183
|
||||
<a href="FreezerFire.uc">FreezerFire.uc</a> 01-Jul-2020 18:12 1855
|
||||
<a href="FreezerGun.uc">FreezerGun.uc</a> 01-Jul-2020 18:12 12789
|
||||
<a href="FreezerNitroProjectile.uc">FreezerNitroProjectile.uc</a> 01-Jul-2020 18:12 82
|
||||
<a href="FreezerPickup.uc">FreezerPickup.uc</a> 01-Jul-2020 18:12 230
|
||||
<a href="FreezerPrimaryPickup.uc">FreezerPrimaryPickup.uc</a> 01-Jul-2020 18:12 1130
|
||||
<a href="FrozenDosh.uc">FrozenDosh.uc</a> 01-Jul-2020 18:12 1848
|
||||
<a href="HTecMut.uc">HTecMut.uc</a> 01-Jul-2020 18:12 593
|
||||
<a href="HTecProg.uc">HTecProg.uc</a> 01-Jul-2020 18:12 112
|
||||
<a href="HTecZEDGun.uc">HTecZEDGun.uc</a> 01-Jul-2020 18:12 321
|
||||
<a href="HTecZEDGunAltFire.uc">HTecZEDGunAltFire.uc</a> 01-Jul-2020 18:12 75
|
||||
<a href="HTecZEDGunFire.uc">HTecZEDGunFire.uc</a> 01-Jul-2020 18:12 128
|
||||
<a href="HTecZEDGunPickup.uc">HTecZEDGunPickup.uc</a> 01-Jul-2020 18:12 204
|
||||
<a href="HTecZEDGunProjectile.uc">HTecZEDGunProjectile.uc</a> 01-Jul-2020 18:12 168
|
||||
<a href="HTecZEDMKII.uc">HTecZEDMKII.uc</a> 01-Jul-2020 18:12 288
|
||||
<a href="HTecZEDMKIIAltFire.uc">HTecZEDMKIIAltFire.uc</a> 01-Jul-2020 18:12 150
|
||||
<a href="HTecZEDMKIIFire.uc">HTecZEDMKIIFire.uc</a> 01-Jul-2020 18:12 138
|
||||
<a href="HTecZEDMKIIPickup.uc">HTecZEDMKIIPickup.uc</a> 01-Jul-2020 18:12 229
|
||||
<a href="HTecZEDMKIIPrimaryProjectile.uc">HTecZEDMKIIPrimaryProjectile.uc</a> 01-Jul-2020 18:12 154
|
||||
<a href="HTecZEDMKIISecondaryProjectile.uc">HTecZEDMKIISecondaryProjectile.uc</a> 01-Jul-2020 18:12 105
|
||||
<a href="IceChunkEmitter.uc">IceChunkEmitter.uc</a> 01-Jul-2020 18:12 16830
|
||||
<a href="IceDart.uc">IceDart.uc</a> 01-Jul-2020 18:12 3649
|
||||
<a href="IceDartHitEffect.uc">IceDartHitEffect.uc</a> 01-Jul-2020 18:12 3362
|
||||
<a href="IceDartImpact.uc">IceDartImpact.uc</a> 01-Jul-2020 18:12 5199
|
||||
<a href="IceDartMuzzleFlash.uc">IceDartMuzzleFlash.uc</a> 01-Jul-2020 18:12 15401
|
||||
<a href="IceDartTracer.uc">IceDartTracer.uc</a> 01-Jul-2020 18:12 657
|
||||
<a href="IceDartTrail.uc">IceDartTrail.uc</a> 01-Jul-2020 18:12 3676
|
||||
<a href="KVolt.uc">KVolt.uc</a> 01-Jul-2020 18:12 3247
|
||||
<a href="KVoltAmmo.uc">KVoltAmmo.uc</a> 01-Jul-2020 18:12 537
|
||||
<a href="KVoltAmmoAmmoPickup.uc">KVoltAmmoAmmoPickup.uc</a> 01-Jul-2020 18:12 232
|
||||
<a href="KVoltAttachment.uc">KVoltAttachment.uc</a> 01-Jul-2020 18:12 1271
|
||||
<a href="KVoltDart.uc">KVoltDart.uc</a> 01-Jul-2020 18:12 183
|
||||
<a href="KVoltFire.uc">KVoltFire.uc</a> 01-Jul-2020 18:12 1774
|
||||
<a href="KVoltPickup.uc">KVoltPickup.uc</a> 01-Jul-2020 18:12 1127
|
||||
<a href="NitroDecal.uc">NitroDecal.uc</a> 01-Jul-2020 18:12 379
|
||||
<a href="NitroFire.uc">NitroFire.uc</a> 01-Jul-2020 18:12 5796
|
||||
<a href="NitroGroundEffect.uc">NitroGroundEffect.uc</a> 01-Jul-2020 18:12 1583
|
||||
<a href="NitroImpact.uc">NitroImpact.uc</a> 01-Jul-2020 18:12 3100
|
||||
<a href="NitroMuzzleFlash.uc">NitroMuzzleFlash.uc</a> 01-Jul-2020 18:12 14092
|
||||
<a href="NitroProjectile.uc">NitroProjectile.uc</a> 01-Jul-2020 18:12 7172
|
||||
<a href="NitroSplash.uc">NitroSplash.uc</a> 01-Jul-2020 18:12 118
|
||||
<a href="NitroTrail.uc">NitroTrail.uc</a> 01-Jul-2020 18:12 2547
|
||||
<a href="NitroTrailB.uc">NitroTrailB.uc</a> 01-Jul-2020 18:12 3235
|
||||
<a href="ScrnVetHTec.uc">ScrnVetHTec.uc</a> 01-Jul-2020 18:12 7131
|
||||
<a href="SirenDart.uc">SirenDart.uc</a> 01-Jul-2020 18:12 2115
|
||||
<a href="ZombieSirenCryo.uc">ZombieSirenCryo.uc</a> 01-Jul-2020 18:12 7411
|
||||
<a href="ZombieSirenCryo_CIRCUS.uc">ZombieSirenCryo_CIRCUS.uc</a> 01-Jul-2020 18:12 1160
|
||||
<a href="ZombieSirenCryo_HALLOWEEN.uc">ZombieSirenCryo_HALLOWEEN.uc</a> 01-Jul-2020 18:12 1008
|
||||
<a href="ZombieSirenCryo_STANDARD.uc">ZombieSirenCryo_STANDARD.uc</a> 01-Jul-2020 18:12 677
|
||||
<a href="ZombieSirenCryo_XMas.uc">ZombieSirenCryo_XMas.uc</a> 01-Jul-2020 18:12 1181
|
||||
</pre><hr></body>
|
||||
</html>
|
||||
Loading…
Add table
Add a link
Reference in a new issue