Adjusted projectile speeds across the board for more consistency.
Tweaked guided redeemer missile movement, no longer makes sharp turns. Additional development notes so I don't forget what I should do next.
This commit is contained in:
parent
b69a5cfe05
commit
9ed6c9dea0
8 changed files with 39 additions and 24 deletions
21
Readme.md
21
Readme.md
|
|
@ -45,10 +45,25 @@ This mod requires GZDoom 3.4.0 or later.
|
||||||
|
|
||||||
## In progress
|
## In progress
|
||||||
|
|
||||||
- Make biorifle sludge follow ceiling and wall movement (this might be hard)
|
|
||||||
- Add some more effects, maybe some nicer recoil on guns too
|
|
||||||
- General polishing and bugfixing
|
- General polishing and bugfixing
|
||||||
- Trim out unused animations
|
- Make biorifle sludge follow ceiling and wall movement (this might be hard)
|
||||||
|
- Add some more effects
|
||||||
|
- Additional particle effects on explosions
|
||||||
|
- Smoke on spent casings
|
||||||
|
- Visual recoil affecting aim (time to recycle SM's A_Swing once again)
|
||||||
|
- Additional model optimization and cleanup
|
||||||
|
- Trim out unused animations (this one is going to be very time-consuming)
|
||||||
|
- Unify some texture groups (umodel does some weird thing where it separates
|
||||||
|
unlit polys into a new group, even when they're not supposed to be)
|
||||||
|
- Trim out garbage triangles (e.g.: an extra triangle in the biorifle that
|
||||||
|
has no reason to exist (can be seen when using invisibility, looks
|
||||||
|
completely out of place there)
|
||||||
|
- Recenter the backpack mesh (it was a complete hack job to begin with)
|
||||||
|
|
||||||
|
## Future plans
|
||||||
|
|
||||||
|
- Add ammo counters to Pulsegun, Minigun, Flak Cannon and Rocket Launcher once
|
||||||
|
scripted textures are implemented.
|
||||||
|
|
||||||
## Known bugs
|
## Known bugs
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -349,7 +349,7 @@ Class BioGel : Actor
|
||||||
Radius 3;
|
Radius 3;
|
||||||
Height 3;
|
Height 3;
|
||||||
Scale 2;
|
Scale 2;
|
||||||
Speed 20;
|
Speed 18;
|
||||||
PROJECTILE;
|
PROJECTILE;
|
||||||
-NOGRAVITY;
|
-NOGRAVITY;
|
||||||
+SKYEXPLODE;
|
+SKYEXPLODE;
|
||||||
|
|
|
||||||
|
|
@ -109,7 +109,7 @@ Class UTRocket : Actor
|
||||||
DamageType 'RocketDeath';
|
DamageType 'RocketDeath';
|
||||||
Radius 2;
|
Radius 2;
|
||||||
Height 2;
|
Height 2;
|
||||||
Speed 30;
|
Speed 18;
|
||||||
PROJECTILE;
|
PROJECTILE;
|
||||||
+SKYEXPLODE;
|
+SKYEXPLODE;
|
||||||
+EXPLODEONWATER;
|
+EXPLODEONWATER;
|
||||||
|
|
@ -163,10 +163,16 @@ Class UTRocket : Actor
|
||||||
{
|
{
|
||||||
A_SetRoll(roll+30,SPF_INTERPOLATE);
|
A_SetRoll(roll+30,SPF_INTERPOLATE);
|
||||||
Vector3 dir = vel.unit();
|
Vector3 dir = vel.unit();
|
||||||
|
if ( waterlevel <= 0 ) vel = dir*min(vel.length()+1,32);
|
||||||
A_SetAngle(atan2(dir.y,dir.x),SPF_INTERPOLATE);
|
A_SetAngle(atan2(dir.y,dir.x),SPF_INTERPOLATE);
|
||||||
A_SetPitch(asin(-dir.z),SPF_INTERPOLATE);
|
A_SetPitch(asin(-dir.z),SPF_INTERPOLATE);
|
||||||
if ( tracer ) A_SeekerMissile(0,2,SMF_PRECISE);
|
if ( tracer ) A_SeekerMissile(0,2,SMF_PRECISE);
|
||||||
Spawn("UTSmoke",pos);
|
for ( int i=0; i<3; i++ )
|
||||||
|
{
|
||||||
|
let s = Spawn("UTSmoke",pos);
|
||||||
|
s.vel = (FRandom[Eightball](-0.2,0.2),FRandom[Eightball](-0.2,0.2),FRandom[Eightball](-0.2,0.2));
|
||||||
|
s.vel += vel*0.1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Wait;
|
Wait;
|
||||||
Death:
|
Death:
|
||||||
|
|
@ -308,8 +314,8 @@ Class UTRocketLauncher : UTWeapon
|
||||||
s = FRandom[Eightball](0,0.06*(num-1));
|
s = FRandom[Eightball](0,0.06*(num-1));
|
||||||
Vector3 dir = (x2+cos(a)*y2*s+sin(a)*z2*s).unit();
|
Vector3 dir = (x2+cos(a)*y2*s+sin(a)*z2*s).unit();
|
||||||
p = Spawn("UTGrenade",origin);
|
p = Spawn("UTGrenade",origin);
|
||||||
p.vel = dir*p.speed*FRandom[Eightball](1.0,1.2);
|
p.vel = x*(vel dot x)*0.4 + dir*p.speed*FRandom[Eightball](1.0,1.2);
|
||||||
p.vel.z += 5;
|
p.vel.z += 6;
|
||||||
p.target = self;
|
p.target = self;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -372,7 +372,7 @@ Class FlakSlug : Actor
|
||||||
override void PostBeginPlay()
|
override void PostBeginPlay()
|
||||||
{
|
{
|
||||||
Super.PostBeginPlay();
|
Super.PostBeginPlay();
|
||||||
vel.z += 5;
|
vel.z += 4;
|
||||||
}
|
}
|
||||||
override void Tick()
|
override void Tick()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -69,13 +69,13 @@ Class MinigunTracer : Actor
|
||||||
{
|
{
|
||||||
Super.Tick();
|
Super.Tick();
|
||||||
Vector3 dir = level.Vec3Diff(pos,dest);
|
Vector3 dir = level.Vec3Diff(pos,dest);
|
||||||
if ( dir.length() < 200 )
|
if ( dir.length() < 160 )
|
||||||
{
|
{
|
||||||
Destroy();
|
Destroy();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dir = dir.unit();
|
dir = dir.unit();
|
||||||
SetOrigin(Vec3Offset(dir.x*200,dir.y*200,dir.z*200),true);
|
SetOrigin(Vec3Offset(dir.x*160,dir.y*160,dir.z*160),true);
|
||||||
A_SetAngle(atan2(dir.y,dir.x),SPF_INTERPOLATE);
|
A_SetAngle(atan2(dir.y,dir.x),SPF_INTERPOLATE);
|
||||||
A_SetPitch(asin(-dir.z),SPF_INTERPOLATE);
|
A_SetPitch(asin(-dir.z),SPF_INTERPOLATE);
|
||||||
A_SetRoll(roll+60,SPF_INTERPOLATE);
|
A_SetRoll(roll+60,SPF_INTERPOLATE);
|
||||||
|
|
|
||||||
|
|
@ -146,8 +146,8 @@ Class PulseBall : Actor
|
||||||
PROJECTILE;
|
PROJECTILE;
|
||||||
+EXPLODEONWATER;
|
+EXPLODEONWATER;
|
||||||
+SKYEXPLODE;
|
+SKYEXPLODE;
|
||||||
Scale 0.2;
|
Scale 0.19;
|
||||||
Speed 30;
|
Speed 29;
|
||||||
Radius 2;
|
Radius 2;
|
||||||
Height 2;
|
Height 2;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -57,7 +57,7 @@ Class Razor2 : Actor
|
||||||
{
|
{
|
||||||
Radius 2;
|
Radius 2;
|
||||||
Height 2;
|
Height 2;
|
||||||
Speed 50;
|
Speed 40; // should be 26 but it looks way too slow
|
||||||
DamageFunction Random[Ripper](30,40);
|
DamageFunction Random[Ripper](30,40);
|
||||||
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.";
|
||||||
|
|
|
||||||
|
|
@ -244,7 +244,7 @@ Class WarShell : Actor
|
||||||
Obituary "%o was vaporized by %k's Redeemer!!";
|
Obituary "%o was vaporized by %k's Redeemer!!";
|
||||||
Radius 2;
|
Radius 2;
|
||||||
Height 2;
|
Height 2;
|
||||||
Speed 2;
|
Speed 12;
|
||||||
DamageType 'RedeemerDeath';
|
DamageType 'RedeemerDeath';
|
||||||
DamageFactor 1000;
|
DamageFactor 1000;
|
||||||
PROJECTILE;
|
PROJECTILE;
|
||||||
|
|
@ -279,9 +279,9 @@ Class WarShell : Actor
|
||||||
if ( waterlevel > 0 )
|
if ( waterlevel > 0 )
|
||||||
{
|
{
|
||||||
vel *= 0.98;
|
vel *= 0.98;
|
||||||
if ( vel.length() < 5 ) vel += vel.unit()*0.5;
|
if ( vel.length() < 12 ) vel += vel.unit();
|
||||||
}
|
}
|
||||||
else if ( vel.length() < 10 ) vel += vel.unit()*0.5;
|
else if ( vel.length() < 40 ) vel += vel.unit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
action void A_Trail()
|
action void A_Trail()
|
||||||
|
|
@ -395,13 +395,7 @@ Class GuidedWarShell : WarShell
|
||||||
A_SetAngle(destangle,SPF_INTERPOLATE);
|
A_SetAngle(destangle,SPF_INTERPOLATE);
|
||||||
A_SetPitch(destpitch,SPF_INTERPOLATE);
|
A_SetPitch(destpitch,SPF_INTERPOLATE);
|
||||||
A_SetRoll(destroll,SPF_INTERPOLATE);
|
A_SetRoll(destroll,SPF_INTERPOLATE);
|
||||||
vel = vel.length()*(cos(angle)*cos(pitch),sin(angle)*cos(pitch),-sin(pitch));
|
vel = (vel+(cos(angle)*cos(pitch),sin(angle)*cos(pitch),-sin(pitch))*0.8).unit()*11;
|
||||||
if ( waterlevel > 0 )
|
|
||||||
{
|
|
||||||
vel *= 0.98;
|
|
||||||
if ( vel.length() < 5 ) vel += vel.unit()*0.5;
|
|
||||||
}
|
|
||||||
else if ( vel.length() < 10 ) vel += vel.unit()*0.5;
|
|
||||||
}
|
}
|
||||||
lagangle2 = lagangle2*0.95+lagangle*0.05;
|
lagangle2 = lagangle2*0.95+lagangle*0.05;
|
||||||
lagpitch2 = lagpitch2*0.95+lagpitch*0.05;
|
lagpitch2 = lagpitch2*0.95+lagpitch*0.05;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue