Beta 5.
- [flak_m] Implement particle meshes. - Append heal amount to health pickups (excl. superhealth). - Armor Bonus item. - Overhaul Stinger explosive charge behaviour, more in line with 0.83 and the novels. - Fix: Dispersion Pistol should only have infinite ammo in deathmatch. - Dispersion Pistol altfire always at level 0 if below 10 ammo. - More Fireblaster tweaks and touches and whatnot. Now fires in 3 bursts of 3 projectiles. And there's more damage and whatnot, it should stop sucking. - Capped fire effects for huge actors. - Reduced flames per tic on Flamethrower, to see if this causes less performance issues. May roll back if this was a bad idea. - Snuck in some longer versions of a couple player sounds. - [oldsounds] Added higher quality dispersion pistol select sound.
This commit is contained in:
parent
c44512e312
commit
0cb76eb03a
30 changed files with 270 additions and 117 deletions
|
|
@ -43,7 +43,7 @@ Class UFireTrail : Actor
|
|||
Class UFireball : Actor
|
||||
{
|
||||
Vector3 Acceleration;
|
||||
double spreadf;
|
||||
double spreadf, maxspeed;
|
||||
int ns, nsp;
|
||||
|
||||
property SpreadFactor : spreadf;
|
||||
|
|
@ -66,22 +66,24 @@ Class UFireball : Actor
|
|||
UFireball.SpreadFactor 0.2;
|
||||
UFireball.NumSmokes 1;
|
||||
UFireball.NumSparks 2;
|
||||
DeathSound "flamegun/exp";
|
||||
}
|
||||
override void PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
maxspeed = 30.;
|
||||
if ( bAMBUSH ) return;
|
||||
let l = Spawn("UFireTrail",pos);
|
||||
l.target = self;
|
||||
Acceleration = vel.unit()*50;
|
||||
A_PlaySound("eightball/fly",CHAN_VOICE,1.0,true,3.,pitch:1.5);
|
||||
A_PlaySound("eightball/fly",CHAN_VOICE,.6,true,3.,pitch:1.5);
|
||||
}
|
||||
action void A_Spread()
|
||||
{
|
||||
vel += invoker.Acceleration/TICRATE;
|
||||
vel += (FRandom[EWizFX](-1,1),FRandom[EWizFX](-1,1),FRandom[EWizFX](-1,1))*FRandom[EWizFX](.5,1.)*invoker.spreadf;
|
||||
Vector3 dir = vel.unit();
|
||||
if ( vel.length() > 30. ) vel = dir*30.;
|
||||
if ( vel.length() > invoker.maxspeed ) vel = dir*invoker.maxspeed;
|
||||
angle = atan2(dir.y,dir.x);
|
||||
pitch = asin(-dir.z);
|
||||
if ( waterlevel > 0 )
|
||||
|
|
@ -102,6 +104,7 @@ Class UFireball : Actor
|
|||
}
|
||||
for ( int i=0; i<invoker.ns; i++ )
|
||||
{
|
||||
if ( Random[FlameGun](0,2) ) continue;
|
||||
let s = Spawn("UTSmoke",pos);
|
||||
s.vel = (FRandom[FlameGun](-0.2,0.2),FRandom[FlameGun](-0.2,0.2),FRandom[FlameGun](-0.2,0.2));
|
||||
s.vel += vel*0.2;
|
||||
|
|
@ -109,7 +112,7 @@ Class UFireball : Actor
|
|||
}
|
||||
for ( int i=0; i<invoker.nsp; i++ )
|
||||
{
|
||||
if ( Random[FlameGun](0,3) ) continue;
|
||||
if ( Random[FlameGun](0,6) ) continue;
|
||||
let s = Spawn("UTSpark",pos);
|
||||
s.vel = (FRandom[FlameGun](-0.2,0.2),FRandom[FlameGun](-0.2,0.2),FRandom[FlameGun](-0.2,0.2));
|
||||
s.ClearBounce();
|
||||
|
|
@ -128,10 +131,10 @@ Class UFireball : Actor
|
|||
}
|
||||
else
|
||||
{
|
||||
A_PlaySound("flamegun/exp",CHAN_VOICE,pitch:1.2);
|
||||
Spawn("UFireLight",pos);
|
||||
A_Explode(GetMissileDamage(0,0),60);
|
||||
UTMainHandler.DoBlast(self,60,9000);
|
||||
A_PlaySound(DeathSound,CHAN_VOICE,attenuation:1.5,pitch:FRandom[ExploS](0.8,1.2));
|
||||
}
|
||||
A_SprayDecal("SmallRocketBlast");
|
||||
Scale *= FRandom[ExploS](0.6,0.9);
|
||||
|
|
@ -164,10 +167,16 @@ Class UFireball : Actor
|
|||
s.scale *= FRandom[ExploS](0.9,1.3);
|
||||
}
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
Super.Tick();
|
||||
if ( !isFrozen() && InStateSequence(CurState,FindState("Spawn")) )
|
||||
A_Spread();
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
FIRB ABCDEFGHIJK 1 Bright A_Spread();
|
||||
FIRB ABCDEFGHIJK 2 Bright;
|
||||
Loop;
|
||||
Death:
|
||||
TNT1 A 0 A_FireballExplo();
|
||||
|
|
@ -183,10 +192,19 @@ Class UFireball2 : UFireball
|
|||
Radius 8;
|
||||
Height 8;
|
||||
DamageFunction 50;
|
||||
Speed 5;
|
||||
Speed 3;
|
||||
Scale 1.5;
|
||||
UFireball.SpreadFactor 0.35;
|
||||
UFireball.NumSmokes 2;
|
||||
UFireball.NumSparks 4;
|
||||
UFireball.NumSmokes 6;
|
||||
UFireball.NumSparks 12;
|
||||
DeathSound "flamegun/exp2";
|
||||
}
|
||||
override void PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
Acceleration = vel.unit()*150;
|
||||
maxspeed = 50.;
|
||||
A_PlaySound("eightball/fly",CHAN_VOICE,1.,true,1.5,pitch:.85);
|
||||
}
|
||||
action void A_FireballExplo2()
|
||||
{
|
||||
|
|
@ -235,9 +253,9 @@ Class UFireball2 : UFireball
|
|||
if ( ff ) HitNormal = -ff.bottom.Normal;
|
||||
else HitNormal = BlockingCeiling.ceilingplane.Normal;
|
||||
}
|
||||
for ( int i=0; i<12; i++ )
|
||||
for ( int i=0; i<20; i++ )
|
||||
{
|
||||
dir = (HitNormal*1.2+(FRandom[ExploS](-1,1),FRandom[ExploS](-1,1),FRandom[ExploS](-1,1))).unit();
|
||||
dir = (HitNormal*1.1+(FRandom[ExploS](-1,1),FRandom[ExploS](-1,1),FRandom[ExploS](-1,1))).unit();
|
||||
let s = Spawn("UFireballEmber",level.Vec3Offset(pos,HitNormal*2));
|
||||
s.vel = dir*s.speed*FRandom[ExploS](0.6,1.8);
|
||||
s.angle = atan2(dir.y,dir.x);
|
||||
|
|
@ -266,6 +284,7 @@ Class UFireballEmber : UFireball
|
|||
UFireball.SpreadFactor 0.5;
|
||||
UFireball.NumSmokes 1;
|
||||
UFireball.NumSparks 1;
|
||||
DeathSound "";
|
||||
}
|
||||
States
|
||||
{
|
||||
|
|
@ -316,15 +335,22 @@ Class FlameGun : UnrealWeapon
|
|||
UTMainHandler.DoSwing(self,(FRandom[FlameGun](-0.3,-0.2),FRandom[FlameGun](-0.2,0.2)),4,-1,3,SWING_Spring,2,2);
|
||||
}
|
||||
if ( !Dampener.Active(self) ) A_AlertMonsters();
|
||||
Vector3 x, y, z;
|
||||
Vector3 x, y, z, x2, y2, z2, dir;
|
||||
double a, s;
|
||||
[x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll);
|
||||
Vector3 origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),10*x+3*y-z);
|
||||
Actor p = Spawn(bAlt?"UFireball2":"UFireball",origin);
|
||||
p.angle = angle;
|
||||
p.pitch = BulletSlope();
|
||||
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*p.speed;
|
||||
p.target = self;
|
||||
[x2, y2, z2] = dt_CoordUtil.GetAxes(BulletSlope(),angle,roll);
|
||||
for ( int i=0; i<(bAlt?1:3); i++ )
|
||||
{
|
||||
a = FRandom[FlameGun](0,360);
|
||||
s = FRandom[FlameGun](0,bAlt?0.:.15);
|
||||
dir = (x2+y2*cos(a)*s+z2*sin(a)*s).unit();
|
||||
let p = Spawn(bAlt?"UFireball2":"UFireball",origin);
|
||||
p.angle = atan2(dir.y,dir.x);
|
||||
p.pitch = asin(-dir.z);
|
||||
p.vel = dir*p.speed;
|
||||
p.target = self;
|
||||
}
|
||||
int numpt = Random[FlameGun](10,15);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
|
|
@ -380,33 +406,36 @@ Class FlameGun : UnrealWeapon
|
|||
#### # 1 A_Overlay(-9999,"Null");
|
||||
FGNF A 2
|
||||
{
|
||||
invoker.special1 = 0;
|
||||
A_PlaySound("flamegun/start",CHAN_6,Dampener.Active(self)?.1:1.);
|
||||
if ( !Dampener.Active(self) ) A_AlertMonsters();
|
||||
}
|
||||
Hold:
|
||||
FGNF B 1 A_FlameGunFire();
|
||||
FGNF CDEF 1;
|
||||
FGNF G 0
|
||||
FGNF CDEFG 1;
|
||||
FGNF H 0
|
||||
{
|
||||
if ( invoker.CheckAmmo(0,false,true) && (waterlevel < 2) )
|
||||
invoker.special1++;
|
||||
if ( invoker.CheckAmmo(0,false,true) && (waterlevel < 2) && (invoker.special1 < 3) )
|
||||
A_Refire("Refire");
|
||||
}
|
||||
FGNF G 0 A_ClearRefire();
|
||||
FGNF GHIJ 2;
|
||||
FGNF H 0 A_ClearRefire();
|
||||
FGNF HIJ 2;
|
||||
FGNT A 0
|
||||
{
|
||||
if ( invoker.CheckAmmo(0,false,true) && (waterlevel < 2) )
|
||||
if ( invoker.CheckAmmo(0,false,true) && (waterlevel < 2) && (invoker.special1 < 3) )
|
||||
A_Refire("Fire");
|
||||
}
|
||||
FGNT A 0
|
||||
{
|
||||
invoker.special1 = 0;
|
||||
A_PlaySound("flamegun/end",CHAN_6,Dampener.Active(self)?.1:1.);
|
||||
A_ClearRefire();
|
||||
}
|
||||
FGNT ABCDEFGHIJKLM 2;
|
||||
Goto Idle;
|
||||
Refire:
|
||||
FGNF G 2 A_PlaySound("flamegun/start",CHAN_6,Dampener.Active(self)?.1:1.);
|
||||
FGNF H 2 A_PlaySound("flamegun/start",CHAN_6,Dampener.Active(self)?.1:1.);
|
||||
Goto Hold;
|
||||
AltFire:
|
||||
#### # 1 A_Overlay(-9999,"Null");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue