diff --git a/Readme.md b/Readme.md index 05fd8a0..75da5ff 100644 --- a/Readme.md +++ b/Readme.md @@ -1,9 +1,8 @@ # DOOM TOURNAMENT -What began as a test for importing UT vertex meshes has turned into an actual -full UT weapon and item mod. +What began as a test for importing UT vertex meshes has turned into an actual full UT weapon and item mod. -This mod requires GZDoom 4.2.4 or later. +This mod requires GZDoom 4.3 or later. ## Currently implemented @@ -49,8 +48,6 @@ This mod requires GZDoom 4.2.4 or later. - "Instant Rocket" mode toggleable with reload - Scaling/Customization options for the HUD - UT-like player movement physics - - Visual recoil affecting aim (improved A_Swing from Soundless Mound, can be - toggled) - UT-like weapon dropping style - UT player classes - Heretic compatibility @@ -61,29 +58,23 @@ This mod requires GZDoom 4.2.4 or later. - Hexen compatibility - Fancy titlemap - Semi-accurate UT sound behaviour + - Hacky cameratexture ammo counters for Pulsegun, Minigun, Flak Cannon and rocket launcher ## In progress - - N/A this is the 1.1.2 release. + - N/A this is the 1.1.3 release. ## Planned - Stuff for 1.2 - - Touch up blood/gibbing features. At the moment, Nashgore is still a - superior alternative. + - Refactor everything, backporting many fixes and improvements from SWWM GZ. + - Touch up blood/gibbing features. At the moment, Nashgore is still a superior alternative. - Help screens describing items and stuff (maybe?). - - Chex Quest compatibility ? - - Strife compatibility ???? - Stuff for much later - - Add ammo counters to Pulsegun, Minigun, Flak Cannon and Rocket Launcher - once scripted textures are implemented - - Redo player models once GZDoom gets a well deserved model animation system - overhaul (mainly to clean up the current, messy implementation of this) - - Add weapon attachment support to player models when that is also added in - (at the moment all player models have an integrated placeholder weapon) + - Proper scripted textures for ammo counters, if they are ever implemented. + - Redo player models once GZDoom gets a well deserved model animation system overhaul (mainly to clean up the current, messy implementation of this). + - Add weapon attachment support to player models when that is also added in (at the moment all player models have an integrated placeholder weapon). ## Known bugs - - Biorifle sludge doesn't attach properly when it lands on the edge between - sectors. This is most noticeable with moving sectors and 3d floors. This - might be fixed once there's virtuals for world collision. + - Biorifle sludge doesn't attach properly when it lands on the edge between sectors. This is most noticeable with moving sectors and 3d floors. It doesn't seem like there's an easy fix for this. diff --git a/animdefs.txt b/animdefs.txt index d3f182a..17cc507 100644 --- a/animdefs.txt +++ b/animdefs.txt @@ -4,3 +4,7 @@ texture static1 range static4 tics 1 texture invis00 range invis31 tics 2 +cameratexture PAmmoLed 256 128 +cameratexture FlakALed 128 64 +cameratexture MiniALed 64 64 +cameratexture RAmmoLed 64 64 diff --git a/cvarinfo.txt b/cvarinfo.txt index 6ae8472..03a0d5a 100644 --- a/cvarinfo.txt +++ b/cvarinfo.txt @@ -33,8 +33,6 @@ server int flak_taptics = 8; // maximum delay in tics between double taps for 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 -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) diff --git a/gldefs.txt b/gldefs.txt index 1985c2f..a8afc78 100644 --- a/gldefs.txt +++ b/gldefs.txt @@ -431,14 +431,6 @@ HardwareShader Texture "models/JPulsePickup_01.png" Shader "shaders/glsl/AmbientGlow_Brightmapped.fp" Texture "brighttex" "brightmaps/JPulsePickup_01.png" } -Brightmap Texture "models/AmmoLedBase.png" -{ - Map "brightmaps/fullbright.png" -} -Brightmap Texture "models/FlakAmmoLEDBase.png" -{ - Map "brightmaps/fullbright.png" -} HardwareShader Texture "models/AToxSuit1.png" { Shader "shaders/glsl/AmbientGlow.fp" @@ -614,10 +606,6 @@ Brightmap Texture "models/Eight_t4.png" { Map "brightmaps/Eight_t4.png" } -Brightmap Texture "models/miniammoledbase.png" -{ - Map "brightmaps/fullbright.png" -} HardwareShader Texture "models/tloc1_.png" { Shader "shaders/glsl/AmbientGlow_Brightmapped.fp" diff --git a/menudef.txt b/menudef.txt index 881591f..97f202d 100644 --- a/menudef.txt +++ b/menudef.txt @@ -31,8 +31,6 @@ OptionMenu "UTOptionMenu" Option "$FLAK_SAWAMMO", "flak_sawammo", "YesNo" Option "$FLAK_ZOOMSND", "flak_zoomsound", "YesNo" Option "$FLAK_ZSHADER", "flak_zoomshader", "YesNo" - Option "$FLAK_RECOIL", "flak_swingers", "YesNo" - Slider "$FLAK_RSTRENGTH", "flak_swingerstrength", 0.0, 1.0, 0.1, 1 Slider "$FLAK_FSTRENGTH", "flak_flashstrength", 0.0, 1.0, 0.1, 1 StaticText " " StaticText "$FLAK_IOPTS", "Gold" @@ -98,11 +96,13 @@ OptionMenu "UTCreditsMenu" StaticText "Epic Games", "White" StaticText " " StaticText "$FLAK_CPATRON", "Gold" - StaticText "Christian Grab, john, Alexa Jones-Gonzales,", "White" - StaticText "Jonas Höglund, Valerie Thiessen, Corey Hectus,", "White" - StaticText "dac, Pietro Gagliardi, Artem Bashev,", "White" - StaticText "Xada Xephron, Zard1084, NekoMithos,", "White" - StaticText "Max Zeal, m8f, 3d0xp0xy", "White" + StaticText "Snacks, Artem Bashev, john,", "White" + StaticText "Jonas Höglund, Lilian Lamp, Valerie Thiessen,", "White" + StaticText "Corey Hectus, Dac, Pietro Gagliardi, Xada Xephron,", "White" + StaticText "Alexa Jones-Gonzales, John, NekoMithos,", "White" + StaticText "bouncytem, Figo, Holly_Rook,", "White" + StaticText "Namsan, YaGirlJuniper, Ashley Lambert,", "White" + StaticText "LordMisfit, m8f, 3d0xp0xy", "White" StaticText " " StaticText "$FLAK_CTHANK", "Gold" StaticText "KynikossDragonn, Raffine52, KeksDose, Skerion", "White" diff --git a/modeldef.eightball b/modeldef.eightball index d83a268..3f2c45c 100644 --- a/modeldef.eightball +++ b/modeldef.eightball @@ -73,7 +73,7 @@ Model "UTRocketLauncher" SurfaceSkin 0 1 "Eight_t2.png" SurfaceSkin 0 2 "Eight_t3.png" SurfaceSkin 0 3 "Eight_t4.png" - SurfaceSkin 0 4 "miniammoledbase.png" + SurfaceSkin 0 4 "RAmmoLed" Scale -0.2 0.22 0.2 Offset 3.4 -9.2 -8.5 AngleOffset 94 @@ -276,4 +276,4 @@ Model "UTRocketLauncher" FrameIndex EBLD I 0 154 FrameIndex EBLD J 0 155 FrameIndex EBLD K 0 156 -} \ No newline at end of file +} diff --git a/modeldef.flak b/modeldef.flak index 59a999e..3b904be 100644 --- a/modeldef.flak +++ b/modeldef.flak @@ -234,7 +234,7 @@ Model "FlakCannon" SurfaceSkin 0 1 "flak_t2.png" SurfaceSkin 0 2 "flak_t3.png" SurfaceSkin 0 3 "flak_t4.png" - SurfaceSkin 0 4 "flakammoledbase.png" + SurfaceSkin 0 4 "FlakALed" AngleOffset 90 PitchOffset 180 RollOffset 178 diff --git a/modeldef.minigun b/modeldef.minigun index 59cb3f8..677097f 100644 --- a/modeldef.minigun +++ b/modeldef.minigun @@ -77,7 +77,7 @@ Model "Minigun" SurfaceSkin 0 1 "Mini_t2.png" SurfaceSkin 0 2 "Mini_t3.png" SurfaceSkin 0 3 "Mini_t4.png" - SurfaceSkin 0 4 "miniammoledbase.png" + SurfaceSkin 0 4 "MiniALed" Scale 0.12 -0.08 0.12 Offset 1.8 -19.9 -13.8 AngleOffset 90 @@ -194,4 +194,4 @@ Model "Minigun" FrameIndex MGND H 0 148 FrameIndex MGND I 0 149 FrameIndex MGND J 0 150 -} \ No newline at end of file +} diff --git a/modeldef.pulse b/modeldef.pulse index 73e2ccc..285aa9d 100644 --- a/modeldef.pulse +++ b/modeldef.pulse @@ -103,7 +103,7 @@ Model "PulseGun" Path "models" Model 0 "PulseGunR_d.3d" // indices start at 1 for this model - SurfaceSkin 0 1 "AmmoLedBase.png" + SurfaceSkin 0 1 "PAmmoLed" SurfaceSkin 0 2 "JPulseGun_02.png" SurfaceSkin 0 3 "JPulseGun_03.png" AngleOffset 90 diff --git a/models/Eightm_d.3d b/models/Eightm_d.3d index adb33ab..aa752c6 100644 Binary files a/models/Eightm_d.3d and b/models/Eightm_d.3d differ diff --git a/models/Minigun2m_d.3d b/models/Minigun2m_d.3d index e10abb1..bb3cf38 100644 Binary files a/models/Minigun2m_d.3d and b/models/Minigun2m_d.3d differ diff --git a/models/PulseGunR_d.3d b/models/PulseGunR_d.3d index 0f6ec34..7ac7d27 100644 Binary files a/models/PulseGunR_d.3d and b/models/PulseGunR_d.3d differ diff --git a/models/flakm_d.3d b/models/flakm_d.3d index 9ae584f..1efac93 100644 Binary files a/models/flakm_d.3d and b/models/flakm_d.3d differ diff --git a/models/miniammoledbase.png b/models/miniammoledbase.png deleted file mode 100644 index 49e3c30..0000000 Binary files a/models/miniammoledbase.png and /dev/null differ diff --git a/sprites/ammoled/AMCBA0.png b/sprites/ammoled/AMCBA0.png new file mode 100644 index 0000000..15880d0 Binary files /dev/null and b/sprites/ammoled/AMCBA0.png differ diff --git a/models/AmmoLedBase.png b/sprites/ammoled/AMLDA0.png similarity index 100% rename from models/AmmoLedBase.png rename to sprites/ammoled/AMLDA0.png diff --git a/models/FlakAmmoLEDBase.png b/sprites/ammoled/AMLDB0.png similarity index 100% rename from models/FlakAmmoLEDBase.png rename to sprites/ammoled/AMLDB0.png diff --git a/sprites/ammoled/AMLDC0.png b/sprites/ammoled/AMLDC0.png new file mode 100644 index 0000000..18bf6ae Binary files /dev/null and b/sprites/ammoled/AMLDC0.png differ diff --git a/sprites/ammoled/AMLDD0.png b/sprites/ammoled/AMLDD0.png new file mode 100644 index 0000000..56af507 Binary files /dev/null and b/sprites/ammoled/AMLDD0.png differ diff --git a/sprites/ammoled/LFN1A0.png b/sprites/ammoled/LFN1A0.png new file mode 100644 index 0000000..20da6f0 Binary files /dev/null and b/sprites/ammoled/LFN1A0.png differ diff --git a/sprites/ammoled/LFN1B0.png b/sprites/ammoled/LFN1B0.png new file mode 100644 index 0000000..655391b Binary files /dev/null and b/sprites/ammoled/LFN1B0.png differ diff --git a/sprites/ammoled/LFN1C0.png b/sprites/ammoled/LFN1C0.png new file mode 100644 index 0000000..c55154a Binary files /dev/null and b/sprites/ammoled/LFN1C0.png differ diff --git a/sprites/ammoled/LFN1D0.png b/sprites/ammoled/LFN1D0.png new file mode 100644 index 0000000..928a142 Binary files /dev/null and b/sprites/ammoled/LFN1D0.png differ diff --git a/sprites/ammoled/LFN1E0.png b/sprites/ammoled/LFN1E0.png new file mode 100644 index 0000000..058a049 Binary files /dev/null and b/sprites/ammoled/LFN1E0.png differ diff --git a/sprites/ammoled/LFN1F0.png b/sprites/ammoled/LFN1F0.png new file mode 100644 index 0000000..129492d Binary files /dev/null and b/sprites/ammoled/LFN1F0.png differ diff --git a/sprites/ammoled/LFN1G0.png b/sprites/ammoled/LFN1G0.png new file mode 100644 index 0000000..a711249 Binary files /dev/null and b/sprites/ammoled/LFN1G0.png differ diff --git a/sprites/ammoled/LFN1H0.png b/sprites/ammoled/LFN1H0.png new file mode 100644 index 0000000..17c9ad5 Binary files /dev/null and b/sprites/ammoled/LFN1H0.png differ diff --git a/sprites/ammoled/LFN1I0.png b/sprites/ammoled/LFN1I0.png new file mode 100644 index 0000000..e6388e3 Binary files /dev/null and b/sprites/ammoled/LFN1I0.png differ diff --git a/sprites/ammoled/LFN1J0.png b/sprites/ammoled/LFN1J0.png new file mode 100644 index 0000000..55a79bb Binary files /dev/null and b/sprites/ammoled/LFN1J0.png differ diff --git a/sprites/ammoled/LFN2A0.png b/sprites/ammoled/LFN2A0.png new file mode 100644 index 0000000..087bc86 Binary files /dev/null and b/sprites/ammoled/LFN2A0.png differ diff --git a/sprites/ammoled/LFN2B0.png b/sprites/ammoled/LFN2B0.png new file mode 100644 index 0000000..ee67476 Binary files /dev/null and b/sprites/ammoled/LFN2B0.png differ diff --git a/sprites/ammoled/LFN2C0.png b/sprites/ammoled/LFN2C0.png new file mode 100644 index 0000000..cc4c679 Binary files /dev/null and b/sprites/ammoled/LFN2C0.png differ diff --git a/sprites/ammoled/LFN2D0.png b/sprites/ammoled/LFN2D0.png new file mode 100644 index 0000000..26ade44 Binary files /dev/null and b/sprites/ammoled/LFN2D0.png differ diff --git a/sprites/ammoled/LFN2E0.png b/sprites/ammoled/LFN2E0.png new file mode 100644 index 0000000..29aadeb Binary files /dev/null and b/sprites/ammoled/LFN2E0.png differ diff --git a/sprites/ammoled/LFN2F0.png b/sprites/ammoled/LFN2F0.png new file mode 100644 index 0000000..a861a46 Binary files /dev/null and b/sprites/ammoled/LFN2F0.png differ diff --git a/sprites/ammoled/LFN2G0.png b/sprites/ammoled/LFN2G0.png new file mode 100644 index 0000000..15fac4c Binary files /dev/null and b/sprites/ammoled/LFN2G0.png differ diff --git a/sprites/ammoled/LFN2H0.png b/sprites/ammoled/LFN2H0.png new file mode 100644 index 0000000..0b3c3ed Binary files /dev/null and b/sprites/ammoled/LFN2H0.png differ diff --git a/sprites/ammoled/LFN2I0.png b/sprites/ammoled/LFN2I0.png new file mode 100644 index 0000000..d714185 Binary files /dev/null and b/sprites/ammoled/LFN2I0.png differ diff --git a/sprites/ammoled/LFN2J0.png b/sprites/ammoled/LFN2J0.png new file mode 100644 index 0000000..caa1987 Binary files /dev/null and b/sprites/ammoled/LFN2J0.png differ diff --git a/zscript.txt b/zscript.txt index f5b9ff3..936db8d 100644 --- a/zscript.txt +++ b/zscript.txt @@ -27,3 +27,4 @@ version "4.3" #include "zscript/uthud.zsc" #include "zscript/compat.zsc" #include "zscript/utmenu.zsc" +#include "zscript/ammoled.zsc" diff --git a/zscript/ammoled.zsc b/zscript/ammoled.zsc new file mode 100644 index 0000000..0386fe8 --- /dev/null +++ b/zscript/ammoled.zsc @@ -0,0 +1,192 @@ +const PULSELEDBASE = 60000; +const FLAKLEDBASE = 61000; +const MINILEDBASE = 62000; +const ROCKETLEDBASE = 63000; + +Class PulseGunLED : Actor +{ + Actor base, digits[3], bar; + transient PulseGun mygun; + + override void PostBeginPlay() + { + SetOrigin((PULSELEDBASE+64,128,99),false); + pitch = 90; + if ( !base ) base = Spawn("AmmoLEDScreen",(PULSELEDBASE+128,0,0)); + for ( int i=0; i<3; i++ ) if ( !digits[i] ) digits[i] = Spawn("LEDFont",(PULSELEDBASE+99,104+48*i,1)); + if ( !bar ) bar = Spawn("AmmoCountBar",(PULSELEDBASE+110,30,1)); + } + override void Tick() + { + if ( !mygun ) return; + base.SetState(base.SpawnState); + int amo = flak_pulsereload?mygun.ClipCount:mygun.Ammo1.Amount; + int mamo = flak_pulsereload?mygun.default.ClipCount:mygun.Ammo1.MaxAmount; + digits[0].SetState(digits[0].SpawnState+1+((amo/100)%10)); + digits[1].SetState(digits[1].SpawnState+1+((amo/10)%10)); + digits[2].SetState(digits[2].SpawnState+1+(amo%10)); + if ( amo < 10 ) + { + digits[0].SetShade(Color(255,0,0)); + digits[1].SetShade(Color(255,0,0)); + digits[2].SetShade(Color(255,0,0)); + } + else + { + digits[0].SetShade(Color(0,0,255)); + digits[1].SetShade(Color(0,0,255)); + digits[2].SetShade(Color(0,0,255)); + } + bar.scale.x = amo/double(mamo); + } +} + +Class FlakCannonLED : Actor +{ + Actor base, digits[3]; + transient FlakCannon mygun; + + override void PostBeginPlay() + { + SetOrigin((FLAKLEDBASE+32,64,45),false); + pitch = 90; + if ( !base ) base = Spawn("AmmoLEDScreen",(FLAKLEDBASE+64,0,0)); + for ( int i=0; i<3; i++ ) if ( !digits[i] ) digits[i] = Spawn("LEDFont",(FLAKLEDBASE+51,54+20*i,1)); + } + override void Tick() + { + if ( !mygun ) return; + base.SetState(base.SpawnState+1); + int amo = mygun.Ammo1.Amount; + digits[0].SetState(digits[0].SpawnState+11+((amo/100)%10)); + digits[1].SetState(digits[1].SpawnState+11+((amo/10)%10)); + digits[2].SetState(digits[2].SpawnState+11+(amo%10)); + digits[0].SetShade(Color(255,0,0)); + digits[1].SetShade(Color(255,0,0)); + digits[2].SetShade(Color(255,0,0)); + } +} + +Class MinigunLED : Actor +{ + Actor base, digits[3]; + transient Minigun mygun; + + override void PostBeginPlay() + { + SetOrigin((MINILEDBASE+32,32,18),false); + pitch = 90; + if ( !base ) base = Spawn("AmmoLEDScreen",(MINILEDBASE+64,0,0)); + for ( int i=0; i<3; i++ ) if ( !digits[i] ) digits[i] = Spawn("LEDFont",(MINILEDBASE+51,22+20*i,1)); + } + override void Tick() + { + if ( !mygun ) return; + base.SetState(base.SpawnState+2); + int amo = mygun.Ammo1.Amount; + digits[0].SetState(digits[0].SpawnState+11+((amo/100)%10)); + digits[1].SetState(digits[1].SpawnState+11+((amo/10)%10)); + digits[2].SetState(digits[2].SpawnState+11+(amo%10)); + digits[0].SetShade(Color(255,0,0)); + digits[1].SetShade(Color(255,0,0)); + digits[2].SetShade(Color(255,0,0)); + } +} + +Class UTRocketLauncherLED : Actor +{ + Actor base, digits[3]; + transient UTRocketLauncher mygun; + + override void PostBeginPlay() + { + SetOrigin((ROCKETLEDBASE+32,32,18),false); + pitch = 90; + if ( !base ) base = Spawn("AmmoLEDScreen",(ROCKETLEDBASE+64,0,0)); + for ( int i=0; i<3; i++ ) if ( !digits[i] ) digits[i] = Spawn("LEDFont",(ROCKETLEDBASE+51,22+20*i,1)); + } + override void Tick() + { + if ( !mygun ) return; + base.SetState(base.SpawnState+3); + int amo = mygun.Ammo1.Amount; + digits[0].SetState(digits[0].SpawnState+11+((amo/100)%10)); + digits[1].SetState(digits[1].SpawnState+11+((amo/10)%10)); + digits[2].SetState(digits[2].SpawnState+11+(amo%10)); + digits[0].SetShade(Color(255,0,0)); + digits[1].SetShade(Color(255,0,0)); + digits[2].SetShade(Color(255,0,0)); + } +} + +Class LEDFont : Actor +{ + Default + { + RenderStyle "Shaded"; + StencilColor "FF 00 00"; + Radius .1; + Height 0.; + RenderRadius 256; + +NOBLOCKMAP; + +NOGRAVITY; + +NOINTERACTION; + +DONTSPLASH; + +FLATSPRITE; + +YFLIP; // flatsprites™ + } + States + { + Spawn: + TNT1 A -1; + LFN1 ABCDEFGHIJ -1 Bright; + LFN2 ABCDEFGHIJ -1 Bright; + Stop; + } +} + +Class AmmoCountBar : Actor +{ + Default + { + Radius .1; + Height 0.; + RenderRadius 256; + +NOBLOCKMAP; + +NOGRAVITY; + +NOINTERACTION; + +DONTSPLASH; + +FLATSPRITE; + +XFLIP; // flatsprites™ + +YFLIP; // flatsprites™ + } + States + { + Spawn: + AMCB A -1 Bright; + Stop; + } +} + +Class AmmoLEDScreen : Actor +{ + Default + { + Radius .1; + Height 0.; + RenderRadius 256; + +NOBLOCKMAP; + +NOGRAVITY; + +NOINTERACTION; + +DONTSPLASH; + +FLATSPRITE; + +XFLIP; // flatsprites™ + +YFLIP; // flatsprites™ + } + States + { + Spawn: + AMLD ABCD -1 Bright; + Stop; + } +} diff --git a/zscript/biorifle.zsc b/zscript/biorifle.zsc index d701ab8..8204622 100644 --- a/zscript/biorifle.zsc +++ b/zscript/biorifle.zsc @@ -720,13 +720,8 @@ Class BioRifle : UTWeapon { p = Spawn("BioGlob",origin); p.A_SetScale(1.0+invoker.charge*0.8); - UTMainHandler.DoSwing(self,(FRandom[GES](-0.6,-1.3),FRandom[GES](-0.9,-0.2)),1+invoker.charge*0.3,-0.1,3,SWING_Spring,3,2); - } - else - { - p = Spawn("BioGel",origin); - UTMainHandler.DoSwing(self,(FRandom[GES](-0.6,-1.3),FRandom[GES](-0.9,-0.2)),2,-0.5,2,SWING_Spring,2,2); } + else p = Spawn("BioGel",origin); p.angle = angle; p.pitch = BulletSlope(); p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*p.speed; @@ -763,7 +758,6 @@ Class BioRifle : UTWeapon return; } invoker.special1 = 2; - UTMainHandler.DoSwing(self,(FRandom[GES](-1,1),FRandom[GES](-1,1)),0.02*invoker.charge,0,5,SWING_Spring,0,2); if ( invoker.charge >= 5.1 ) return; if ( weap.Ammo1.Amount <= 0 ) return; if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return; diff --git a/zscript/chainsaw.zsc b/zscript/chainsaw.zsc index 975aee5..4509a2d 100644 --- a/zscript/chainsaw.zsc +++ b/zscript/chainsaw.zsc @@ -124,7 +124,6 @@ Class UTChainsaw : UTWeapon { invoker.ammocharge += 10./TICRATE; A_QuakeEx(2,2,2,2,0,1,"",QF_RELATIVE,rollIntensity:0.15); - UTMainHandler.DoSwing(self,(FRandom[Chainsaw](-1,1),FRandom[Chainsaw](-1,1)),0.6,-0.2,2,SWING_Spring); invoker.sawcnt += 1./TICRATE; if ( invoker.sawcnt > 0.15 ) { @@ -177,7 +176,6 @@ Class UTChainsaw : UTWeapon { invoker.ammocharge += 20./TICRATE; A_QuakeEx(2,2,2,3,0,1,"",QF_RELATIVE,rollIntensity:0.15); - UTMainHandler.DoSwing(self,(FRandom[Chainsaw](-1,1),FRandom[Chainsaw](-1,1)),0.6,-0.2,2,SWING_Spring); if ( initial ) invoker.FireEffect(); A_AlertMonsters(); Vector3 x, y, z; @@ -233,7 +231,6 @@ Class UTChainsaw : UTWeapon A_QuakeEx(1,1,1,3,0,1,"",QF_RELATIVE,rollIntensity:0.4); } else A_QuakeEx(0,0,0,2,0,1,"",QF_RELATIVE,rollIntensity:0.2); - UTMainHandler.DoSwing(self,(FRandom[Chainsaw](-1,1),FRandom[Chainsaw](-1,1)),0.25,-0.1,2,SWING_Spring); if ( bAlt || Random[Chainsaw](0,2) ) return; Vector3 x, y, z; [x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll); @@ -334,14 +331,9 @@ Class UTChainsaw : UTWeapon { A_StopSound(CHAN_WEAPONMISC); A_StartSound("chainsaw/fire",CHAN_WEAPON); - UTMainHandler.DoSwing(self,(FRandom[Chainsaw](-0.8,-1.2),FRandom[Chainsaw](-0.4,-0.7)),0,1,5,SWING_Spring,6,3); } CSWA ABCDE 2 A_Vibrate(true); - CSWA F 2 - { - A_Overlay(PSP_WEAPON+1,"AltFireSwipes"); - UTMainHandler.DoSwing(self,(FRandom[Chainsaw](0.8,1.2),0),0,2,6,SWING_Spring,1,3); - } + CSWA F 2 A_Overlay(PSP_WEAPON+1,"AltFireSwipes"); CSWA GHIJ 2; CSWA K 2 A_Vibrate(true); CSWA K 0 diff --git a/zscript/eightball.zsc b/zscript/eightball.zsc index 374f81d..dd0206d 100644 --- a/zscript/eightball.zsc +++ b/zscript/eightball.zsc @@ -294,6 +294,22 @@ Class UTRocketLauncher : UTWeapon int locktics; bool bSingleRocket; + UTRocketLauncherLED ammoled; + + override void DoEffect() + { + Super.DoEffect(); + if ( !ammoled ) + { + let ti = ThinkerIterator.Create("UTRocketLauncherLED"); + while ( ammoled=UTRocketLauncherLED(ti.Next()) ) break; + if ( !ammoled ) ammoled = UTRocketLauncherLED(Spawn("UTRocketLauncherLED")); + } + if ( !Owner || !Owner.player || (Owner != players[consoleplayer].Camera) ) return; + ammoled.mygun = self; + TexMan.SetCameraToTexture(ammoled,"RAmmoLed",90); + } + override void PostBeginPlay() { Super.PostBeginPlay(); @@ -366,8 +382,6 @@ Class UTRocketLauncher : UTWeapon UTPlayer(self).PlayAttacking3(); A_AlertMonsters(); A_QuakeEx(2+num,2+num,2+num,6+num,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1+num*0.05); - for ( int i=0; i0)?Min(50,weap.Ammo1.Amount):50; invoker.FireEffect(); UTMainHandler.DoFlash(self,Color(32,128,255,128),1); - UTMainHandler.DoSwing(self,(FRandom[Pulse](-1,-1),FRandom[Pulse](-1,1)),0.3,-0.1,2,SWING_Spring,0,3); A_AlertMonsters(); A_QuakeEx(1,1,1,2,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05); A_Overlay(-2,"MuzzleFlash"); diff --git a/zscript/ripper.zsc b/zscript/ripper.zsc index 10a8a31..3718791 100644 --- a/zscript/ripper.zsc +++ b/zscript/ripper.zsc @@ -251,16 +251,8 @@ Class Ripper2 : UTWeapon invoker.FireEffect(); UTMainHandler.DoFlash(self,Color(8,0,255,255),1); A_AlertMonsters(); - if ( alt ) - { - A_QuakeEx(3,3,3,8,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1); - UTMainHandler.DoSwing(self,(FRandom[Ripper](-0.3,-0.6),FRandom[Ripper](0.2,0.6)),3,-0.5,3,SWING_Spring,5,4); - } - else - { - A_QuakeEx(1,1,1,5,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.08); - UTMainHandler.DoSwing(self,(FRandom[Ripper](-0.3,-0.6),FRandom[Ripper](0.2,0.6)),1,-0.3,2,SWING_Spring,2,2); - } + if ( alt ) A_QuakeEx(3,3,3,8,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1); + else A_QuakeEx(1,1,1,5,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.08); Vector3 x, y, z; [x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll); Vector3 origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),10*x+6*y-4*z); diff --git a/zscript/shockrifle.zsc b/zscript/shockrifle.zsc index 1b585ad..7d6a013 100644 --- a/zscript/shockrifle.zsc +++ b/zscript/shockrifle.zsc @@ -344,11 +344,7 @@ Class ShockBeam : Actor ExplodeMissile(null,t.Results.HitActor); if ( t.Results.HitActor is 'ShockHitbox' ) { - if ( target ) - { - target.TakeInventory('ShockAmmo',2); - UTMainHandler.DoSwing(target,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),5,-1,3,SWING_Spring,3,6); - } + if ( target ) target.TakeInventory('ShockAmmo',2); let b = t.Results.HitActor.target; UTMainHandler.DoBlast(b,250,70000); b.ExplodeMissile(null,self); @@ -581,11 +577,7 @@ Class SuperShockBeam : Actor ExplodeMissile(null,t.Results.HitActor); if ( t.Results.HitActor is 'ShockHitbox' ) { - if ( target ) - { - target.TakeInventory('EnhancedShockAmmo',1); - UTMainHandler.DoSwing(target,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),10,-2,3,SWING_Spring,3,6); - } + if ( target ) target.TakeInventory('EnhancedShockAmmo',1); let b = t.Results.HitActor.target; UTMainHandler.DoBlast(b,400,70000); b.ExplodeMissile(null,self); @@ -1069,7 +1061,6 @@ Class ShockRifle : UTWeapon A_StartSound("shock/fire",CHAN_WEAPON,CHANF_OVERLAP); invoker.FireEffect(); UTMainHandler.DoFlash(self,Color(128,128,0,255),1); - UTMainHandler.DoSwing(self,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),2,-0.3,3,SWING_Spring,0,4); A_AlertMonsters(); A_QuakeEx(2,2,2,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1); Vector3 x, y, z; @@ -1107,7 +1098,6 @@ Class ShockRifle : UTWeapon A_StartSound("shock/altfire",CHAN_WEAPON,CHANF_OVERLAP); invoker.FireEffect(); UTMainHandler.DoFlash(self,Color(128,128,0,255),1); - UTMainHandler.DoSwing(self,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),3,-0.4,3,SWING_Spring,0,4); A_AlertMonsters(); A_QuakeEx(2,2,2,8,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1); Vector3 x, y, z; @@ -1252,7 +1242,6 @@ Class EnhancedShockRifle : UTWeapon A_StartSound("shock/fire",CHAN_WEAPON,CHANF_OVERLAP); invoker.FireEffect(); UTMainHandler.DoFlash(self,Color(128,255,128,0),1); - UTMainHandler.DoSwing(self,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),4,-0.6,3,SWING_Spring,0,4); A_AlertMonsters(); A_QuakeEx(3,3,3,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.15); Vector3 x, y, z; @@ -1290,7 +1279,6 @@ Class EnhancedShockRifle : UTWeapon A_StartSound("shock/altfire",CHAN_WEAPON,CHANF_OVERLAP); invoker.FireEffect(); UTMainHandler.DoFlash(self,Color(128,255,128,0),1); - UTMainHandler.DoSwing(self,(FRandom[ASMD](-0.1,-0.6),FRandom[ASMD](-0.1,0.5)),6,-0.8,3,SWING_Spring,0,4); A_AlertMonsters(); A_QuakeEx(3,3,3,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.15); Vector3 x, y, z; diff --git a/zscript/sniperrifle.zsc b/zscript/sniperrifle.zsc index e31627f..0372284 100644 --- a/zscript/sniperrifle.zsc +++ b/zscript/sniperrifle.zsc @@ -84,17 +84,10 @@ Class SniperRifle : UTWeapon UTMainHandler.DoFlash(self,Color(32,0,0,255),1); A_StartSound("sniper/fire",CHAN_WEAPON,CHANF_OVERLAP); A_AlertMonsters(); - if ( zoomed ) - { - A_QuakeEx(2,2,2,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.09); - for ( int i=0; i<3; i++ ) - UTMainHandler.DoSwing(self,(FRandom[Sniper](-0.3,0.05),FRandom[Sniper](-0.3,0.1)),2,-0.5,Random[Sniper](3,4),SWING_Spring,Random[Sniper](3,4),Random[Sniper](4,5)); - } + if ( zoomed ) A_QuakeEx(2,2,2,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.09); else { A_QuakeEx(3,3,3,6,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.12); - for ( int i=0; i<3; i++ ) - UTMainHandler.DoSwing(self,(FRandom[Sniper](-0.3,0.05),FRandom[Sniper](-0.3,0.1)),4,-1,Random[Sniper](3,4),SWING_Spring,Random[Sniper](3,4),Random[Sniper](4,5)); A_Overlay(-2,"MuzzleFlash"); A_OverlayFlags(-2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true); A_OverlayRenderstyle(-2,STYLE_Add); diff --git a/zscript/translocator.zsc b/zscript/translocator.zsc index 5c924e8..be05ab6 100644 --- a/zscript/translocator.zsc +++ b/zscript/translocator.zsc @@ -393,7 +393,6 @@ Class Translocator : UTWeapon if ( !weap ) return; A_StartSound("transloc/throw",CHAN_WEAPON); invoker.FireEffect(); - UTMainHandler.DoSwing(self,(FRandom[Translocator](-0.2,0.4),FRandom[Translocator](-0.2,0.7)),2,-0.3,3,SWING_Spring,2,3); A_AlertMonsters(); Vector3 x, y, z; [x, y, z] = dt_CoordUtil.GetAxes(pitch,angle,roll); @@ -415,7 +414,6 @@ Class Translocator : UTWeapon if ( !weap ) return; A_StartSound("transloc/return",CHAN_WEAPON); invoker.FireEffect(); - UTMainHandler.DoSwing(self,(FRandom[Translocator](-0.2,-0.4),FRandom[Translocator](-0.2,0.7)),3,-1,2,SWING_Spring,2,2); A_AlertMonsters(); if ( invoker.module && invoker.module.bAMBUSH ) { diff --git a/zscript/utcommon.zsc b/zscript/utcommon.zsc index b7c3c4c..0a19a20 100644 --- a/zscript/utcommon.zsc +++ b/zscript/utcommon.zsc @@ -2869,68 +2869,6 @@ Class UTBulletTrail : LineTracer } } -Enum ESwingMode -{ - SWING_Straight, // constant increment - SWING_Spring, // bounces back after a delay -}; - -Class Swinger : Thinker -{ - Actor target; - Vector2 dir; - double inc, rmul; - int steps, mode, delay; - double str, tstr; - int cnt, cstate; - - Enum ESwingerState - { - STATE_Initial, - STATE_Wait, - STATE_Return, - }; - - override void Tick() - { - if ( !target ) cstate = -1; - switch ( cstate ) - { - case STATE_Initial: - target.A_SetAngle(target.angle+dir.x*str*flak_swingerstrength,SPF_INTERPOLATE); - target.A_SetPitch(target.pitch+dir.y*str*flak_swingerstrength,SPF_INTERPOLATE); - str += inc; - if ( ++cnt >= steps ) - { - cnt = 0; - str = tstr/steps; - cstate = (mode==SWING_Straight)?(-1):(delay>0)?STATE_Wait:STATE_Return; - } - else tstr += str; - break; - case STATE_Wait: - if ( ++cnt >= delay ) - { - cnt = 0; - cstate = STATE_Return; - } - break; - case STATE_Return: - target.A_SetAngle(target.angle-dir.x*(str/rmul)*flak_swingerstrength,SPF_INTERPOLATE); - target.A_SetPitch(target.pitch-dir.y*(str/rmul)*flak_swingerstrength,SPF_INTERPOLATE); - if ( ++cnt >= steps*rmul ) - { - cnt = 0; - cstate = -1; - } - break; - default: - Destroy(); - return; - } - } -} - Class GenericFlash : HUDMessageBase { Color col; @@ -3628,24 +3566,6 @@ Class UTMainHandler : EventHandler else Victim.vel += HitDirection*(MomentumTransfer/(Thinker.TICRATE*Victim.Mass)); } - static void DoSwing( Actor target, Vector2 dir, double initial, double inc, int steps, int mode = 0, int delay = 0, double rmul = 1.0 ) - { - if ( !flak_swingers ) return; - let s = new("Swinger"); - s.ChangeStatNum(Thinker.STAT_USER); - s.target = target; - s.dir = dir; - s.inc = inc; - s.rmul = rmul; - s.steps = steps; - s.mode = mode; - s.delay = delay; - s.cnt = 0; - s.cstate = 0; - s.str = initial; - s.tstr = initial; - } - override void UiTick() { if ( !ispb && !isbd ) return; diff --git a/zscript/warheadlauncher.zsc b/zscript/warheadlauncher.zsc index bc5697f..eeccc6e 100644 --- a/zscript/warheadlauncher.zsc +++ b/zscript/warheadlauncher.zsc @@ -685,8 +685,6 @@ Class WarheadLauncher : UTWeapon A_StartSound("warhead/fire",CHAN_WEAPON,CHANF_OVERLAP); invoker.FireEffect(); UTMainHandler.DoFlash(self,Color(128,255,128,128),1); - UTMainHandler.DoSwing(self,(FRandom[Warhead](0.6,1.2),FRandom[Warhead](0.2,0.5)),4,-1,3,SWING_Spring,2,5); - UTMainHandler.DoSwing(self,(FRandom[Warhead](0.2,0.5),FRandom[Warhead](-0.9,-1.5)),4,-0.6,5,SWING_Spring,3,3); A_AlertMonsters(); A_QuakeEx(6,6,6,20,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.2); Vector3 x, y, z;