Renamed some sprites for compatibility with Smooth Doom.

Added water step/land sounds.
Made footsteps toggleable (in case the player is using another mod that adds them).
Added handling of liquid terrain on all actors that need it.
Fixed dual enforcers breaking after level transition.
Fixed some refire issues caused by the use of the Resurrect cheat.
Made guided redeemer missiles explode on player death.
Replaced pure particles on pulse gun effects with actor particles.
This commit is contained in:
Marisa the Magician 2018-06-01 17:49:49 +02:00
commit 71b194c6c3
52 changed files with 182 additions and 41 deletions

View file

@ -17,3 +17,4 @@ user bool flak_showinfo = true;
user float flak_hudsize = 1.0; // 0.2 <-> 1.0 in steps of 0.2 (default 1.0) user float flak_hudsize = 1.0; // 0.2 <-> 1.0 in steps of 0.2 (default 1.0)
user float flak_weaponsize = 0.8; // 0.2 <-> 1.0 in steps of 0.2 (default 0.8) user float flak_weaponsize = 0.8; // 0.2 <-> 1.0 in steps of 0.2 (default 0.8)
user float flak_statussize = 1.0; // 0.5 <-> 1.5 in steps of 0.1 (default 1.0) user float flak_statussize = 1.0; // 0.5 <-> 1.5 in steps of 0.1 (default 1.0)
user bool flak_footsteps = true;

View file

@ -36,6 +36,9 @@ OptionMenu "UTOptionMenu"
Option "Color Choice", "flak_colorprefs", "ColorPrefs" Option "Color Choice", "flak_colorprefs", "ColorPrefs"
ColorPicker "Custom Color", "flak_colorcustom" ColorPicker "Custom Color", "flak_colorcustom"
Slider "HUD Opacity", "flak_opacity", 1, 16, 1, 0 Slider "HUD Opacity", "flak_opacity", 1, 16, 1, 0
StaticText " "
StaticText "Misc Options", "Gold"
Option "UT Footsteps", "flak_footsteps", "YesNo"
} }
AddOptionMenu "OptionsMenu" AddOptionMenu "OptionsMenu"

View file

@ -92,6 +92,9 @@ ut/playerfootstep2 stone04
ut/playerfootstep3 stone05 ut/playerfootstep3 stone05
$random ut/playerfootstep { ut/playerfootstep1 ut/playerfootstep2 ut/playerfootstep3 } $random ut/playerfootstep { ut/playerfootstep1 ut/playerfootstep2 ut/playerfootstep3 }
ut/playerfootstepwet lsplash
ut/wetsplash dsplash
// everything else // everything else
misc/secret capsound misc/secret capsound

BIN
sounds/DSplash.ogg Normal file

Binary file not shown.

BIN
sounds/LSplash.ogg Normal file

Binary file not shown.

View file

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 9.6 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 9.6 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 4 KiB

After

Width:  |  Height:  |  Size: 4 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 7 KiB

After

Width:  |  Height:  |  Size: 7 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 7.9 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before After
Before After

View file

