From fae4f6d50bc2f2a3379b78d8cb33fb43419077d4 Mon Sep 17 00:00:00 2001 From: Marisa Kirisame Date: Mon, 16 Sep 2019 00:38:38 +0200 Subject: [PATCH] Partially implemented Stunner and Impaler (very unfinished). Switched Impaler fire sound to something more appropriate (proto Skaarj fire). Add slot priorities to all weapons, final weapons come first. Adjust hud behavior to properly draw ammo bars by the order of their weapons. --- gldefs.txt | 4 + modeldef.impaler | 208 +++++++++++++++++++++++++++++++++++ modeldef.stunner | 135 +++++++++++++++++++++++ models/Impaler_d.3d | Bin 3024 -> 3024 bytes shaders/glsl/ElecFX.fp | 22 ++++ sndinfo.txt | 19 ++++ sounds/ImpalerF.ogg | Bin 9723 -> 9328 bytes zscript.txt | 18 +-- zscript/asmd.zsc | 1 + zscript/automag.zsc | 1 + zscript/betamag.zsc | 1 + zscript/biggun.zsc | 1 + zscript/bonesaw.zsc | 1 + zscript/dispersionpistol.zsc | 6 +- zscript/flamegun.zsc | 1 + zscript/gatling.zsc | 1 + zscript/impaler.zsc | 149 +++++++++++++++++++++++++ zscript/napalm.zsc | 1 + zscript/olsmp.zsc | 1 + zscript/peacemaker.zsc | 1 + zscript/quadshot.zsc | 1 + zscript/razorjack.zsc | 1 + zscript/rifle.zsc | 1 + zscript/stinger.zsc | 1 + zscript/stunner.zsc | 105 +++++++++++++++++- zscript/ubiorifle.zsc | 1 + zscript/ueightball.zsc | 1 + zscript/uflakcannon.zsc | 1 + zscript/uminigun.zsc | 1 + zscript/unrealcommon.zsc | 68 +++++++++++- zscript/utranslocator.zsc | 3 +- 31 files changed, 738 insertions(+), 17 deletions(-) create mode 100644 shaders/glsl/ElecFX.fp diff --git a/gldefs.txt b/gldefs.txt index ad8f228..d7ec01a 100644 --- a/gldefs.txt +++ b/gldefs.txt @@ -775,6 +775,10 @@ HardwareShader Texture "models/Glass2.png" Texture "masktex" "models/Glass2_m.png" Texture "envtex" "models/NyLeve_env.png" } +HardwareShader Texture "models/ElecFX.png" +{ + Shader "shaders/glsl/ElecFX.fp" +} // PP shaders HardwareShader PostProcess scene { diff --git a/modeldef.impaler b/modeldef.impaler index 1d935f9..c20753c 100644 --- a/modeldef.impaler +++ b/modeldef.impaler @@ -41,3 +41,211 @@ Model "Impaler" ROTATING FrameIndex IMPP A 1 0 } + +Model "Impaler" +{ + Path "models" + Model 2 "Impaler_d.3d" + SurfaceSkin 2 1 "JImpale1.png" + Scale 0.2 -0.2 0.2 + AngleOffset 180 + Offset 8 -15 -12 + DONTCULLBACKFACES + + // GemUp + FrameIndex IMGS A 2 42 + FrameIndex IMGS B 2 43 + FrameIndex IMGS C 2 44 + FrameIndex IMGS D 2 45 + FrameIndex IMGS E 2 46 + // GemIdle + FrameIndex IMGI A 2 47 + FrameIndex IMGI B 2 48 + FrameIndex IMGI C 2 49 + FrameIndex IMGI D 2 50 + FrameIndex IMGI E 2 51 + FrameIndex IMGI F 2 52 + FrameIndex IMGI G 2 53 + FrameIndex IMGI H 2 54 + // GemDown + FrameIndex IMGD A 2 0 + FrameIndex IMGD B 2 1 + FrameIndex IMGD C 2 2 + FrameIndex IMGD D 2 3 + FrameIndex IMGD E 2 4 + // GemAltFire + FrameIndex IMGA A 2 55 + FrameIndex IMGA B 2 56 + FrameIndex IMGA C 2 57 + FrameIndex IMGA D 2 58 + FrameIndex IMGA E 2 59 + FrameIndex IMGA F 2 60 + FrameIndex IMGA G 2 61 + FrameIndex IMGA H 2 62 + // GemAltHold + FrameIndex IMGA I 2 63 + FrameIndex IMGA J 2 64 + FrameIndex IMGA K 2 65 + FrameIndex IMGA L 2 66 + FrameIndex IMGA M 2 67 + FrameIndex IMGA N 2 68 + FrameIndex IMGA O 2 69 + FrameIndex IMGA P 2 70 + // GemAltRelease + FrameIndex IMGA Q 2 71 + FrameIndex IMGA R 2 72 + FrameIndex IMGA S 2 73 + FrameIndex IMGA T 2 74 + FrameIndex IMGA U 2 75 + FrameIndex IMGA V 2 76 + FrameIndex IMGA W 2 77 + FrameIndex IMGA X 2 78 +} + +Model "Impaler" +{ + Path "models" + Model 3 "Impaler_d.3d" + SurfaceSkin 3 2 "ElecFX.png" + Scale 0.2 -0.2 0.2 + AngleOffset 180 + Offset 8 -15 -12 + DONTCULLBACKFACES + + // GemUp + FrameIndex IMZS A 3 42 + FrameIndex IMZS B 3 43 + FrameIndex IMZS C 3 44 + FrameIndex IMZS D 3 45 + FrameIndex IMZS E 3 46 + // GemIdle + FrameIndex IMZI A 3 47 + FrameIndex IMZI B 3 48 + FrameIndex IMZI C 3 49 + FrameIndex IMZI D 3 50 + FrameIndex IMZI E 3 51 + FrameIndex IMZI F 3 52 + FrameIndex IMZI G 3 53 + FrameIndex IMZI H 3 54 + // GemDown + FrameIndex IMZD A 3 0 + FrameIndex IMZD B 3 1 + FrameIndex IMZD C 3 2 + FrameIndex IMZD D 3 3 + FrameIndex IMZD E 3 4 + // GemAltFire + FrameIndex IMZA A 3 55 + FrameIndex IMZA B 3 56 + FrameIndex IMZA C 3 57 + FrameIndex IMZA D 3 58 + FrameIndex IMZA E 3 59 + FrameIndex IMZA F 3 60 + FrameIndex IMZA G 3 61 + FrameIndex IMZA H 3 62 + // GemAltHold + FrameIndex IMZA I 3 63 + FrameIndex IMZA J 3 64 + FrameIndex IMZA K 3 65 + FrameIndex IMZA L 3 66 + FrameIndex IMZA M 3 67 + FrameIndex IMZA N 3 68 + FrameIndex IMZA O 3 69 + FrameIndex IMZA P 3 70 + // GemAltRelease + FrameIndex IMZA Q 3 71 + FrameIndex IMZA R 3 72 + FrameIndex IMZA S 3 73 + FrameIndex IMZA T 3 74 + FrameIndex IMZA U 3 75 + FrameIndex IMZA V 3 76 + FrameIndex IMZA W 3 77 + FrameIndex IMZA X 3 78 +} + +Model "Impaler" +{ + Path "models" + Model 0 "Impaler_d.3d" + SurfaceSkin 0 0 "JImpale1.png" + Scale 0.2 -0.2 0.2 + AngleOffset 180 + Offset 8 -15 -12 + + // GemToggle + FrameIndex IMPG A 0 0 + FrameIndex IMPG B 0 1 + FrameIndex IMPG C 0 2 + FrameIndex IMPG D 0 3 + FrameIndex IMPG E 0 4 + // Down + FrameIndex IMPD A 0 5 + FrameIndex IMPD B 0 6 + FrameIndex IMPD C 0 7 + FrameIndex IMPD D 0 8 + FrameIndex IMPD E 0 9 + FrameIndex IMPD F 0 10 + // Select + FrameIndex IMPS A 0 10 + FrameIndex IMPS B 0 11 + FrameIndex IMPS C 0 12 + FrameIndex IMPS D 0 13 + FrameIndex IMPS E 0 14 + FrameIndex IMPS F 0 15 + // Idle + FrameIndex IMPI A 0 15 + FrameIndex IMPI B 0 16 + FrameIndex IMPI C 0 17 + FrameIndex IMPI D 0 18 + FrameIndex IMPI E 0 19 + FrameIndex IMPI F 0 20 + FrameIndex IMPI G 0 21 + FrameIndex IMPI H 0 22 + // Fire + FrameIndex IMPF A 0 23 + FrameIndex IMPF B 0 24 + FrameIndex IMPF C 0 25 + FrameIndex IMPF D 0 26 + FrameIndex IMPF E 0 27 + FrameIndex IMPF F 0 28 + FrameIndex IMPF G 0 29 + FrameIndex IMPF H 0 30 + FrameIndex IMPF I 0 31 + // Stab + FrameIndex IMPM A 0 32 + FrameIndex IMPM B 0 33 + FrameIndex IMPM C 0 34 + FrameIndex IMPM D 0 35 + FrameIndex IMPM E 0 36 + FrameIndex IMPM F 0 37 + FrameIndex IMPM G 0 38 + FrameIndex IMPM H 0 39 + FrameIndex IMPM I 0 40 + FrameIndex IMPM J 0 41 + // AltFire + FrameIndex IMPA A 0 55 + FrameIndex IMPA B 0 56 + FrameIndex IMPA C 0 57 + FrameIndex IMPA D 0 58 + FrameIndex IMPA E 0 59 + FrameIndex IMPA F 0 60 + FrameIndex IMPA G 0 61 + FrameIndex IMPA H 0 62 + // AltHold + FrameIndex IMPA I 0 63 + FrameIndex IMPA J 0 64 + FrameIndex IMPA K 0 65 + FrameIndex IMPA L 0 66 + FrameIndex IMPA M 0 67 + FrameIndex IMPA N 0 68 + FrameIndex IMPA O 0 69 + FrameIndex IMPA P 0 70 + // AltRelease + FrameIndex IMPA Q 0 71 + FrameIndex IMPA R 0 72 + FrameIndex IMPA S 0 73 + FrameIndex IMPA T 0 74 + FrameIndex IMPA U 0 75 + FrameIndex IMPA V 0 76 + FrameIndex IMPA W 0 77 + FrameIndex IMPA X 0 78 +} diff --git a/modeldef.stunner b/modeldef.stunner index 3ee0b2c..4dddc2b 100644 --- a/modeldef.stunner +++ b/modeldef.stunner @@ -12,3 +12,138 @@ Model "Stunner" ROTATING FrameIndex STNP A 1 0 } + +Model "Stunner" +{ + Path "models" + Model 2 "Stunner_d.3d" + SurfaceSkin 2 0 "Stunner.png" + AngleOffset -90 + RollOffset -5 + Scale 0.2 -0.2 0.2 + Offset 0 -20 -12 + DONTCULLBACKFACES + + // Sparks + FrameIndex STFF A 2 3 + FrameIndex STFF B 2 4 + FrameIndex STFF C 2 5 + FrameIndex STFF D 2 6 + FrameIndex STFF E 2 7 + FrameIndex STFF F 2 8 + FrameIndex STFF G 2 9 + FrameIndex STFF H 2 10 + FrameIndex STFF I 2 11 + FrameIndex STFF J 2 12 + FrameIndex STFF K 2 13 + FrameIndex STFF L 2 14 + FrameIndex STFF M 2 15 + FrameIndex STFF N 2 16 + FrameIndex STFF O 2 17 + FrameIndex STFF P 2 18 + FrameIndex STFF Q 2 19 + FrameIndex STFF R 2 20 + FrameIndex STFF S 2 21 +} + +Model "Stunner" +{ + Path "models" + Model 0 "Stunner_d.3d" + SurfaceSkin 0 1 "Stunner.png" + AngleOffset -90 + RollOffset -5 + Scale 0.2 -0.2 0.2 + Offset 0 -20 -12 + + // Idle + FrameIndex STNI A 0 1 + // Fire + FrameIndex STNF A 0 2 + FrameIndex STNF B 0 3 + FrameIndex STNF C 0 4 + FrameIndex STNF D 0 5 + FrameIndex STNF E 0 6 + FrameIndex STNF F 0 7 + FrameIndex STNF G 0 8 + FrameIndex STNF H 0 9 + FrameIndex STNF I 0 10 + FrameIndex STNF J 0 11 + FrameIndex STNF K 0 12 + FrameIndex STNF L 0 13 + FrameIndex STNF M 0 14 + FrameIndex STNF N 0 15 + FrameIndex STNF O 0 16 + FrameIndex STNF P 0 17 + FrameIndex STNF Q 0 18 + FrameIndex STNF R 0 19 + FrameIndex STNF S 0 20 + FrameIndex STNF T 0 21 + // Release + FrameIndex STNR A 0 22 + FrameIndex STNR B 0 23 + FrameIndex STNR C 0 24 + // Hold + FrameIndex STNH A 0 25 + FrameIndex STNH B 0 26 + FrameIndex STNH C 0 27 + FrameIndex STNH D 0 28 + FrameIndex STNH E 0 29 + FrameIndex STNH F 0 30 + FrameIndex STNH G 0 31 + FrameIndex STNH H 0 32 + FrameIndex STNH I 0 33 + FrameIndex STNH J 0 34 + FrameIndex STNH K 0 35 + FrameIndex STNH L 0 36 + FrameIndex STNH M 0 37 + FrameIndex STNH N 0 38 + FrameIndex STNH O 0 39 + FrameIndex STNH P 0 40 + FrameIndex STNH Q 0 41 + FrameIndex STNH R 0 42 + // Down + FrameIndex STND A 0 45 + FrameIndex STND B 0 46 + FrameIndex STND C 0 47 + FrameIndex STND D 0 48 + FrameIndex STND E 0 49 + FrameIndex STND F 0 50 + FrameIndex STND G 0 51 + FrameIndex STND H 0 52 + FrameIndex STND I 0 53 + FrameIndex STND J 0 54 + FrameIndex STND K 0 55 + FrameIndex STND L 0 56 + // Select + FrameIndex STNS A 0 56 + FrameIndex STNS B 0 57 + FrameIndex STNS C 0 58 + FrameIndex STNS D 0 59 + FrameIndex STNS E 0 60 + FrameIndex STNS F 0 61 + FrameIndex STNS G 0 62 + FrameIndex STNS H 0 63 + FrameIndex STNS I 0 64 + FrameIndex STNS J 0 65 + FrameIndex STNS K 0 66 + FrameIndex STNS L 0 67 + FrameIndex STNS M 0 68 + FrameIndex STNS N 0 69 + FrameIndex STNS O 0 70 + FrameIndex STNS P 0 71 + FrameIndex STNS Q 0 72 + FrameIndex STNS R 0 73 + FrameIndex STNS S 0 74 + FrameIndex STNS T 0 75 + FrameIndex STNS U 0 76 + FrameIndex STNS V 0 77 + FrameIndex STNS W 0 78 + FrameIndex STNS X 0 79 + // Release2 + FrameIndex STR2 A 0 82 + FrameIndex STR2 B 0 83 + FrameIndex STR2 C 0 84 + FrameIndex STR2 D 0 85 + FrameIndex STR2 E 0 86 +} \ No newline at end of file diff --git a/models/Impaler_d.3d b/models/Impaler_d.3d index 0215a660a57c520f4868525f59f25c1dbae9f5e4..1bea2d1c1f1535ede8d824afc0ada85b86bf1d3f 100644 GIT binary patch delta 775 zcmca0enEW0HI8}#hG({aL*AP)GVn8mG4L^f_`4)FDKIh!Fz_*iFbFW*ciW_J!xzNo z2g~1gdu9uf4`tv7%l{2|X3NN+%@79WAK~960pja0XoLCh&5rOx_&yBU3<3=A&3@<} z;b&yfVF+dLsRs-E4f&zV$l%2g2v%^GV<`hjffqwCLm-0y!�i3`-dp8N3;S8N3(- z82&0>VK~bH;)jAAcs~4Z2*`mx3|?UUKXlJ>fb{z?c!Smd(EY0nQt!hM%HYi)!02Aj7_;s`&;yfB79a0u>_Sjqqj z!3c)rdWL8QA%^<<)Bmr(&%_YHkirlS=GV*n%QG=VGK4cEF$gjE-}jeSzYpR^faU$~ z*WZW8Co@EV<z3`0Cv!FBn=3?KzD42cZ!3_=Xo<^RjSW?*87Wk_U*VGv^YcmKcq zb$Jj!8SFrY`@;W04vb@nf#|<~T^^)Ajv*GT{`&oY_d)987?K%cLFV0m{r}&6CWeH1 zhH$V2>hk{b)(lJxi3|x~K7+ivyfB!b#E`%s#K0i0eqUXli6Mz09L!e-g$S6R2sTjt wK7%~NeUN-ILnMO`gZh2z|Ni%x7*ZIbz~xodFbr0Mi)4wg3PC delta 775 zcmca0enEW0HI8}%hG({aL*AP)GVn8mG4L^f_`4)FDKIh!Fz_*iFc>i0ciW_J!xzNo z2g~1gdu9uf4`tv7%l{2|X3NN+%@79WAK~960pja0XoLCh&5rOx_&yBU3VK~bH;)jAAcs~4Z2*`mx3|?UUKXlJ>fb{z?c!Smd(EY0nQt!hM%HYjl!0uu$uU?2Aj7_;s`&;yfB79a0u>_Sjqqj z!3c)rdWL8QBZm6>)Bmr(&%_YHkirlS=GV*n%QG=VGK4cEF&HuU-}jeSzYpR^faU$~ z*WZW8Co@EV<z3`0Cv!FBn=3?KzD42cZ!3`Pvs<^RjSW?*87Wk_U*VK8F&cmKcq zb$Jj!8SFrY`@;W04vb@nf#|<~T^^)Ajv*GT{`&oY_d)987?K%cLFV0m{r}&6CWeH1 zhH$V2>hk{b)(lJxi3|x~K7+ivyfB!b#E`&X#K0i0eqUXli6Mz09L!e-g$S6R2sTjt wK7%~NeUN-ILnMO{gZh2z|Ni%x7*ZIbz~xodFbr0Pdg2wg3PC diff --git a/shaders/glsl/ElecFX.fp b/shaders/glsl/ElecFX.fp new file mode 100644 index 0000000..b8f1dbb --- /dev/null +++ b/shaders/glsl/ElecFX.fp @@ -0,0 +1,22 @@ +vec4 ProcessTexel() +{ + vec2 uv = vTexCoord.st; + uv.x += 1.; + float ang = timer*5.; + vec2 uv2 = vec2(uv.x*cos(ang)-uv.y*sin(ang),uv.y*cos(ang)+uv.x*sin(ang))*1.3; + vec4 col = getTexel(fract(uv2)); + uv.y -= 2.; + ang = timer*3.; + uv2 = vec2(uv.x*cos(ang)-uv.y*sin(ang),uv.y*cos(ang)+uv.x*sin(ang))*1.5; + col += getTexel(fract(uv2)); + uv.x -= 3.; + ang = timer*4.; + uv2 = vec2(uv.x*cos(ang)-uv.y*sin(ang),uv.y*cos(ang)+uv.x*sin(ang))*1.6; + col += getTexel(fract(uv2)); + uv.y += 4.; + ang = timer*2.; + uv2 = vec2(uv.x*cos(ang)-uv.y*sin(ang),uv.y*cos(ang)+uv.x*sin(ang))*1.2; + col += getTexel(fract(uv2)); + col *= .5; + return col; +} diff --git a/sndinfo.txt b/sndinfo.txt index b8f5478..56a5328 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -265,6 +265,25 @@ peace/fly brufly1 telehand/throw peacethr +stun/select stunsel +stun/charge stunchrg +stun/fire stunfire +stun/hit stunhit + +impaler/select impsel +impaler/gem impidle +impaler/gemdown impdown +impaler/fire impalerf +impaler/stab1 impstab1 +impaler/stab2 impstab2 +impaler/stab3 impstab3 +$random impaler/stab { impaler/stab1 impaler/stab2 impaler/stab3 } +impaler/flesh impflesh +impaler/wall impwall +impaler/altfire impboltl +impaler/hit imphit +impaler/beam ele04 + translator/event transa3 detector/start detact diff --git a/sounds/ImpalerF.ogg b/sounds/ImpalerF.ogg index b5f25ae4698a3564ad10ad1f5a3a461385823692..78c0fdd3ba08c385a3aacdc35e3acbcf47ef90a2 100644 GIT binary patch delta 5709 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 nzlxR^Y+QU-QuF;r$E%L}h+y delta 6107 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 lyfN0SyzcT(XL 0 ) flags |= WRF_ALLOWRELOAD; + if ( weap.Ammo2.Amount <= 0 ) flags |= WRF_NOSECONDARY; + A_WeaponReady(flags); + } + Wait; + Idle: + IMPI A 0 A_Overlay(-9999,"Dummy"); + IMPI ABCDEFGH 10; + Goto Idle+1; + Melee: + IMPM A 0 A_Overlay(-9999,"Null"); + IMPM ABCDEFGHIJ 2; + Goto Idle; + Fire: + IMPF A 0 + { + if ( !invoker.HasGem ) + return ResolveState("Melee"); + A_Overlay(-9999,"Null"); + A_Overlay(-3,"Null"); + A_Overlay(-2,"Null"); + A_PlaySound("impaler/fire",CHAN_WEAPON); + invoker.HasGem = false; + return ResolveState(null); + } + IMPF ABCDEFGHI 2; + IMPI A 0 A_JumpIfNoAmmo("Idle"); + Goto Reload; + AltFire: + IMPA A 0 + { + if ( !invoker.HasGem ) + return ResolveState("Melee"); + A_Overlay(-9999,"Null"); + A_Overlay(-3,"GemAltFire"); + A_Overlay(-2,"ZapAltFire"); + A_PlaySound("impaler/altfire",CHAN_WEAPON,looping:true); + return ResolveState(null); + } + IMPA ABCDEFGH 2; + Goto AltHold; + AltHold: + IMPA IJKLMNOP 2; + Goto AltRelease; + AltRelease: + IMPA Q 0 + { + A_Overlay(-3,"GemAltRelease"); + A_Overlay(-2,"ZapAltRelease"); + A_PlaySound("impaler/gem",CHAN_WEAPON,looping:true); + } + IMPA QRSTUVWX 2; + Goto Idle; + Reload: + IMPG A 0 + { + A_Overlay(-9999,"Null"); + invoker.HasGem = !invoker.HasGem; + if ( invoker.HasGem ) + { + A_Overlay(-3,"GemUp"); + A_Overlay(-2,"ZapUp"); + A_OverlayFlags(-2,PSPF_RenderStyle|PSPF_Alpha,true); + A_OverlayRenderStyle(-2,STYLE_Add); + A_PlaySound("impaler/gem",CHAN_WEAPON,looping:true); + } + else + { + A_Overlay(-3,"GemDown"); + A_Overlay(-2,"ZapDown"); + A_PlaySound("impaler/gemdown",CHAN_WEAPON); + } + } + IMPG ABCDE 2; + Goto Idle; + Deselect: + IMPD A 0 A_Overlay(-9999,"Null"); + IMPD A 0 A_JumpIf(!invoker.HasGem,"FullDeselect"); + IMPG A 0 + { + invoker.HasGem = false; + A_Overlay(-3,"GemDown"); + A_Overlay(-2,"ZapDown"); + A_PlaySound("impaler/gemdown",CHAN_WEAPON); + } + IMPG ABCDE 2; + Goto FullDeselect; + FullDeselect: + IMPD ABCDEF 2; + IMPD F 1 A_Lower(int.max); + Wait; + GemUp: + IMGS ABCDE 2; + Goto GemIdle; + GemIdle: + IMGI ABCDEFGH 10; + Loop; + GemDown: + IMGD ABCDE 2; + Stop; + GemAltFire: + IMGA ABCDEFGH 2; + Goto GemAltHold; + GemAltHold: + IMGA IJKLMNOP 2; + Loop; + GemAltRelease: + IMGA QRSTUVWX 2; + Goto GemIdle; + ZapUp: + IMZS ABCDE 2 Bright; + Goto ZapIdle; + ZapIdle: + IMZI ABCDEFGH 10 Bright; + Loop; + ZapDown: + IMZD ABCDE 2 Bright; + Stop; + ZapAltFire: + IMZA ABCDEFGH 2 Bright; + Goto ZapAltHold; + ZapAltHold: + IMZA IJKLMNOP 2 Bright; + Loop; + ZapAltRelease: + IMZA QRSTUVWX 2 Bright; + Goto ZapIdle; } } diff --git a/zscript/napalm.zsc b/zscript/napalm.zsc index 8dfa203..d6c85ea 100644 --- a/zscript/napalm.zsc +++ b/zscript/napalm.zsc @@ -36,6 +36,7 @@ Class UFlamethrower : UnrealWeapon Weapon.UpSound "flamet/select"; Weapon.SlotNumber 6; Weapon.SelectionOrder 4; + Weapon.SlotPriority 0.9; Weapon.AmmoType "FlameAmmo"; Weapon.AmmoUse 1; Weapon.AmmoType2 "FlameAmmo"; diff --git a/zscript/olsmp.zsc b/zscript/olsmp.zsc index a867a72..42a41e0 100644 --- a/zscript/olsmp.zsc +++ b/zscript/olsmp.zsc @@ -221,6 +221,7 @@ Class OLSMP : UnrealWeapon Weapon.UpSound "automag/select"; Weapon.SlotNumber 0; Weapon.SelectionOrder 9; + Weapon.SlotPriority 0.95; Weapon.AmmoType "OLSMPAmmo"; Weapon.AmmoUse 1; Weapon.AmmoType2 "OLSMPAmmo"; diff --git a/zscript/peacemaker.zsc b/zscript/peacemaker.zsc index b030bc2..7fe27a5 100644 --- a/zscript/peacemaker.zsc +++ b/zscript/peacemaker.zsc @@ -446,6 +446,7 @@ Class Peacemaker : UnrealWeapon Weapon.UpSound "peace/select"; Weapon.SlotNumber 8; Weapon.SelectionOrder 1; + Weapon.SlotPriority 0.9; Weapon.AmmoType "PeaceAmmo"; Weapon.AmmoUse 1; Weapon.AmmoType2 "PeaceAmmo"; diff --git a/zscript/quadshot.zsc b/zscript/quadshot.zsc index 2fc0805..aea3734 100644 --- a/zscript/quadshot.zsc +++ b/zscript/quadshot.zsc @@ -249,6 +249,7 @@ Class QuadShot : UnrealWeapon Weapon.UpSound "quadshot/select"; Weapon.SlotNumber 3; Weapon.SelectionOrder 2; + Weapon.SlotPriority 0.9; Weapon.AmmoType "UShells"; Weapon.AmmoUse 1; Weapon.AmmoType2 "UShells"; diff --git a/zscript/razorjack.zsc b/zscript/razorjack.zsc index 1c87d7c..dc765e0 100644 --- a/zscript/razorjack.zsc +++ b/zscript/razorjack.zsc @@ -246,6 +246,7 @@ Class Razorjack : UnrealWeapon Weapon.UpSound "ripper/select"; Weapon.SlotNumber 7; Weapon.SelectionOrder 7; + Weapon.SlotPriority 1; Weapon.AmmoType "RazorAmmo"; Weapon.AmmoUse 1; Weapon.AmmoType2 "RazorAmmo"; diff --git a/zscript/rifle.zsc b/zscript/rifle.zsc index 898c871..d968bd4 100644 --- a/zscript/rifle.zsc +++ b/zscript/rifle.zsc @@ -224,6 +224,7 @@ Class URifle : UnrealWeapon Weapon.UpSound "sniper/select"; Weapon.SlotNumber 9; Weapon.SelectionOrder 9; + Weapon.SlotPriority 1; Weapon.AmmoType "URifleAmmo"; Weapon.AmmoUse 1; Weapon.AmmoType2 "URifleAmmo"; diff --git a/zscript/stinger.zsc b/zscript/stinger.zsc index c70f60f..53abc0b 100644 --- a/zscript/stinger.zsc +++ b/zscript/stinger.zsc @@ -494,6 +494,7 @@ Class Stinger : UnrealWeapon Weapon.UpSound "stinger/select"; Weapon.SlotNumber 3; Weapon.SelectionOrder 7; + Weapon.SlotPriority 1; Weapon.AmmoType "StingerAmmo"; Weapon.AmmoUse 1; Weapon.AmmoType2 "StingerAmmo"; diff --git a/zscript/stunner.zsc b/zscript/stunner.zsc index 33149d0..19ef1c1 100644 --- a/zscript/stunner.zsc +++ b/zscript/stunner.zsc @@ -14,8 +14,7 @@ Class StunnerAmmo : Ammo { Super.Tick(); if ( !Owner ) return; - if ( Amount < 10 ) rechargespeed = 1.1; - else rechargespeed = 0.11*Amount; + rechargespeed = max(2.,.2*Amount); rechargephase += 1./rechargespeed; if ( rechargephase < 7 ) return; rechargephase = 0; @@ -33,6 +32,66 @@ Class StunProj : Actor Class Stunner : UnrealWeapon { + double chargesize, count; + bool bCharging; + + action void A_StunnerFire() + { + Weapon weap = Weapon(invoker); + if ( !weap ) return; + A_WeaponOffset(0,32); + invoker.bCharging = false; + if ( self is 'UTPlayer' ) + UTPlayer(self).PlayAttacking3(); + StunnerAmmo(weap.Ammo1).rechargephase = 0; + A_PlaySound("stun/fire",CHAN_WEAPON,Dampener.Active(self)?.4:1.); + double mult = Amplifier.GetMult(self,int(invoker.ChargeSize*50)+50); + invoker.FireEffect(); + A_Overlay(-2,"Null"); + } + action void A_BeginCharge() + { + let weap = Weapon(invoker); + invoker.bCharging = true; + weap.DepleteAmmo(weap.bAltFire,true,1); + invoker.count = 0; + invoker.chargesize = .6; + A_PlaySound("stun/charge",CHAN_WEAPON,Dampener.Active(self)?.15:1.); + A_Overlay(-2,"Sparks"); + A_OverlayFlags(-2,PSPF_RenderStyle,true); + A_OverlayRenderStyle(-2,STYLE_Add); + StunnerAmmo(weap.Ammo1).rechargephase = 0; + if ( !Dampener.Active(self) ) A_AlertMonsters(); + } + action State A_ChargeUp() + { + if ( !(player.cmd.buttons&(BT_ATTACK|BT_ALTATTACK)) ) + return ResolveState("Release"); + Weapon weap = Weapon(invoker); + if ( !weap ) return ResolveState(null); + StunnerAmmo(weap.Ammo1).rechargephase = 0; + UTMainHandler.DoSwing(self,(FRandom[Stunner](-1,1),FRandom[Stunner](-1,1)),0.02*invoker.chargesize,0,2,SWING_Spring); + A_WeaponOffset(FRandom[Stunner](-1,1)*1.2*invoker.chargesize,32+FRandom[Stunner](-1,1)*1.2*invoker.chargesize); + if ( !Dampener.Active(self) ) A_AlertMonsters(); + if ( invoker.chargesize >= 6. ) + { + invoker.count += 1./35.; + if ( invoker.count > 1.5 ) return ResolveState("Release"); + return ResolveState(null); + } + invoker.chargesize += 2./35.; + invoker.count += 1./35.; + if ( invoker.count < 0.14 ) return ResolveState(null); + invoker.count = 0; + if ( !(sv_infiniteammo || (FindInventory('PowerInfiniteAmmo',true))) ) + { + if ( weap.Ammo1.Amount < 1 ) + return ResolveState("Release"); + weap.Ammo1.Amount--; + } + return ResolveState(null); + } + Default { Tag "$T_STUNNER"; @@ -40,6 +99,7 @@ Class Stunner : UnrealWeapon Weapon.UpSound "stun/select"; Weapon.SlotNumber 4; Weapon.SelectionOrder 9; + Weapon.SlotPriority 0.9; Weapon.AmmoType "StunnerAmmo"; Weapon.AmmoUse 1; Weapon.AmmoType2 "StunnerAmmo"; @@ -54,5 +114,46 @@ Class Stunner : UnrealWeapon Stop; STNP B -1; Stop; + Select: + STNS A 1 A_Raise(int.max); + Wait; + Ready: + STNS ABCDEFGHIJKLMNOPQRSTUVWX 2 A_WeaponReady(WRF_NOFIRE); + Goto Idle; + Idle: + STNI A 1 + { + A_CheckReload(); + let weap = Weapon(invoker); + if ( weap && weap.Ammo1.Amount > 0 ) A_WeaponReady(); + else A_WeaponReady(WRF_NOFIRE); + } + Wait; + Fire: + AltFire: + #### # 2 A_BeginCharge(); + STNF ABCDEFGHIJKLMNOPQRST 2 A_ChargeUp(); + Goto Hold; + Hold: + STNH R 1 A_ChargeUp(); + Wait; + Release: + #### # 2; + STNR A 0 A_StunnerFire(); + STNR ABC 1; + STR2 ABCDE 2; + STNF TRPNLJHFDB 1 A_WeaponReady(WRF_NOSWITCH|WRF_DISABLESWITCH); + Goto Idle; + Deselect: + STND ABCDEFGHIJKL 1; + STND L 1 A_Lower(int.max); + Wait; + Sparks: + TNT1 A 8; + STFF ABCDEFGHIJKLMNOPQRS 2 Bright; + STFF J 0 A_JumpIf(invoker.chargesize>=5.,1); + Goto Sparks+10; + STFF JIHGFEDCBA 2 Bright; + Stop; } } diff --git a/zscript/ubiorifle.zsc b/zscript/ubiorifle.zsc index 1951e90..b2b5f44 100644 --- a/zscript/ubiorifle.zsc +++ b/zscript/ubiorifle.zsc @@ -668,6 +668,7 @@ Class UBioRifle : UnrealWeapon Weapon.UpSound "ges/select"; Weapon.SlotNumber 8; Weapon.SelectionOrder 8; + Weapon.SlotPriority 1; Weapon.AmmoType "UBioAmmo"; Weapon.AmmoUse 1; Weapon.AmmoType2 "UBioAmmo"; diff --git a/zscript/ueightball.zsc b/zscript/ueightball.zsc index 06f6015..32daa05 100644 --- a/zscript/ueightball.zsc +++ b/zscript/ueightball.zsc @@ -495,6 +495,7 @@ Class Eightball : UnrealWeapon Weapon.UpSound "utrl/select"; Weapon.SlotNumber 5; Weapon.SelectionOrder 5; + Weapon.SlotPriority 1; Weapon.AmmoType "URocketAmmo"; Weapon.AmmoUse 1; Weapon.AmmoType2 "URocketAmmo"; diff --git a/zscript/uflakcannon.zsc b/zscript/uflakcannon.zsc index 18a9f33..b5eed97 100644 --- a/zscript/uflakcannon.zsc +++ b/zscript/uflakcannon.zsc @@ -291,6 +291,7 @@ Class UFlakCannon : UnrealWeapon Weapon.UpSound "flak/select"; Weapon.SlotNumber 6; Weapon.SelectionOrder 4; + Weapon.SlotPriority 1; Weapon.AmmoType "UFlakBox"; Weapon.AmmoUse 1; Weapon.AmmoType2 "UFlakBox"; diff --git a/zscript/uminigun.zsc b/zscript/uminigun.zsc index 8f05dee..eb5525c 100644 --- a/zscript/uminigun.zsc +++ b/zscript/uminigun.zsc @@ -150,6 +150,7 @@ Class UMinigun : UnrealWeapon Weapon.UpSound "minigun/select"; Weapon.SlotNumber 0; Weapon.SelectionOrder 10; + Weapon.SlotPriority 1; Weapon.AmmoType "UMiniAmmo"; Weapon.AmmoUse 1; Weapon.AmmoType2 "UMiniAmmo"; diff --git a/zscript/unrealcommon.zsc b/zscript/unrealcommon.zsc index c7066d4..da202a2 100644 --- a/zscript/unrealcommon.zsc +++ b/zscript/unrealcommon.zsc @@ -176,7 +176,37 @@ Class UPlayer : UTPlayer if ( !player.weapons.LocateWeapon(type) ) continue; readonly def = GetDefaultByType(type); if ( (giveall == ALL_YESYES) || !def.bCheatNotWeapon ) + { GiveInventory(type,1,true); + if ( (type is 'Automag') && sting_automags ) + { + // force akimbo + let t = FindInventory(type); + if ( t ) t.Amount = 2; + } + else if ( (type is 'Betamag') && sting_protomags ) + { + // force akimbo + let t = FindInventory(type); + if ( t ) t.Amount = 2; + } + else if ( type is 'DispersionPistol' ) + { + // force upgrade + let dsp = DispersionPistol(FindInventory('DispersionPistol')); + if ( dsp ) + { + dsp.Ammo1.MaxAmount = 90; + if ( player.ReadyWeapon == dsp ) + dsp.pendingupgrade = 4; + else + { + dsp.upgradelevel = 4; + dsp.MainUse = min(6,dsp.upgradelevel+1); + } + } + } + } } } player.PendingWeapon = savedpending; @@ -1154,6 +1184,14 @@ Class UnrealMainHandler : EventHandler if ( t ) t.Use(false); } } + private static bool CmpWeapon( Class a, Class b ) + { + let defa = GetDefaultByType(a); + let defb = GetDefaultByType(b); + if ( defa.SlotPriority <= defb.SlotPriority ) return true; + if ( defa.SlotNumber > defb.SlotNumber ) return true; + return false; + } override void WorldLoaded( WorldEvent e ) { // More "authentic" Unreal flavor of these edits @@ -1167,8 +1205,9 @@ Class UnrealMainHandler : EventHandler level.ReplaceTextures("uAlnWl2b","C_WAL19A",0); level.ReplaceTextures("xAlnWl2b","C_WAL19F",0); } - // populate ammo-by-slot array - AmmoSlots.Clear(); + // populate weapons array + Array > SortedWeapons; + SortedWeapons.Clear(); for ( int i=0; i)(AllActorClasses[i]); @@ -1179,6 +1218,31 @@ Class UnrealMainHandler : EventHandler int wslot = def.SlotNumber; if ( wslot == -1 ) continue; if ( !def.AmmoType1 ) continue; + SortedWeapons.Push(type); + } + // sort weapons array + for ( int i=0; i 0) && CmpWeapon(SortedWeapons[k-1],SortedWeapons[k]) ) + { + Class tmp = SortedWeapons[k]; + SortedWeapons[k] = SortedWeapons[k-1]; + SortedWeapons[k-1] = tmp; + k--; + } + j++; + } + } + // populate ammo-by-slot array + AmmoSlots.Clear(); + for ( int i=0; i def = GetDefaultByType(SortedWeapons[i]); + int wslot = def.SlotNumber; int found = -1; for ( int j=0; j