- Very noticeable changes to the Automag and Protomag firing speeds.
   This is going to make dual wielding even more OP than it already was. Just
   so you know, dual wielding is NOT "canon" here, and if it breaks balance I
   really can't do much about it.
 - Automag and Protomag now start firing as soon as the trigger is held.
 - Protomag damage reduced back to 10 now that it has a much faster altfire.
   Believe it or not, the new altfire speed is actually true to the original.
 - Propagate the AmbientGlow changes from DT.
This commit is contained in:
Marisa the Magician 2019-10-29 21:28:49 +01:00
commit 71fc572952
5 changed files with 83 additions and 61 deletions

View file

@ -218,8 +218,9 @@ no need to reload. An experimental entanglement unit inside the gun's internal
mag locates spare ammunition carried by the user and automatically loads it.
Both of its fire modes work exactly like the Automag, although due to
internal differences, it's a bit weaker in terms of speed and damage. However
it compensates by being much more accurate, even when rapid firing.
internal differences, it's a bit weaker in terms of damage, however it
compensates by having pinpoint accuracy on its primary fire (unless dual
wielded) and having a much faster alternate fire.
Pressing the reload button makes use of the gun's weight to beat the crap out
of your enemies up close.

View file

@ -73,7 +73,7 @@ This mod requires GZDoom 4.2.3 or later, and runs on top of Doom Tournament.
## In progress
- N/A, this is the 1.0.3 release.
- N/A, this is the 1.0.4 release.
## Planned

View file