@ -43,7 +43,7 @@ Class BioSpark : Actor
{ {
RenderStyle "Add"; RenderStyle "Add";
Radius 2; Radius 2;
Height 0; Height 2;
+NOBLOCKMAP; +NOBLOCKMAP;
+FORCEXYBILLBOARD; +FORCEXYBILLBOARD;
+MISSILE; +MISSILE;
@ -52,6 +52,9 @@ Class BioSpark : Actor
+ROLLSPRITE; +ROLLSPRITE;
+ROLLCENTER; +ROLLCENTER;
+NOTELEPORT; +NOTELEPORT;
+DONTSPLASH;
-BOUNCEAUTOOFF;
+BOUNCEAUTOOFFFLOORONLY;
BounceType "Doom"; BounceType "Doom";
BounceFactor 0.5; BounceFactor 0.5;
WallBounceFactor 0.5; WallBounceFactor 0.5;
@ -350,6 +353,7 @@ Class BioGel : Actor
PROJECTILE; PROJECTILE;
-NOGRAVITY; -NOGRAVITY;
+SKYEXPLODE; +SKYEXPLODE;
+EXPLODEONWATER;
+FORCERADIUSDMG; +FORCERADIUSDMG;
+FORCEXYBILLBOARD; +FORCEXYBILLBOARD;
+MOVEWITHSECTOR; +MOVEWITHSECTOR;

View file

@ -112,6 +112,7 @@ Class UTRocket : Actor
Speed 30; Speed 30;
PROJECTILE; PROJECTILE;
+SKYEXPLODE; +SKYEXPLODE;
+EXPLODEONWATER;
+SEEKERMISSILE; +SEEKERMISSILE;
} }
override void PostBeginPlay() override void PostBeginPlay()
@ -170,7 +171,7 @@ Class UTRocket : Actor
Wait; Wait;
Death: Death:
TNT1 A 0 A_RocketExplode(); TNT1 A 0 A_RocketExplode();
SEXP ABCDEFGHIJ 2 Bright; SSMX ABCDEFGHIJ 2 Bright;
Stop; Stop;
} }
} }
@ -185,6 +186,10 @@ Class UTGrenade : UTRocket
DamageType 'GrenadeDeath'; DamageType 'GrenadeDeath';
-NOGRAVITY; -NOGRAVITY;
+USEBOUNCESTATE; +USEBOUNCESTATE;
-BOUNCEAUTOOFF;
+BOUNCEAUTOOFFFLOORONLY;
-EXPLODEONWATER;
+CANBOUNCEWATER;
BounceType "Doom"; BounceType "Doom";
BounceFactor 0.75; BounceFactor 0.75;
ReactionTime 85; ReactionTime 85;

View file

@ -345,11 +345,24 @@ Class Enforcer : UTWeapon replaces Pistol
return "%k riddled %o full of holes with the Enforcer."; return "%k riddled %o full of holes with the Enforcer.";
} }
override void Travelled()
{
Super.Travelled();
slaveactive = false;
}
override void OwnerDied()
{
Super.OwnerDied();
slaverefire = 0;
}
Default Default
{ {
Tag "Enforcer"; Tag "Enforcer";
Inventory.PickupMessage "You picked up another Enforcer!"; Inventory.PickupMessage "You picked up another Enforcer!";
Inventory.MaxAmount 2; Inventory.MaxAmount 2;
Inventory.InterHubAmount 2;
Weapon.UpSound "enforcer/select"; Weapon.UpSound "enforcer/select";
Weapon.SlotNumber 2; Weapon.SlotNumber 2;
Weapon.SelectionOrder 8; Weapon.SelectionOrder 8;

View file

@ -145,8 +145,11 @@ Class FlakChunk : Actor
BounceType "Doom"; BounceType "Doom";
BounceFactor 0.8; BounceFactor 0.8;
PROJECTILE; PROJECTILE;
+USEBOUNCESTATE +USEBOUNCESTATE;
-BOUNCEAUTOOFF -BOUNCEAUTOOFF;
+BOUNCEAUTOOFFFLOORONLY;
+CANBOUNCEWATER;
+SKYEXPLODE;
Scale 0.5; Scale 0.5;
} }
override bool CanCollideWith( Actor other, bool passive ) override bool CanCollideWith( Actor other, bool passive )
@ -363,6 +366,7 @@ Class FlakSlug : Actor
PROJECTILE; PROJECTILE;
-NOGRAVITY; -NOGRAVITY;
+SKYEXPLODE; +SKYEXPLODE;
+EXPLODEONWATER;
+HITTRACER; +HITTRACER;
} }
override void PostBeginPlay() override void PostBeginPlay()

View file

