diff --git a/Readme.md b/Readme.md index 7bdc21f..4476b4d 100644 --- a/Readme.md +++ b/Readme.md @@ -74,8 +74,6 @@ This mod requires GZDoom 3.7.0 or later. ## Known bugs - - Sometimes the slave enforcer has its psprite "lower" slightly while the main - enforcer is reloading. No idea what causes this (Could be bobbing-related) - Translocator allows telefragging other players in coop (no idea if I can even fix this) - Biorifle sludge doesn't handle 3d floors (especially sloped ones) properly. diff --git a/cvarinfo.txt b/cvarinfo.txt index a35a451..9818139 100644 --- a/cvarinfo.txt +++ b/cvarinfo.txt @@ -28,6 +28,8 @@ server bool flak_classicsshock = false; // classic enhanced shock rifle (no al server bool flak_utmovement = false; // emulate UE1's air/ground movement physics server bool flak_doomspeed = false; // keep Doomguy run speed when using UT movement server bool flak_doomaircontrol = false; // keep Doom's limited air control when using UT movement +server bool flak_tapdodge = true; // enable double tap dodge (may be cheaty for maps that disallow jumping) +server int flak_taptics = 8; // maximum delay in tics between double taps for a successful dodge server bool flak_nobosstelefrag = false; // disable telefragging of boss monsters (useful when translocator is enabled) server bool flak_nowalkdrop = false; // [GLITCHY] don't drop off ledges while holding walk key server bool flak_corpsedamage = false; // [WIP/EXPERIMENTAL] allow corpses to take damage and be gibbed, currently just causes a jump to XDeath until gore system is implemented @@ -35,4 +37,4 @@ server bool flak_swingers = true; // weapon recoil that affects player view server float flak_swingerstrength = 0.5; // strength of visual recoil server bool flak_radboots = true; // jump boots protect against damaging floors (this is to account for the lack of a radsuit) server bool flak_blood = true; // [WIP] use doom tournament blood (disable if using another gore mod) -server bool flak_gibs = false; // [WIP/UNSTABLE] use doom tournament gibbing (disable if using another gore mod) \ No newline at end of file +server bool flak_gibs = false; // [WIP/UNSTABLE] use doom tournament gibbing (disable if using another gore mod) diff --git a/menudef.txt b/menudef.txt index 6633aaf..cadc6e9 100644 --- a/menudef.txt +++ b/menudef.txt @@ -44,6 +44,8 @@ OptionMenu "UTOptionMenu" Option "Doom Player Speed", "flak_doomspeed", "YesNo", "flak_utmovement" Option "Doom Air Control", "flak_doomaircontrol", "YesNo", "flak_utmovement" Option "Walk Disables Dropoff (Glitchy)", "flak_nowalkdrop", "YesNo", "flak_utmovement" + Option "Double Tap Dodge", "flak_tapdodge", "YesNo", "flak_utmovement" + Slider "Double Tap Sensibility In Tics", "flak_taptics", 1, 10, 1, 0 StaticText " " StaticText "HUD Options", "Gold" Option "Show Weapon Bar", "flak_showweapons", "YesNo" diff --git a/zscript/enforcer.zsc b/zscript/enforcer.zsc index a9d4b87..74b6d02 100644 --- a/zscript/enforcer.zsc +++ b/zscript/enforcer.zsc @@ -195,7 +195,7 @@ Class Enforcer : UTWeapon PSprite psp; for ( psp = Owner.player.psprites; psp; psp = psp.next ) { - if ( (psp.Caller == self) && (psp.id == 2) ) psp.Destroy(); + if ( (psp.Caller == self) && ((psp.id == 2) || (psp.id == -9998)) ) psp.Destroy(); slaveactive = false; slavedown = false; } @@ -253,12 +253,22 @@ Class Enforcer : UTWeapon if ( !weap || !player ) return; if ( player.cmd.buttons&BT_ATTACK && !player.ReadyWeapon.bAltFire ) { + if ( flak_enforcerreload && (invoker.slaveclipcount <= 0) && (weap.Ammo1.Amount > 0) ) + { + player.setpsprite(2,ResolveState("LeftReload")); + return; + } invoker.slaverefire = 0; invoker.slavealtfire = false; player.setpsprite(2,ResolveState("LeftFire")); } else if ( player.cmd.buttons&BT_ALTATTACK && player.ReadyWeapon.bAltFire ) { + if ( flak_enforcerreload && (invoker.slaveclipcount <= 0) && (weap.Ammo1.Amount > 0) ) + { + player.setpsprite(2,ResolveState("LeftReload")); + return; + } invoker.slaverefire = 0; invoker.slavealtfire = true; player.setpsprite(2,ResolveState("LeftAltFire")); @@ -455,13 +465,13 @@ Class Enforcer : UTWeapon invoker.slaveactive = false; A_Overlay(2,"LeftDeselect"); } - else if ( flak_enforcerreload && (invoker.slavereload || (invoker.slaveclipcount < 0)) ) A_Overlay(2,"LeftReload"); + else if ( flak_enforcerreload && invoker.slavereload ) A_Overlay(2,"LeftReload"); else if ( invoker.slavedown ) A_Overlay(2,"LeftDeselect"); else A_LeftWeaponReady(); } Wait; Fire: - ENFF A 0 A_Overlay(-9999,"Null"); + ENFF A 0 A_Overlay(-9999,null); Hold: ENFF A 0 A_EnforcerFire(); ENFF ABCDEFGHIJ 1; @@ -471,7 +481,7 @@ Class Enforcer : UTWeapon ENFI A 0; Goto Idle; LeftFire: - 2NFI A 0 A_Overlay(-9998,"Null"); + 2NFI A 0 A_Overlay(-9998,null); 2NFI A 5; 2NFI A 0 A_EnforcerRefire(1,true); Goto LeftIdle; @@ -484,7 +494,7 @@ Class Enforcer : UTWeapon 2NFI A 0; Goto LeftIdle; AltFire: - ENFA A 0 A_Overlay(-9999,"Null"); + ENFA A 0 A_Overlay(-9999,null); ENFA ABCDEF 1; AltHold: ENFA G 0 A_EnforcerFire(true); @@ -494,7 +504,7 @@ Class Enforcer : UTWeapon ENFA OPQRSTU 1; Goto Idle; LeftAltFire: - 2NFI A 0 A_Overlay(-9998,"Null"); + 2NFI A 0 A_Overlay(-9998,null); 2NFI A 5; 2NFI A 0 A_EnforcerRefire(1,true); Goto LeftIdle; @@ -509,13 +519,14 @@ Class Enforcer : UTWeapon Reload: ENFR A 0 { - invoker.slavereload = ((player.cmd.buttons&BT_RELOAD)&&(invoker.slaveclipcount < min(20,invoker.Ammo1.Amount)))||(invoker.slaveclipcount <= 0); + invoker.slavereload = ((player.cmd.buttons&BT_RELOAD)&&invoker.slaveactive&&(invoker.slaveclipcount < min(20,invoker.Ammo1.Amount)))||(invoker.slaveclipcount <= 0); return A_JumpIf(invoker.clipcount>=min(20,invoker.Ammo1.Amount),"Idle"); } ENFR A 0 { invoker.clipcount = Min(20,invoker.Ammo1.Amount); - A_Overlay(-9999,"Null"); + A_Overlay(-9999,null); + A_WeaponOffset(0,32); // fix sudden psprite lowering A_PlaySound("enforcer/click",CHAN_WEAPON); } ENFR ABCDEFGHIJKLMNOPQRSTUVWXYZ 1; @@ -528,7 +539,7 @@ Class Enforcer : UTWeapon { invoker.slaveclipcount = Min(20,invoker.Ammo1.Amount); invoker.slavereload = false; - A_Overlay(-9998,"Null"); + A_Overlay(-9998,null); A_PlaySound("enforcer/click",CHAN_6); } 2NFR ABCDEFGHIJKLMNOPQRSTUVWXYZ 1; @@ -538,7 +549,7 @@ Class Enforcer : UTWeapon Goto LeftReady; Deselect: ENFI A 1 { invoker.slavedown = true; } - ENFD A 0 A_Overlay(-9999,"Null"); + ENFD A 0 A_Overlay(-9999,null); ENFD A 0 A_JumpIf(invoker.slaveactive,"Deselect"); ENFD ABDEGHJK 1; ENFD L 1 A_Lower(int.max); @@ -546,7 +557,7 @@ Class Enforcer : UTWeapon LeftDeselect: 2NFD A 0 { - A_Overlay(-9998,"Null"); + A_Overlay(-9998,null); invoker.slaveactive = false; } 2NFD ABDEGHJK 1; diff --git a/zscript/utcommon.zsc b/zscript/utcommon.zsc index fdd8ff0..4a24757 100644 --- a/zscript/utcommon.zsc +++ b/zscript/utcommon.zsc @@ -43,8 +43,6 @@ Class UTPlayer : DoomPlayer Player.DamageScreenColor "FF 00 00"; Player.ViewHeight 46; Player.GruntSpeed 20; - MaxDropoffHeight 18; - MaxStepHeight 18; +NOMENU; UTPlayer.DollType DOLL_Male; } @@ -286,7 +284,7 @@ Class UTPlayer : DoomPlayer if ( fm ) { int clk = abs(gametic-last_fm_tap); - if ( (clk < 8) && (last_fm*fm == 0) && (last_tap_fm*fm>0) ) + if ( (clk < flak_taptics) && (last_fm*fm == 0) && (last_tap_fm*fm>0) ) dodge += RotateVector((fm,0),angle).unit(); if ( !last_fm && (last_jump_held < gametic-1) ) { @@ -298,7 +296,7 @@ Class UTPlayer : DoomPlayer if ( sm ) { int clk = abs(gametic-last_sm_tap); - if ( (clk < 8) && (last_sm*sm == 0) && (last_tap_sm*sm>0) ) + if ( (clk < flak_taptics) && (last_sm*sm == 0) && (last_tap_sm*sm>0) ) dodge += RotateVector((0,-sm),angle).unit(); if ( !last_sm && (last_jump_held < gametic-1) ) { @@ -309,7 +307,7 @@ Class UTPlayer : DoomPlayer last_sm = sm; if ( !bNoGravity && player.onground && (waterlevel < 2) ) { - if ( dodge.length() > 0 ) + if ( flak_tapdodge && (dodge.length() > 0) ) { if ( flak_doomspeed ) vel += dodge.unit()*(groundspeed_doomish*1.5)/TICRATE; else vel += dodge.unit()*(groundspeed*1.5)/TICRATE;