@ -1,12 +1,12 @@
// imitation of the Unreal Engine 1.x ambient glow effect, timing may be off
#define PI 3.14159265
// imitation of the Unreal Engine 1.x ambient glow effect
vec4 ProcessLight( vec4 color )
{
float glow = (1.0+sin(timer*2*PI))*0.25;
float glow = 0.25+0.2*sin(timer*8);
return vec4(min(color.rgb+vec3(glow),1.0),color.a);
}
// imitation of the Unreal Engine 1.x bMeshEnviroMap effect, not 1:1 but gets close
// with the addition of a mask for blending the environment map with the base texture
vec4 ProcessTexel()
{
vec4 base = getTexel(vTexCoord.st);

View file

@ -195,6 +195,7 @@ Class Automag : UnrealWeapon
if ( alt ) origin = level.Vec3Offset(origin,-z*3+ydir*y);
else origin = level.Vec3Offset(origin,-z+ydir*y*4);
double a = FRandom[Automag](0,360), s = FRandom[Automag](0,alt?invoker.altaccuracy:0.01);
if ( invoker.Amount > 1 ) s *= 1.6;
[x2, y2, z2] = dt_CoordUtil.GetAxes(BulletSlope(),angle,roll);
Vector3 dir = (x2+y2*cos(a)*s+z2*sin(a)*s).unit();
FLineTraceData d;
@ -341,6 +342,7 @@ Class Automag : UnrealWeapon
Stop;
Select:
AUTS A 1 A_Raise(int.max);
Wait;
Ready:
AUTS A 0
{
@ -403,27 +405,33 @@ Class Automag : UnrealWeapon
}
Wait;
Fire:
AUTF A 1 A_Overlay(-9999,null);
AUTF A 1
{
A_Overlay(-9999,null);
A_AutomagFire();
}
AUTF BCD 1;
AUTF LM 3;
AUTF N 0 A_AutomagRefire(1);
Goto Release;
Hold:
AUTF E 2 A_AutomagFire();
AUTF FG 2;
AUTF N 1;
AUTF E 3 A_AutomagFire();
AUTF FG 3;
AUTF N 0 A_AutomagRefire(1);
Goto Release;
AUTF NN 2;
AUTF H 2 A_AutomagFire();
AUTF IJ 2;
AUTF N 1;
AUTF H 3 A_AutomagFire();
AUTF IJ 3;
AUTF N 0 A_AutomagRefire(1);
Goto Release;
AUTF NN 2;
AUTF K 2 A_AutomagFire();
AUTF LM 2;
AUTF N 0 A_AutomagRefire(1);
AUTF N 1;
AUTF K 3 A_AutomagFire();
AUTF LM 3;
AUTF N 0 A_AutomagRefire("Hold");
Goto Release;
AUTF NN 2;
Goto Hold;
Release:
AUTF NN 2;
AUTF N 1;
AUTF OPQRST 1;
AUTI A 0;
Goto Idle;
@ -431,26 +439,29 @@ Class Automag : UnrealWeapon
2UTI A 5 A_Overlay(-9998,null);
2UTI A 0 A_AutomagRefire(1,true);
Goto LeftIdle;
2UTF A 1 A_AutomagFire(false,true);
2UTF BCD 1;
2UTF LM 3;
2UTF N 0 A_AutomagRefire(1,true);
Goto LeftRelease;
LeftHold:
2UTF ABCD 1;
2UTF E 2 A_AutomagFire(false,true);
2UTF FG 2;
2UTF N 1;
2UTF E 3 A_AutomagFire(false,true);
2UTF FG 3;
2UTF N 0 A_AutomagRefire(1,true);
Goto LeftRelease;
2UTF NN 2;
2UTF H 2 A_AutomagFire(false,true);
2UTF IJ 2;
2UTF N 1;
2UTF H 3 A_AutomagFire(false,true);
2UTF IJ 3;
2UTF N 0 A_AutomagRefire(1,true);
Goto LeftRelease;
2UTF NN 2;
2UTF K 2 A_AutomagFire(false,true);
2UTF LM 2;
2UTF N 0 A_AutomagRefire(1,true);
2UTF N 1;
2UTF K 3 A_AutomagFire(false,true);
2UTF LM 3;
2UTF N 0 A_AutomagRefire("LeftHold",true);
Goto LeftRelease;
2UTF NN 2;
Goto LeftHold+4;
LeftRelease:
2UTF NN 2;
2UTF N 1;
2UTF OPQRST 1;
2UTI A 0;
Goto LeftIdle;
@ -466,17 +477,17 @@ Class Automag : UnrealWeapon
AUTA LM 2;
AUTA T 0 A_AutomagRefire(1);
Goto AltRelease;
AUTA T 1;
AUTA T 2;
AUTA N 2 A_AutomagFire(true);
AUTA OP 2;
AUTA T 0 A_AutomagRefire(1);
Goto AltRelease;
AUTA T 1;
AUTA T 2;
AUTA Q 2 A_AutomagFire(true);
AUTA RS 2;
AUTA T 0 A_AutomagRefire(1);
Goto AltRelease;
AUTA T 1;
AUTA T 2;
Goto AltHold;
AltRelease:
AUTA TUVWXYZ 1;
@ -491,17 +502,17 @@ Class Automag : UnrealWeapon
2UTA LM 2;
2UTA T 0 A_AutomagRefire(1,true);
Goto LeftAltRelease;
2UTA T 1;
2UTA T 2;
2UTA N 2 A_AutomagFire(true,true);
2UTA OP 2;
2UTA T 0 A_AutomagRefire(1,true);
Goto LeftAltRelease;
2UTA T 1;
2UTA T 2;
2UTA Q 2 A_AutomagFire(true,true);
2UTA RS 2;
2UTA T 0 A_AutomagRefire(1,true);
Goto LeftAltRelease;
2UTA T 1;
2UTA T 2;
Goto LeftAltHold+10;
LeftAltRelease:
2UTA TUVWXYZ 1;

View file

@ -111,7 +111,7 @@ Class Betamag : UnrealWeapon
{
Weapon weap = Weapon(invoker);
if ( !weap || !player ) return;
if ( invoker.altaccuracy < 0.05 ) invoker.altaccuracy += 0.01;
if ( invoker.altaccuracy < 0.06 ) invoker.altaccuracy += 0.01;
if ( slave )
{
if ( weap.Ammo1.Amount <= 0 )
@ -234,6 +234,7 @@ Class Betamag : UnrealWeapon
if ( alt ) origin = level.Vec3Offset(origin,-z*2.5+ydir*y*1.5);
else origin = level.Vec3Offset(origin,-z*1.5+ydir*y*2);
double a = FRandom[Betamag](0,360), s = FRandom[Betamag](0,alt?invoker.altaccuracy:0.);
if ( invoker.Amount > 1 ) s = s*2.+FRandom[Betamag](0,0.01);
[x2, y2, z2] = dt_CoordUtil.GetAxes(BulletSlope(),angle,roll);
Vector3 dir = (x2+y2*cos(a)*s+z2*sin(a)*s).unit();
FLineTraceData d;
@ -241,7 +242,7 @@ Class Betamag : UnrealWeapon
UTBulletTrail.DoTrail(self,origin,dir,10000,int((invoker.Amount+alt)**2));
if ( d.HitType == TRACE_HitActor )
{
int dmg = 14;
int dmg = 10;
dmg = d.HitActor.DamageMobj(invoker,self,dmg,'shot',DMG_USEANGLE|DMG_THRUSTLESS,atan2(d.HitDir.y,d.HitDir.x));
double mm = 3000;
if ( FRandom[Betamag](0,1) < 0.2 ) mm *= 5;
@ -284,7 +285,7 @@ Class Betamag : UnrealWeapon
for ( int i=0; i<3; i++ )
{
let s = Spawn("UTViewSmoke",origin);
if ( alt ) UTViewSmoke(s).ofs = (10,ydir,-3);
if ( alt ) UTViewSmoke(s).ofs = (10,1.5*ydir,-3);
else UTViewSmoke(s).ofs = (10,4*ydir,-1);
s.target = self;
s.alpha *= 0.5;
@ -421,63 +422,72 @@ Class Betamag : UnrealWeapon
}
Wait;
Fire:
AUTF A 2
AUTF A 1
{
if ( invoker.Ammo1.Amount <= 0 )
return ResolveState("Reload");
A_BetamagFire();
A_Overlay(-9999,null);
return A_JumpIfNoAmmo("Reload");
return ResolveState(null);
}
AUTF B 2;
Hold:
AUTF C 2 A_BetamagFire();
AUTF DE 2;
AUTF BCD 1;
AUTF E 2;
AUTF F 0 A_PlaySound("betamag/slide",CHAN_ITEM,!Dampener.Active(self)?.3:.03);
AUTF FGHI 2;
AUTF J 0 A_BetamagRefire("Hold");
AUTF J 2;
AUTI A 0;
Goto Idle;
Hold:
AUTF C 2 A_BetamagFire();
AUTF D 2;
Goto Fire+4;
LeftFire:
#### # 10 A_Overlay(-9998,null);
#### # 9 A_Overlay(-9998,null);
2UTI A 0 A_BetamagRefire(1,true);
Goto LeftIdle;
2UTF AB 1;
LeftHold:
2UTF C 2 A_BetamagFire(false,true);
2UTF DE 2;
2UTF A 1 A_BetamagFire(false,true);
2UTF BCD 1;
2UTF E 2;
2UTF F 0 A_PlaySound("betamag/slide",CHAN_7,!Dampener.Active(self)?.3:.03);
2UTF FGHI 2;
2UTF J 0 A_BetamagRefire("LeftHold",true);
2UTF J 2;
2UTI A 0;
Goto LeftIdle;
LeftHold:
2UTF C 2 A_BetamagFire(false,true);
2UTF D 2;
Goto LeftFire+6;
AltFire:
AUTA A 0
{
if ( invoker.Ammo1.Amount <= 0 )
return ResolveState("Reload");
invoker.altaccuracy = 0.08;
A_Overlay(-9999,null);
return A_JumpIfNoAmmo("Reload");
return ResolveState(null);
}
AUTA ABCDEFG 2;
AltHold:
AUTA H 2 A_BetamagFire(true);
AUTA I 2;
AUTA H 1 A_BetamagFire(true);
AUTA I 1;
AUTA J 0 A_PlaySound("betamag/slide",CHAN_ITEM,!Dampener.Active(self)?.3:.03);
AUTA JKLM 2;
AUTA JKLM 1;
AUTA N 0 A_BetamagRefire("AltHold");
AltRelease:
AUTA NOPQ 2;
AUTI A 2;
Goto Idle;
LeftAltFire:
#### # 6 A_Overlay(-9998,null);
#### # 4 A_Overlay(-9998,null);
2UTI A 0 A_BetamagRefire(1,true);
Goto LeftIdle;
2UTA ABCDEFG 2;
LeftAltHold:
2UTA H 2 A_BetamagFire(true,true);
2UTA I 2;
2UTA H 1 A_BetamagFire(true,true);
2UTA I 1;
2UTA J 0 A_PlaySound("betamag/slide",CHAN_7,!Dampener.Active(self)?.3:.03);
2UTA JKLM 2;
2UTA JKLM 1;
2UTA N 0 A_BetamagRefire("LeftAltHold",true);
2UTA NOPQ 2;
2UTI A 2;