@ -36,6 +36,54 @@ Class PulseAmmo : Ammo
} }
} }
Class PulseSpark : Actor
{
Default
{
RenderStyle "Add";
Radius 2;
Height 2;
+NOBLOCKMAP;
+NOGRAVITY;
+MISSILE;
+FORCEXYBILLBOARD;
+THRUACTORS;
+ROLLSPRITE;
+ROLLCENTER;
+NOTELEPORT;
+DONTSPLASH;
+CANBOUNCEWATER;
-BOUNCEAUTOOFF;
BounceType "Doom";
BounceFactor 1.0;
WallBounceFactor 1.0;
Scale 0.03;
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
if ( !bAMBUSH )
{
roll = FRandom[Pulse](0,360);
let s = Spawn(GetClass(),pos);
s.bAMBUSH = true;
s.vel = vel;
s.scale = scale;
s.roll = roll;
}
}
States
{
Spawn:
PSPK A 1 Bright
{
A_FadeOut(FRandom[Pulse](0.0,0.15));
vel *= 0.96;
}
Wait;
}
}
Class PulseBallLight : DynamicLight Class PulseBallLight : DynamicLight
{ {
double pulseofs; double pulseofs;
@ -96,6 +144,8 @@ Class PulseBall : Actor
RenderStyle "Add"; RenderStyle "Add";
DamageFunction Random[Pulse](15,25); DamageFunction Random[Pulse](15,25);
PROJECTILE; PROJECTILE;
+EXPLODEONWATER;
+SKYEXPLODE;
Scale 0.2; Scale 0.2;
Speed 30; Speed 30;
Radius 2; Radius 2;
@ -117,8 +167,8 @@ Class PulseBall : Actor
for ( int i=0; i<numpt; i++ ) for ( int i=0; i<numpt; i++ )
{ {
Vector3 pvel = (FRandom[Pulse](-1,1),FRandom[Pulse](-1,1),FRandom[Pulse](-1,1)).unit()*FRandom[Pulse](2,4); Vector3 pvel = (FRandom[Pulse](-1,1),FRandom[Pulse](-1,1),FRandom[Pulse](-1,1)).unit()*FRandom[Pulse](2,4);
A_SpawnParticle("FFFFFF",SPF_FULLBRIGHT,Random[Pulse](20,40),FRandom[Pulse](2.4,4.8),0,0,0,0,pvel.x,pvel.y,pvel.z,0,0,0,1,-1,-0.1); let s = Spawn("PulseSpark",pos);
A_SpawnParticle("40FF00",SPF_FULLBRIGHT,Random[Pulse](30,50),FRandom[Pulse](4.8,7.2),0,0,0,0,pvel.x,pvel.y,pvel.z,0,0,0,.5,-1,-0.1); s.vel = pvel;
} }
} }
action void A_Trail() action void A_Trail()
@ -128,8 +178,8 @@ Class PulseBall : Actor
for ( int i=0; i<numpt; i++ ) for ( int i=0; i<numpt; i++ )
{ {
Vector3 pvel = (FRandom[Pulse](-1,1),FRandom[Pulse](-1,1),FRandom[Pulse](-1,1)).unit()*FRandom[Pulse](2,4); Vector3 pvel = (FRandom[Pulse](-1,1),FRandom[Pulse](-1,1),FRandom[Pulse](-1,1)).unit()*FRandom[Pulse](2,4);
A_SpawnParticle("FFFFFF",SPF_FULLBRIGHT,Random[Pulse](10,20),FRandom[Pulse](1.2,2.4),0,0,0,0,pvel.x,pvel.y,pvel.z,0,0,0,1,-1,-0.1); let s = Spawn("PulseSpark",pos);
A_SpawnParticle("40FF00",SPF_FULLBRIGHT,Random[Pulse](15,25),FRandom[Pulse](2.4,3.6),0,0,0,0,pvel.x,pvel.y,pvel.z,0,0,0,.5,-1,-0.1); s.vel = pvel;
} }
} }
States States
@ -282,13 +332,12 @@ Class PulseBolt : Actor
accdamage = 0; accdamage = 0;
} }
} }
Vector3 origin = Level.Vec3Diff(pos,t.Results.HitPos);
int numpt = Random[Pulse](10,20)*!Random[Pulse](0,2); int numpt = Random[Pulse](10,20)*!Random[Pulse](0,2);
for ( int i=0; i<numpt; i++ ) for ( int i=0; i<numpt; i++ )
{ {
Vector3 pvel = ((FRandom[Pulse](-.4,.5),FRandom[Pulse](-.4,.4),FRandom[Pulse](-.4,.4))-x).unit()*FRandom[Pulse](2,4); Vector3 pvel = ((FRandom[Pulse](-.4,.5),FRandom[Pulse](-.4,.4),FRandom[Pulse](-.4,.4))-x).unit()*FRandom[Pulse](2,4);
A_SpawnParticle("FFFFFF",SPF_FULLBRIGHT,Random[Pulse](20,40),FRandom[Pulse](2.4,4.8),0,origin.x,origin.y,origin.z,pvel.x,pvel.y,pvel.z,0,0,0,1,-1,-0.1); let s = Spawn("PulseSpark",t.Results.HitPos-t.Results.HitVector*4);
A_SpawnParticle("40FF00",SPF_FULLBRIGHT,Random[Pulse](30,50),FRandom[Pulse](4.8,7.2),0,origin.x,origin.y,origin.z,pvel.x,pvel.y,pvel.z,0,0,0,.5,-1,-0.1); s.vel = pvel;
} }
if ( weffect && (weffect is 'PulseBoltCap') ) if ( weffect && (weffect is 'PulseBoltCap') )
{ {
@ -312,15 +361,14 @@ Class PulseBolt : Actor
accdamage = 0; accdamage = 0;
damagedactor = null; damagedactor = null;
} }
Vector3 origin = Level.Vec3Diff(pos,t.Results.HitPos);
if ( position >= 19 ) if ( position >= 19 )
{ {
int numpt = Random[Pulse](5,10)*!Random[Pulse](0,5); int numpt = Random[Pulse](5,10)*!Random[Pulse](0,5);
for ( int i=0; i<numpt; i++ ) for ( int i=0; i<numpt; i++ )
{ {
Vector3 pvel = (t.Results.HitVector+(FRandom[Pulse](-.5,.5),FRandom[Pulse](-.5,.5),FRandom[Pulse](-.5,.5))).unit()*FRandom[Pulse](2,4); Vector3 pvel = (t.Results.HitVector+(FRandom[Pulse](-.5,.5),FRandom[Pulse](-.5,.5),FRandom[Pulse](-.5,.5))).unit()*FRandom[Pulse](2,4);
A_SpawnParticle("FFFFFF",SPF_FULLBRIGHT,Random[Pulse](20,40),FRandom[Pulse](2.4,4.8),0,origin.x,origin.y,origin.z,pvel.x,pvel.y,pvel.z,0,0,0,1,-1,-0.1); let s = Spawn("PulseSpark",t.Results.HitPos);
A_SpawnParticle("40FF00",SPF_FULLBRIGHT,Random[Pulse](30,50),FRandom[Pulse](4.8,7.2),0,origin.x,origin.y,origin.z,pvel.x,pvel.y,pvel.z,0,0,0,.5,-1,-0.1); s.vel = pvel;
} }
if ( weffect && (weffect is 'PulseBoltHit') ) if ( weffect && (weffect is 'PulseBoltHit') )
{ {
@ -393,10 +441,10 @@ Class StarterBolt : PulseBolt
if ( target.player ) if ( target.player )
{ {
[x, y, z] = Matrix4.GetAxes(target.pitch,target.angle,target.roll); [x, y, z] = Matrix4.GetAxes(target.pitch,target.angle,target.roll);
origin = (0,0,target.player.viewz-target.pos.z)+5.0*x+3.0*y-1.0*z; origin = target.Vec2OffsetZ(0,0,target.player.viewz)+5.0*x+3.0*y-1.0*z;
} }
else origin = (0,0,target.missileheight); else origin = target.Vec3Offset(0,0,target.missileheight);
SetOrigin(target.Vec3Offset(origin.x,origin.y,origin.z),true); SetOrigin(origin,true);
A_SetAngle(target.angle); A_SetAngle(target.angle);
A_SetPitch(target.BulletSlope()); A_SetPitch(target.BulletSlope());
frame++; frame++;
@ -439,13 +487,13 @@ Class PulseGun : UTWeapon
A_AlertMonsters(); A_AlertMonsters();
Vector3 x, y, z; Vector3 x, y, z;
[x, y, z] = Matrix4.GetAxes(pitch,angle,roll); [x, y, z] = Matrix4.GetAxes(pitch,angle,roll);
Vector3 origin = pos+(0,0,player.viewheight)+10.0*x+4.5*y-1.9*z; Vector3 origin = Vec2OffsetZ(0,0,player.viewz)+10.0*x+4.5*y-1.9*z;
int numpt = Random[Pulse](2,5); int numpt = Random[Pulse](2,5);
for ( int i=0; i<numpt; i++ ) for ( int i=0; i<numpt; i++ )
{ {
Vector3 pvel = (x+(FRandom[Pulse](-.5,.5),FRandom[Pulse](-.5,.5),FRandom[Pulse](-.5,.5))).unit()*FRandom[Pulse](2,4); Vector3 pvel = (x+(FRandom[Pulse](-.5,.5),FRandom[Pulse](-.5,.5),FRandom[Pulse](-.5,.5))).unit()*FRandom[Pulse](2,4);
A_SpawnParticle("FFFFFF",SPF_FULLBRIGHT,Random[Pulse](10,20),FRandom[Pulse](1.2,2.4),0,origin.x-pos.x,origin.y-pos.y,origin.z-pos.z,pvel.x,pvel.y,pvel.z,0,0,0,1,-1,-0.1); let s = Spawn("PulseSpark",origin);
A_SpawnParticle("40FF00",SPF_FULLBRIGHT,Random[Pulse](15,25),FRandom[Pulse](2.4,3.6),0,origin.x-pos.x,origin.y-pos.y,origin.z-pos.z,pvel.x,pvel.y,pvel.z,0,0,0,.5,-1,-0.1); s.vel = pvel;
} }
} }
action void A_PulseRefire( statelabel flash = null ) action void A_PulseRefire( statelabel flash = null )
@ -479,7 +527,7 @@ Class PulseGun : UTWeapon
Vector3 x, y, z; Vector3 x, y, z;
double a; double a;
[x, y, z] = Matrix4.GetAxes(pitch,angle,roll); [x, y, z] = Matrix4.GetAxes(pitch,angle,roll);
Vector3 origin = pos+(0,0,player.viewheight)+10.0*x+4.0*y-1.5*z; Vector3 origin = Vec2OffsetZ(0,0,player.viewz)+10.0*x+4.0*y-1.5*z;
origin += y*cos(invoker.sangle)*2.0+z*sin(invoker.sangle)*2.0; origin += y*cos(invoker.sangle)*2.0+z*sin(invoker.sangle)*2.0;
invoker.sangle += 100; invoker.sangle += 100;
Actor p = Spawn("PulseBall",origin); Actor p = Spawn("PulseBall",origin);
@ -491,8 +539,8 @@ Class PulseGun : UTWeapon
for ( int i=0; i<numpt; i++ ) for ( int i=0; i<numpt; i++ )
{ {
Vector3 pvel = (x+(FRandom[Pulse](-.5,.5),FRandom[Pulse](-.5,.5),FRandom[Pulse](-.5,.5))).unit()*FRandom[Pulse](2,4); Vector3 pvel = (x+(FRandom[Pulse](-.5,.5),FRandom[Pulse](-.5,.5),FRandom[Pulse](-.5,.5))).unit()*FRandom[Pulse](2,4);
A_SpawnParticle("FFFFFF",SPF_FULLBRIGHT,Random[Pulse](10,20),FRandom[Pulse](1.2,2.4),0,origin.x-pos.x,origin.y-pos.y,origin.z-pos.z,pvel.x,pvel.y,pvel.z,0,0,0,1,-1,-0.1); let s = Spawn("PulseSpark",origin);
A_SpawnParticle("40FF00",SPF_FULLBRIGHT,Random[Pulse](15,25),FRandom[Pulse](2.4,3.6),0,origin.x-pos.x,origin.y-pos.y,origin.z-pos.z,pvel.x,pvel.y,pvel.z,0,0,0,.5,-1,-0.1); s.vel = pvel;
} }
} }
action void A_StartBeam() action void A_StartBeam()
@ -500,8 +548,8 @@ Class PulseGun : UTWeapon
A_PlaySound("pulse/bolt",CHAN_WEAPON,1.0,true); A_PlaySound("pulse/bolt",CHAN_WEAPON,1.0,true);
Vector3 x, y, z, origin; Vector3 x, y, z, origin;
[x, y, z] = Matrix4.GetAxes(pitch,angle,roll); [x, y, z] = Matrix4.GetAxes(pitch,angle,roll);
origin = (0,0,player.viewz-pos.z)+5.0*x+3.0*y-1.0*z; origin = Vec2OffsetZ(0,0,player.viewz)+5.0*x+3.0*y-1.0*z;
invoker.beam = Spawn("StarterBolt",Vec3Offset(origin.x,origin.y,origin.z)); invoker.beam = Spawn("StarterBolt",origin);
invoker.beam.angle = angle; invoker.beam.angle = angle;
invoker.beam.pitch = BulletSlope(); invoker.beam.pitch = BulletSlope();
invoker.beam.target = self; invoker.beam.target = self;
@ -521,6 +569,11 @@ Class PulseGun : UTWeapon
if ( beam ) beam.Destroy(); if ( beam ) beam.Destroy();
Super.DetachFromOwner(); Super.DetachFromOwner();
} }
override void OnDestroy()
{
Super.OnDestroy();
if ( beam ) beam.Destroy();
}
Default Default
{ {
Tag "Pulse Gun"; Tag "Pulse Gun";

View file

@ -62,11 +62,14 @@ Class Razor2 : Actor
DamageType "Ripper"; DamageType "Ripper";
Obituary "%k ripped a chunk of meat out of %o with the Ripper."; Obituary "%k ripped a chunk of meat out of %o with the Ripper.";
BounceType "Doom"; BounceType "Doom";
BounceCount 7; ReactionTime 7;
BounceFactor 1.0; BounceFactor 1.0;
WallBounceFactor 1.0; WallBounceFactor 1.0;
PROJECTILE; PROJECTILE;
+USEBOUNCESTATE; +USEBOUNCESTATE;
-BOUNCEAUTOOFF;
+SKYEXPLODE;
+CANBOUNCEWATER;
} }
override void PostBeginPlay() override void PostBeginPlay()
{ {
@ -135,6 +138,7 @@ Class Razor2 : Actor
A_SetAngle(atan2(dir.y,dir.x)); A_SetAngle(atan2(dir.y,dir.x));
A_SetPitch(asin(-dir.z)); A_SetPitch(asin(-dir.z));
A_RazorHit(); A_RazorHit();
A_CountDown();
} }
Goto Spawn; Goto Spawn;
Death: Death:
@ -182,6 +186,8 @@ Class Razor2Alt : Razor2
DamageFunction Random[Ripper](25,34); DamageFunction Random[Ripper](25,34);
DamageType "RipperAltDealth"; DamageType "RipperAltDealth";
BounceType "None"; BounceType "None";
-CANBOUNCEWATER;
+EXPLODEONWATER;
} }
action void A_RazorExplode() action void A_RazorExplode()
{ {
@ -232,7 +238,7 @@ Class Razor2Alt : Razor2
Death: Death:
XDeath: XDeath:
TNT1 A 0 A_RazorExplode(); TNT1 A 0 A_RazorExplode();
REXP ABCDEFG 2 Bright; RIPX ABCDEFG 2 Bright;
Stop; Stop;
} }
} }

