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:
Marisa the Magician 2018-06-08 16:01:12 +02:00
commit 9ed6c9dea0
8 changed files with 39 additions and 24 deletions

View file

@ -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

View file

@ -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;

View file

@ -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;
} }
} }

View file

@ -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()
{ {

View file

@ -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);

View file

@ -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;
} }

View file

@ -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.";

View file

@ -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;