diff --git a/GunLore.md b/GunLore.md index c7953be..35875ab 100644 --- a/GunLore.md +++ b/GunLore.md @@ -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. diff --git a/Readme.md b/Readme.md index 64ae3c6..ff1502b 100644 --- a/Readme.md +++ b/Readme.md @@ -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 diff --git a/shaders/glsl/MeshEnviroMapMasked_AmbientGlow.fp b/shaders/glsl/MeshEnviroMapMasked_AmbientGlow.fp index c92719f..a43b0e5 100644 --- a/shaders/glsl/MeshEnviroMapMasked_AmbientGlow.fp +++ b/shaders/glsl/MeshEnviroMapMasked_AmbientGlow.fp @@ -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); diff --git a/zscript/automag.zsc b/zscript/automag.zsc index 3f08c10..32c63dd 100644 --- a/zscript/automag.zsc +++ b/zscript/automag.zsc @@ -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; diff --git a/zscript/betamag.zsc b/zscript/betamag.zsc index 7431a80..24f076f6 100644 --- a/zscript/betamag.zsc +++ b/zscript/betamag.zsc @@ -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;