View file

@ -184,7 +184,7 @@ Class ShockSpark : Actor
{ {
RenderStyle "Add"; RenderStyle "Add";
Radius 2; Radius 2;
Height 0; Height 2;
+NOBLOCKMAP; +NOBLOCKMAP;
+NOGRAVITY; +NOGRAVITY;
+MISSILE; +MISSILE;
@ -193,6 +193,9 @@ Class ShockSpark : Actor
+ROLLSPRITE; +ROLLSPRITE;
+ROLLCENTER; +ROLLCENTER;
+NOTELEPORT; +NOTELEPORT;
+DONTSPLASH;
+CANBOUNCEWATER;
-BOUNCEAUTOOFF;
BounceType "Doom"; BounceType "Doom";
BounceFactor 1.0; BounceFactor 1.0;
WallBounceFactor 1.0; WallBounceFactor 1.0;
@ -388,7 +391,7 @@ Class ShockBeam : Actor
Wait; Wait;
Death: Death:
TNT1 A 0 A_BeamExplode(); TNT1 A 0 A_BeamExplode();
AEXP ABCDEFGHIJKL 1 Bright; ASMX ABCDEFGHIJKL 1 Bright;
TNT1 A 100; TNT1 A 100;
Stop; Stop;
} }
@ -400,7 +403,7 @@ Class SuperShockSpark : Actor
{ {
RenderStyle "Add"; RenderStyle "Add";
Radius 2; Radius 2;
Height 0; Height 2;
+NOBLOCKMAP; +NOBLOCKMAP;
+NOGRAVITY; +NOGRAVITY;
+MISSILE; +MISSILE;
@ -409,6 +412,9 @@ Class SuperShockSpark : Actor
+ROLLSPRITE; +ROLLSPRITE;
+ROLLCENTER; +ROLLCENTER;
+NOTELEPORT; +NOTELEPORT;
+DONTSPLASH;
+CANBOUNCEWATER;
-BOUNCEAUTOOFF;
BounceType "Doom"; BounceType "Doom";
BounceFactor 1.0; BounceFactor 1.0;
WallBounceFactor 1.0; WallBounceFactor 1.0;
@ -608,7 +614,7 @@ Class SuperShockBeam : Actor
Wait; Wait;
Death: Death:
TNT1 A 0 A_BeamExplode(); TNT1 A 0 A_BeamExplode();
SEXP ABCDEFGHIJKL 1 Bright; SSMX ABCDEFGHIJKL 1 Bright;
TNT1 A 100; TNT1 A 100;
Stop; Stop;
} }
@ -824,15 +830,16 @@ Class ShockBall : Actor
PROJECTILE; PROJECTILE;
+FORCEXYBILLBOARD; +FORCEXYBILLBOARD;
+SKYEXPLODE; +SKYEXPLODE;
+EXPLODEONWATER;
} }
States States
{ {
Spawn: Spawn:
ABAL ABCD 2 Bright; ASMB ABCD 2 Bright;
Loop; Loop;
Death: Death:
TNT1 A 0 A_BallExplode(); TNT1 A 0 A_BallExplode();
AEXP ABCDEFGHIJKL 2 Bright; ASMX ABCDEFGHIJKL 2 Bright;
TNT1 A 300; TNT1 A 300;
Stop; Stop;
} }
@ -888,15 +895,16 @@ Class SuperShockBall : Actor
+SKYEXPLODE; +SKYEXPLODE;
+FORCERADIUSDMG; +FORCERADIUSDMG;
+EXTREMEDEATH; +EXTREMEDEATH;
+EXPLODEONWATER;
} }
States States
{ {
Spawn: Spawn:
SBAL ABCD 2 Bright; SSMB ABCD 2 Bright;
Loop; Loop;
Death: Death:
TNT1 A 0 A_BallExplode(); TNT1 A 0 A_BallExplode();
SEXP ABCDEFGHIJKL 2 Bright; SSMX ABCDEFGHIJKL 2 Bright;
TNT1 A 300; TNT1 A 300;
Stop; Stop;
} }

View file

@ -127,6 +127,9 @@ Class TranslocatorModule : Actor
+SKYEXPLODE; +SKYEXPLODE;
+HITTRACER; +HITTRACER;
+MOVEWITHSECTOR; +MOVEWITHSECTOR;
+CANBOUNCEWATER;
-BOUNCEAUTOOFF;
+BOUNCEAUTOOFFFLOORONLY;
BounceType "Doom"; BounceType "Doom";
BounceFactor 0.5; BounceFactor 0.5;
WallBounceFactor 0.5; WallBounceFactor 0.5;
@ -354,6 +357,12 @@ Class Translocator : UTWeapon
} }
} }
override void OnDestroy()
{
Super.OnDestroy();
if ( module ) module.Destroy();
}
Default Default
{ {
Tag "Translocator"; Tag "Translocator";

View file

@ -2,6 +2,7 @@ Class UTPlayer : DoomPlayer
{ {
bool lastground; bool lastground;
double lastvelz, prevvelz; double lastvelz, prevvelz;
transient CVar footsteps;
Default Default
{ {
@ -166,11 +167,19 @@ Class UTPlayer : DoomPlayer
override void Tick() override void Tick()
{ {
Super.Tick(); Super.Tick();
if ( !footsteps ) footsteps = CVar.GetCVar('flak_footsteps',players[consoleplayer]);
if ( !footsteps.GetBool() ) return;
double ang = level.time/(20*TICRATE/35.)*360.; double ang = level.time/(20*TICRATE/35.)*360.;
if ( (abs(sin(ang)) >= 1.0) && player.onground && (player.cmd.forwardmove || player.cmd.sidemove) ) if ( (abs(sin(ang)) >= 1.0) && player.onground && (player.cmd.forwardmove || player.cmd.sidemove) )
A_PlaySound("ut/playerfootstep",CHAN_5,abs(vel.xy.length())*0.03); {
if ( (waterlevel > 0) || GetFloorTerrain().IsLiquid ) A_PlaySound("ut/playerfootstepwet",CHAN_5,abs(vel.xy.length())*0.03);
else A_PlaySound("ut/playerfootstep",CHAN_5,abs(vel.xy.length())*0.03);
}
if ( player.onground && !bNoGravity && !lastground && (lastvelz < -2) && (lastvelz >= -8) ) if ( player.onground && !bNoGravity && !lastground && (lastvelz < -2) && (lastvelz >= -8) )
A_PlaySound("*land",CHAN_AUTO,abs(lastvelz*0.0625)); {
if ( (waterlevel > 0) || GetFloorTerrain().IsLiquid ) A_PlaySound("ut/wetsplash",CHAN_AUTO,abs(lastvelz*0.0625));
else A_PlaySound("*land",CHAN_AUTO,abs(lastvelz*0.0625));
}
lastground = player.onground; lastground = player.onground;
lastvelz = prevvelz; lastvelz = prevvelz;
prevvelz = vel.z; prevvelz = vel.z;
@ -231,6 +240,12 @@ Class UTWeapon : Weapon
if ( amp ) amp.FireEffect(); if ( amp ) amp.FireEffect();
} }
override void OwnerDied()
{
Super.OwnerDied();
A_ClearRefire();
}
Default Default
{ {
Weapon.BobStyle "Smooth"; Weapon.BobStyle "Smooth";
@ -339,13 +354,14 @@ Class UTSpark : Actor
{ {
RenderStyle "Add"; RenderStyle "Add";
Radius 2; Radius 2;
Height 0; Height 2;
+NOBLOCKMAP; +NOBLOCKMAP;
+FORCEXYBILLBOARD; +FORCEXYBILLBOARD;
+MISSILE; +MISSILE;
+MOVEWITHSECTOR; +MOVEWITHSECTOR;
+THRUACTORS; +THRUACTORS;
+NOTELEPORT; +NOTELEPORT;
+DONTSPLASH;
BounceType "Doom"; BounceType "Doom";
BounceFactor 0.4; BounceFactor 0.4;
Gravity 0.5; Gravity 0.5;
@ -381,12 +397,13 @@ Class UTChip : Actor
Default Default
{ {
Radius 2; Radius 2;
Height 0; Height 2;
+NOBLOCKMAP; +NOBLOCKMAP;
+MISSILE; +MISSILE;
+MOVEWITHSECTOR; +MOVEWITHSECTOR;
+THRUACTORS; +THRUACTORS;
+NOTELEPORT; +NOTELEPORT;
+DONTSPLASH;
BounceType "Doom"; BounceType "Doom";
BounceFactor 0.3; BounceFactor 0.3;
Gravity 0.7; Gravity 0.7;
@ -446,7 +463,7 @@ Class UTBubble : Actor
{ {
RenderStyle "Add"; RenderStyle "Add";
Radius 2; Radius 2;
Height 0; Height 2;
+NOBLOCKMAP; +NOBLOCKMAP;
+NOGRAVITY; +NOGRAVITY;
+DONTSPLASH; +DONTSPLASH;
@ -488,13 +505,15 @@ Class UTSmoke : Actor
RenderStyle "Shaded"; RenderStyle "Shaded";
StencilColor "FFFFFF"; StencilColor "FFFFFF";
Radius 2; Radius 2;
Height 0; Height 2;
+NOBLOCKMAP; +NOBLOCKMAP;
+NOGRAVITY; +NOGRAVITY;
+DONTSPLASH; +DONTSPLASH;
+FORCEXYBILLBOARD; +FORCEXYBILLBOARD;
+THRUACTORS; +THRUACTORS;
+NOTELEPORT; +NOTELEPORT;
+CANBOUNCEWATER;
-BOUNCEAUTOOFF;
BounceType "Hexen"; BounceType "Hexen";
BounceFactor 1.0; BounceFactor 1.0;
WallBounceFactor 1.0; WallBounceFactor 1.0;

View file

@ -251,6 +251,7 @@ Class WarShell : Actor
+FORCEXYBILLBOARD; +FORCEXYBILLBOARD;
+SKYEXPLODE; +SKYEXPLODE;
+FORCERADIUSDMG; +FORCERADIUSDMG;
+EXPLODEONWATER;
} }
override void PostBeginPlay() override void PostBeginPlay()
{ {
@ -634,6 +635,18 @@ Class WarheadLauncher : UTWeapon replaces BFG9000
return Super.CreateTossable(); return Super.CreateTossable();
} }
override void OwnerDied()
{
Super.OwnerDied();
if ( guided ) guided.ExplodeMissile();
}
override void OnDestroy()
{
Super.OnDestroy();
if ( guided ) guided.ExplodeMissile();
}
Default Default
{ {
Tag "Redeemer"; Tag "Redeemer";