diff --git a/FuturePlans.md b/FuturePlans.md index 0c7fb2d56..d6d707ee1 100644 --- a/FuturePlans.md +++ b/FuturePlans.md @@ -20,6 +20,8 @@ This is just a bit of *"future planning"* for stuff that I ***might*** add after - Manarock *("A delicacy for gods, but instantly deadly for mortals")* - Rubber Duck *("Is this some kind of convoluted joke from those two?")* * ***(Maybe)* Fake livestream chat overlay, with dynamic reactions to all sorts of stuff** +* **Crusher breaking *(if possible)*** +* **Replace all hitscan with *"light projectiles"*** * **Leaning and a lot of other stuff involving ViewAngles and ViewPos** * **Crouch sliding *(+ proper crouch dashing)*** * **Expand third person animations** diff --git a/language.version b/language.version index f346cc4d9..3e5674024 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r276 \cu(Sun 14 Feb 21:24:00 CET 2021)\c-"; -SWWM_SHORTVER="\cw0.9.11b-pre r276 \cu(2021-02-14 21:24:00)\c-"; +SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r277 \cu(Mon 15 Feb 23:46:04 CET 2021)\c-"; +SWWM_SHORTVER="\cw0.9.11b-pre r277 \cu(2021-02-15 23:46:04)\c-"; diff --git a/modeldef.ammo b/modeldef.ammo index f5b92c816..7d04c9ee3 100644 --- a/modeldef.ammo +++ b/modeldef.ammo @@ -3,8 +3,7 @@ Model "RedShell" Path "models" Model 0 "ShellAmmo_One_d.3d" - SurfaceSkin 0 0 "Shell_Normal.png" - SurfaceSkin 0 1 "silvermap.png" + Skin 0 "Shell_Normal.png" Scale 0.024 0.024 0.024 PitchOffset 30 ZOffset 16 @@ -17,8 +16,7 @@ Model "RedShell2" Path "models" Model 0 "ShellAmmo_Two_d.3d" - SurfaceSkin 0 0 "Shell_Normal.png" - SurfaceSkin 0 1 "silvermap.png" + Skin 0 "Shell_Normal.png" Scale 0.024 0.024 0.024 ZOffset 16 ROTATING @@ -30,47 +28,7 @@ Model "RedShell4" Path "models" Model 0 "ShellAmmo_Four_d.3d" - SurfaceSkin 0 0 "Shell_Normal.png" - SurfaceSkin 0 1 "silvermap.png" - Scale 0.024 0.024 0.024 - ZOffset 16 - ROTATING - - FrameIndex XZW1 A 0 0 -} -Model "RedShell8" -{ - Path "models" - - Model 0 "ShellAmmo_Eight_d.3d" - SurfaceSkin 0 0 "Shell_Normal.png" - SurfaceSkin 0 1 "silvermap.png" - Scale 0.024 0.024 0.024 - ZOffset 16 - ROTATING - - FrameIndex XZW1 A 0 0 -} -Model "RedShell12" -{ - Path "models" - - Model 0 "ShellAmmo_Twelve_d.3d" - SurfaceSkin 0 0 "Shell_Normal.png" - SurfaceSkin 0 1 "silvermap.png" - Scale 0.024 0.024 0.024 - ZOffset 16 - ROTATING - - FrameIndex XZW1 A 0 0 -} -Model "RedShell16" -{ - Path "models" - - Model 0 "ShellAmmo_Sixteen_d.3d" - SurfaceSkin 0 0 "Shell_Normal.png" - SurfaceSkin 0 1 "silvermap.png" + Skin 0 "Shell_Normal.png" Scale 0.024 0.024 0.024 ZOffset 16 ROTATING @@ -83,8 +41,7 @@ Model "GreenShell" Path "models" Model 0 "ShellAmmo_One_d.3d" - SurfaceSkin 0 0 "Shell_Slug.png" - SurfaceSkin 0 1 "silvermap.png" + Skin 0 "Shell_Slug.png" Scale 0.024 0.024 0.024 PitchOffset 30 ZOffset 16 @@ -97,8 +54,7 @@ Model "GreenShell2" Path "models" Model 0 "ShellAmmo_Two_d.3d" - SurfaceSkin 0 0 "Shell_Slug.png" - SurfaceSkin 0 1 "silvermap.png" + Skin 0 "Shell_Slug.png" Scale 0.024 0.024 0.024 ZOffset 16 ROTATING @@ -110,48 +66,19 @@ Model "GreenShell4" Path "models" Model 0 "ShellAmmo_Four_d.3d" - SurfaceSkin 0 0 "Shell_Slug.png" - SurfaceSkin 0 1 "silvermap.png" + Skin 0 "Shell_Slug.png" Scale 0.024 0.024 0.024 ZOffset 16 ROTATING FrameIndex XZW1 A 0 0 } -Model "GreenShell8" -{ - Path "models" - - Model 0 "ShellAmmo_Eight_d.3d" - SurfaceSkin 0 0 "Shell_Slug.png" - SurfaceSkin 0 1 "silvermap.png" - Scale 0.024 0.024 0.024 - ZOffset 16 - ROTATING - - FrameIndex XZW1 A 0 0 -} -Model "GreenShell12" -{ - Path "models" - - Model 0 "ShellAmmo_Twelve_d.3d" - SurfaceSkin 0 0 "Shell_Slug.png" - SurfaceSkin 0 1 "silvermap.png" - Scale 0.024 0.024 0.024 - ZOffset 16 - ROTATING - - FrameIndex XZW1 A 0 0 -} - Model "WhiteShell" { Path "models" Model 0 "ShellAmmo_One_d.3d" - SurfaceSkin 0 0 "Shell_Dragon.png" - SurfaceSkin 0 1 "silvermap.png" + Skin 0 "Shell_Dragon.png" Scale 0.024 0.024 0.024 PitchOffset 30 ZOffset 16 @@ -164,8 +91,7 @@ Model "WhiteShell2" Path "models" Model 0 "ShellAmmo_Two_d.3d" - SurfaceSkin 0 0 "Shell_Dragon.png" - SurfaceSkin 0 1 "silvermap.png" + Skin 0 "Shell_Dragon.png" Scale 0.024 0.024 0.024 ZOffset 16 ROTATING @@ -177,21 +103,7 @@ Model "WhiteShell4" Path "models" Model 0 "ShellAmmo_Four_d.3d" - SurfaceSkin 0 0 "Shell_Dragon.png" - SurfaceSkin 0 1 "silvermap.png" - Scale 0.024 0.024 0.024 - ZOffset 16 - ROTATING - - FrameIndex XZW1 A 0 0 -} -Model "WhiteShell8" -{ - Path "models" - - Model 0 "ShellAmmo_Eight_d.3d" - SurfaceSkin 0 0 "Shell_Dragon.png" - SurfaceSkin 0 1 "silvermap.png" + Skin 0 "Shell_Dragon.png" Scale 0.024 0.024 0.024 ZOffset 16 ROTATING @@ -204,8 +116,7 @@ Model "BlueShell" Path "models" Model 0 "ShellAmmo_One_d.3d" - SurfaceSkin 0 0 "Shell_Kinylum.png" - SurfaceSkin 0 1 "silvermap.png" + Skin 0 "Shell_Kinylum.png" Scale 0.024 0.024 0.024 PitchOffset 30 ZOffset 16 @@ -218,8 +129,7 @@ Model "BlueShell2" Path "models" Model 0 "ShellAmmo_Two_d.3d" - SurfaceSkin 0 0 "Shell_Kinylum.png" - SurfaceSkin 0 1 "silvermap.png" + Skin 0 "Shell_Kinylum.png" Scale 0.024 0.024 0.024 ZOffset 16 ROTATING @@ -231,35 +141,19 @@ Model "BlueShell4" Path "models" Model 0 "ShellAmmo_Four_d.3d" - SurfaceSkin 0 0 "Shell_Kinylum.png" - SurfaceSkin 0 1 "silvermap.png" + Skin 0 "Shell_Kinylum.png" Scale 0.024 0.024 0.024 ZOffset 16 ROTATING FrameIndex XZW1 A 0 0 } -Model "BlueShell8" -{ - Path "models" - - Model 0 "ShellAmmo_Eight_d.3d" - SurfaceSkin 0 0 "Shell_Kinylum.png" - SurfaceSkin 0 1 "silvermap.png" - Scale 0.024 0.024 0.024 - ZOffset 16 - ROTATING - - FrameIndex XZW1 A 0 0 -} - Model "BlackShell" { Path "models" Model 0 "ShellAmmo_One_d.3d" - SurfaceSkin 0 0 "Shell_Fuck.png" - SurfaceSkin 0 1 "silvermap.png" + Skin 0 "Shell_Fuck.png" Scale 0.024 0.024 0.024 PitchOffset 30 ZOffset 16 @@ -272,8 +166,7 @@ Model "BlackShell2" Path "models" Model 0 "ShellAmmo_Two_d.3d" - SurfaceSkin 0 0 "Shell_Fuck.png" - SurfaceSkin 0 1 "silvermap.png" + Skin 0 "Shell_Fuck.png" Scale 0.024 0.024 0.024 ZOffset 16 ROTATING @@ -285,8 +178,7 @@ Model "BlackShell4" Path "models" Model 0 "ShellAmmo_Four_d.3d" - SurfaceSkin 0 0 "Shell_Fuck.png" - SurfaceSkin 0 1 "silvermap.png" + Skin 0 "Shell_Fuck.png" Scale 0.024 0.024 0.024 ZOffset 16 ROTATING @@ -299,8 +191,7 @@ Model "PurpleShell" Path "models" Model 0 "ShellAmmo_One_d.3d" - SurfaceSkin 0 0 "Shell_Ball.png" - SurfaceSkin 0 1 "silvermap.png" + Skin 0 "Shell_Ball.png" Scale 0.024 0.024 0.024 PitchOffset 30 ZOffset 16 @@ -313,8 +204,7 @@ Model "PurpleShell2" Path "models" Model 0 "ShellAmmo_Two_d.3d" - SurfaceSkin 0 0 "Shell_Ball.png" - SurfaceSkin 0 1 "silvermap.png" + Skin 0 "Shell_Ball.png" Scale 0.024 0.024 0.024 ZOffset 16 ROTATING @@ -326,8 +216,7 @@ Model "PurpleShell4" Path "models" Model 0 "ShellAmmo_Four_d.3d" - SurfaceSkin 0 0 "Shell_Ball.png" - SurfaceSkin 0 1 "silvermap.png" + Skin 0 "Shell_Ball.png" Scale 0.024 0.024 0.024 ZOffset 16 ROTATING @@ -340,8 +229,7 @@ Model "GoldShell" Path "models" Model 0 "ShellAmmo_One_d.3d" - SurfaceSkin 0 0 "Shell_Gold.png" - SurfaceSkin 0 1 "goldmap.png" + Skin 0 "Shell_Gold.png" Scale 0.024 0.024 0.024 PitchOffset 30 ZOffset 16 @@ -349,6 +237,30 @@ Model "GoldShell" FrameIndex XZW1 A 0 0 } +Model "GoldShell2" +{ + Path "models" + + Model 0 "ShellAmmo_Two_d.3d" + Skin 0 "Shell_Gold.png" + Scale 0.024 0.024 0.024 + ZOffset 16 + ROTATING + + FrameIndex XZW1 A 0 0 +} +Model "GoldShell4" +{ + Path "models" + + Model 0 "ShellAmmo_Four_d.3d" + Skin 0 "Shell_Gold.png" + Scale 0.024 0.024 0.024 + ZOffset 16 + ROTATING + + FrameIndex XZW1 A 0 0 +} Model "EvisceratorShell" { @@ -574,8 +486,8 @@ Model "CandyGunBullets" Path "models" Model 0 "ExplodiumBullet_d.3d" - SurfaceSkin 0 0 "BooletCandy.png" - SurfaceSkin 0 1 "CandyCasing_Boolet.png" + SurfaceSkin 0 0 "CandyBullet.png" + SurfaceSkin 0 1 "CandyCasing.png" Scale 0.02 0.02 0.02 PitchOffset 30 ZOffset 16 diff --git a/modeldef.candygun b/modeldef.candygun index d6528f459..014475e55 100644 --- a/modeldef.candygun +++ b/modeldef.candygun @@ -165,7 +165,6 @@ Model "CandyGun" FrameIndex XZW2 G 1 10 FrameIndex XZW2 H 1 11 // Fire - SurfaceSkin 1 4 "CandyCasing.png" // show casing FrameIndex XZW2 I 1 13 FrameIndex XZW2 J 1 14 FrameIndex XZW2 K 1 15 @@ -175,9 +174,9 @@ Model "CandyGun" FrameIndex XZW2 O 1 19 FrameIndex XZW2 P 1 20 FrameIndex XZW2 Q 1 21 + // unused FrameIndex XZW2 R 1 22 FrameIndex XZW2 S 1 23 - SurfaceSkin 1 4 "" // hide casing // Reload (Part 1) FrameIndex XZW2 T 1 25 FrameIndex XZW2 U 1 26 @@ -414,4 +413,21 @@ Model "CandyGun" FrameIndex XZWB X 1 152 FrameIndex XZWB Y 1 153 FrameIndex XZWB Z 1 154 + // Casing + SurfaceSkin 1 0 "" + SurfaceSkin 1 1 "" + SurfaceSkin 1 2 "" + SurfaceSkin 1 3 "" + SurfaceSkin 1 4 "CandyCasing_Used.png" + SurfaceSkin 1 5 "" + FrameIndex XZWC A 1 14 + FrameIndex XZWC B 1 15 + FrameIndex XZWC C 1 16 + FrameIndex XZWC D 1 17 + FrameIndex XZWC E 1 18 + FrameIndex XZWC F 1 19 + FrameIndex XZWC G 1 20 + FrameIndex XZWC H 1 21 + FrameIndex XZWC I 1 22 + FrameIndex XZWC J 1 23 } diff --git a/modeldef.eviscerator b/modeldef.eviscerator index 7e6b859fb..5a93b4370 100644 --- a/modeldef.eviscerator +++ b/modeldef.eviscerator @@ -197,7 +197,6 @@ Model "Eviscerator" FrameIndex XZW3 Q 1 44 FrameIndex XZW3 R 1 45 // Eject - SurfaceSkin 1 4 "EvisceratorShell.png" FrameIndex XZW3 S 1 47 FrameIndex XZW3 T 1 48 FrameIndex XZW3 U 1 49 @@ -215,7 +214,6 @@ Model "Eviscerator" FrameIndex XZW4 G 1 61 FrameIndex XZW4 H 1 62 FrameIndex XZW4 I 1 63 - SurfaceSkin 1 4 "" // Switch FrameIndex XZW4 J 1 65 FrameIndex XZW4 K 1 66 @@ -282,7 +280,6 @@ Model "Eviscerator" FrameIndex XZW6 P 1 125 FrameIndex XZW6 Q 1 126 // Eject - SurfaceSkin 1 4 "EvisceratorShell.png" FrameIndex XZW6 R 1 128 FrameIndex XZW6 S 1 129 FrameIndex XZW6 T 1 130 @@ -300,7 +297,6 @@ Model "Eviscerator" FrameIndex XZW7 F 1 142 FrameIndex XZW7 G 1 143 FrameIndex XZW7 H 1 144 - SurfaceSkin 1 4 "" // Switch FrameIndex XZW7 I 1 146 FrameIndex XZW7 J 1 147 @@ -407,4 +403,20 @@ Model "Eviscerator" FrameIndex XZWB A 1 247 FrameIndex XZWB B 1 248 FrameIndex XZWB C 1 249 + // Casing Ejected + SurfaceSkin 1 0 "" + SurfaceSkin 1 1 "" + SurfaceSkin 1 2 "" + SurfaceSkin 1 3 "" + SurfaceSkin 1 4 "EvisceratorShell.png" + FrameIndex XZWB D 1 51 + FrameIndex XZWB E 1 52 + FrameIndex XZWB F 1 53 + FrameIndex XZWB G 1 54 + FrameIndex XZWB H 1 55 + FrameIndex XZWB I 1 56 + FrameIndex XZWB J 1 57 + FrameIndex XZWB K 1 58 + FrameIndex XZWB L 1 59 + FrameIndex XZWB M 1 60 } diff --git a/modeldef.explodiumgun b/modeldef.explodiumgun index d0219424d..ea4136577 100644 --- a/modeldef.explodiumgun +++ b/modeldef.explodiumgun @@ -3,7 +3,7 @@ Model "ExplodiumCasing" Path "models" Model 0 "ExplodiumCasing_d.3d" - Skin 0 "ExplodiumCasing.png" + Skin 0 "ExplodiumCasing_Used.png" Scale 0.03 0.03 0.03 USEACTORPITCH USEACTORROLL @@ -89,10 +89,6 @@ Model "ExplodiumGun" FrameIndex XZWZ J 2 0 } -Model "ExplodiumGun" -{ -} - Model "ExplodiumGun" { Path "models" @@ -262,6 +258,7 @@ Model "ExplodiumGun" FrameIndex XZW6 Z 1 121 SurfaceSkin 1 5 "ExplodiumGun.png" // show mag // Check Bullet + SurfaceSkin 1 4 "ExplodiumCasing.png" // show casing FrameIndex XZW7 A 1 157 FrameIndex XZW7 B 1 158 FrameIndex XZW7 C 1 159 @@ -281,6 +278,7 @@ Model "ExplodiumGun" FrameIndex XZW7 Q 1 173 FrameIndex XZW7 R 1 174 FrameIndex XZW7 S 1 175 + SurfaceSkin 1 4 "" // hide casing // Melee FrameIndex XZW7 T 1 177 FrameIndex XZW7 U 1 178 @@ -345,7 +343,7 @@ Model "ExplodiumGun" SurfaceSkin 1 1 "" SurfaceSkin 1 2 "" SurfaceSkin 1 3 "" - SurfaceSkin 1 4 "ExplodiumCasing.png" + SurfaceSkin 1 4 "ExplodiumCasing_Used.png" SurfaceSkin 1 5 "" FrameIndex XZWA A 1 14 FrameIndex XZWA B 1 15 diff --git a/modeldef.explodiumgun2 b/modeldef.explodiumgun2 index ec8973183..60fd5828a 100644 --- a/modeldef.explodiumgun2 +++ b/modeldef.explodiumgun2 @@ -374,7 +374,7 @@ Model "DualExplodiumGun" SurfaceSkin 1 1 "" SurfaceSkin 1 2 "" SurfaceSkin 1 3 "" - SurfaceSkin 1 4 "ExplodiumCasing.png" + SurfaceSkin 1 4 "ExplodiumCasing_Used.png" SurfaceSkin 1 5 "" // RIGHT Model 1 "ExplodiumGun1st_d.3d" diff --git a/modeldef.silverbullet b/modeldef.silverbullet index 8031b83c7..f715477d0 100644 --- a/modeldef.silverbullet +++ b/modeldef.silverbullet @@ -3,7 +3,7 @@ Model "SilverBulletCasing" Path "models" Model 0 "SilverbulletCase_d.3d" - Skin 0 "SilverbulletBullet.png" + Skin 0 "SilverbulletBullet_Used.png" Scale 0.04 0.04 0.04 AngleOffset 90 USEACTORPITCH @@ -18,7 +18,7 @@ Model "SilverBulletCasing2" Path "models" Model 0 "SilverbulletCase_FCB_d.3d" - Skin 0 "SilverbulletBullet_FCB.png" + Skin 0 "SilverbulletBullet_FCB_Used.png" Scale 0.04 0.04 0.04 AngleOffset 90 USEACTORPITCH @@ -104,7 +104,7 @@ Model "SilverBullet" DONTCULLBACKFACES // Casing (XSB) - SurfaceSkin 2 5 "SilverbulletBullet.png" + SurfaceSkin 2 5 "SilverbulletBullet_Used.png" FrameIndex XZW7 D 2 30 FrameIndex XZW7 E 2 31 FrameIndex XZW7 F 2 32 @@ -118,7 +118,7 @@ Model "SilverBullet" FrameIndex XZW7 N 2 40 FrameIndex XZW7 O 2 41 // Casing (FCB) - SurfaceSkin 2 5 "SilverbulletBullet_FCB.png" + SurfaceSkin 2 5 "SilverbulletBullet_FCB_Used.png" FrameIndex XZWD D 2 30 FrameIndex XZWD E 2 31 FrameIndex XZWD F 2 32 diff --git a/modeldef.spreadgun b/modeldef.spreadgun index ae6c66f57..0b2163189 100644 --- a/modeldef.spreadgun +++ b/modeldef.spreadgun @@ -156,7 +156,7 @@ Model "CorrosiveFlechette" Path "models" Model 0 "Boolet_a.3d" - Skin 0 "Flech.png" + Skin 0 "Boolet_Flech.png" Scale 0.01 0.001 0.001 USEACTORPITCH USEACTORROLL diff --git a/models/Boolet_Candy.png b/models/Boolet_Candy.png new file mode 100644 index 000000000..73e4c69e5 Binary files /dev/null and b/models/Boolet_Candy.png differ diff --git a/models/Boolet_Explodium.png b/models/Boolet_Explodium.png new file mode 100644 index 000000000..c783de7ef Binary files /dev/null and b/models/Boolet_Explodium.png differ diff --git a/models/Flech.png b/models/Boolet_Flech.png similarity index 100% rename from models/Flech.png rename to models/Boolet_Flech.png diff --git a/models/BooletCandy.png b/models/CandyBullet.png similarity index 100% rename from models/BooletCandy.png rename to models/CandyBullet.png diff --git a/models/CandyCasing.png b/models/CandyCasing.png index 3dece754d..4b1e7da82 100644 Binary files a/models/CandyCasing.png and b/models/CandyCasing.png differ diff --git a/models/CandyCasing_Boolet.png b/models/CandyCasing_Boolet.png deleted file mode 100644 index 4b1e7da82..000000000 Binary files a/models/CandyCasing_Boolet.png and /dev/null differ diff --git a/models/CandyCasing_Used.png b/models/CandyCasing_Used.png new file mode 100644 index 000000000..3dece754d Binary files /dev/null and b/models/CandyCasing_Used.png differ diff --git a/models/Eviscerator1st.blend b/models/Eviscerator1st.blend index 6b08d9cf4..eb81ab34f 100644 Binary files a/models/Eviscerator1st.blend and b/models/Eviscerator1st.blend differ diff --git a/models/Eviscerator1st_a.3d b/models/Eviscerator1st_a.3d index 32943c655..00a34ce97 100644 Binary files a/models/Eviscerator1st_a.3d and b/models/Eviscerator1st_a.3d differ diff --git a/models/Eviscerator1st_d.3d b/models/Eviscerator1st_d.3d index 60187f46a..e22a1c340 100644 Binary files a/models/Eviscerator1st_d.3d and b/models/Eviscerator1st_d.3d differ diff --git a/models/BooletExplodium.png b/models/ExplodiumBullet.png similarity index 100% rename from models/BooletExplodium.png rename to models/ExplodiumBullet.png diff --git a/models/ExplodiumCasing.png b/models/ExplodiumCasing.png index 658f8e7f8..15a214d61 100644 Binary files a/models/ExplodiumCasing.png and b/models/ExplodiumCasing.png differ diff --git a/models/ExplodiumCasing_Boolet.png b/models/ExplodiumCasing_Boolet.png deleted file mode 100644 index 15a214d61..000000000 Binary files a/models/ExplodiumCasing_Boolet.png and /dev/null differ diff --git a/models/ExplodiumCasing_Used.png b/models/ExplodiumCasing_Used.png new file mode 100644 index 000000000..658f8e7f8 Binary files /dev/null and b/models/ExplodiumCasing_Used.png differ diff --git a/models/Silverbullet.blend b/models/Silverbullet.blend index ddf2a8115..bc6fa272c 100644 Binary files a/models/Silverbullet.blend and b/models/Silverbullet.blend differ diff --git a/models/Silverbullet1st.blend b/models/Silverbullet1st.blend index ca82a2bb9..b6bafe312 100644 Binary files a/models/Silverbullet1st.blend and b/models/Silverbullet1st.blend differ diff --git a/models/Silverbullet1st_d.3d b/models/Silverbullet1st_d.3d index ebb3646e8..e7e20d366 100644 Binary files a/models/Silverbullet1st_d.3d and b/models/Silverbullet1st_d.3d differ diff --git a/models/SilverbulletBullet.png b/models/SilverbulletBullet.png index 45d547343..40f12d8d5 100644 Binary files a/models/SilverbulletBullet.png and b/models/SilverbulletBullet.png differ diff --git a/models/SilverbulletBullet_FCB.png b/models/SilverbulletBullet_FCB.png index a141cfbc5..c2f89d5d4 100644 Binary files a/models/SilverbulletBullet_FCB.png and b/models/SilverbulletBullet_FCB.png differ diff --git a/models/SilverbulletBullet_FCB_Used.png b/models/SilverbulletBullet_FCB_Used.png new file mode 100644 index 000000000..be0ffa304 Binary files /dev/null and b/models/SilverbulletBullet_FCB_Used.png differ diff --git a/models/SilverbulletBullet_FCB_d.3d b/models/SilverbulletBullet_FCB_d.3d index c8b9bd6bc..1d507e3bd 100644 Binary files a/models/SilverbulletBullet_FCB_d.3d and b/models/SilverbulletBullet_FCB_d.3d differ diff --git a/models/SilverbulletBullet_Used.png b/models/SilverbulletBullet_Used.png new file mode 100644 index 000000000..9b5d92adf Binary files /dev/null and b/models/SilverbulletBullet_Used.png differ diff --git a/models/SilverbulletBullet_d.3d b/models/SilverbulletBullet_d.3d index c8b9bd6bc..1d507e3bd 100644 Binary files a/models/SilverbulletBullet_d.3d and b/models/SilverbulletBullet_d.3d differ diff --git a/models/SilverbulletCase_FCB_d.3d b/models/SilverbulletCase_FCB_d.3d index 8e979e3ba..5ed24aec2 100644 Binary files a/models/SilverbulletCase_FCB_d.3d and b/models/SilverbulletCase_FCB_d.3d differ diff --git a/models/SilverbulletCase_d.3d b/models/SilverbulletCase_d.3d index 8e979e3ba..6ef745fd1 100644 Binary files a/models/SilverbulletCase_d.3d and b/models/SilverbulletCase_d.3d differ diff --git a/models/SilverbulletProjectile_a.3d b/models/SilverbulletProjectile_a.3d new file mode 100644 index 000000000..65aec978c Binary files /dev/null and b/models/SilverbulletProjectile_a.3d differ diff --git a/models/SilverbulletProjectile_d.3d b/models/SilverbulletProjectile_d.3d new file mode 100644 index 000000000..66f87336a Binary files /dev/null and b/models/SilverbulletProjectile_d.3d differ diff --git a/zscript/dlc1/swwm_dlcammo.zsc b/zscript/dlc1/swwm_dlcammo.zsc index 17c8036eb..68c7014c3 100644 --- a/zscript/dlc1/swwm_dlcammo.zsc +++ b/zscript/dlc1/swwm_dlcammo.zsc @@ -284,7 +284,6 @@ Class RayBolt : MagAmmo MagAmmo.ParentAmmo "RayAmmo"; MagAmmo.ClipSize 20; Inventory.MaxAmount 25; - Inventory.InterHubAmount 25; +FLOATBOB; FloatBobStrength 0.25; } @@ -396,7 +395,6 @@ Class GrandSpear : MagAmmo MagAmmo.ParentAmmo "GrandAmmo"; MagAmmo.ClipSize 5; Inventory.MaxAmount 8; - Inventory.InterHubAmount 8; +FLOATBOB; FloatBobStrength 0.25; } diff --git a/zscript/swwm_ammo.zsc b/zscript/swwm_ammo.zsc index bb8e4c594..5970b0701 100644 --- a/zscript/swwm_ammo.zsc +++ b/zscript/swwm_ammo.zsc @@ -417,7 +417,6 @@ Class RedShell2 : RedShell { Inventory.Amount 2; Radius 6; - Height 20; } } Class RedShell4 : RedShell @@ -426,34 +425,6 @@ Class RedShell4 : RedShell { Inventory.Amount 4; Radius 6; - Height 20; - } -} -Class RedShell8 : RedShell -{ - Default - { - Inventory.Amount 8; - Radius 8; - Height 20; - } -} -Class RedShell12 : RedShell -{ - Default - { - Inventory.Amount 12; - Radius 10; - Height 20; - } -} -Class RedShell16 : RedShell -{ - Default - { - Inventory.Amount 16; - Radius 10; - Height 20; } } @@ -492,7 +463,6 @@ Class GreenShell2 : GreenShell { Inventory.Amount 2; Radius 6; - Height 20; } } Class GreenShell4 : GreenShell @@ -501,25 +471,6 @@ Class GreenShell4 : GreenShell { Inventory.Amount 4; Radius 6; - Height 20; - } -} -Class GreenShell8 : GreenShell -{ - Default - { - Inventory.Amount 8; - Radius 8; - Height 20; - } -} -Class GreenShell12 : GreenShell -{ - Default - { - Inventory.Amount 12; - Radius 10; - Height 20; } } @@ -543,7 +494,6 @@ Class WhiteShell : Ammo +FLOATBOB; FloatBobStrength 0.25; Radius 4; - Height 20; } States { @@ -558,7 +508,6 @@ Class WhiteShell2 : WhiteShell { Inventory.Amount 2; Radius 6; - Height 20; } } Class WhiteShell4 : WhiteShell @@ -567,16 +516,6 @@ Class WhiteShell4 : WhiteShell { Inventory.Amount 4; Radius 6; - Height 20; - } -} -Class WhiteShell8 : WhiteShell -{ - Default - { - Inventory.Amount 8; - Radius 8; - Height 20; } } @@ -615,7 +554,6 @@ Class BlueShell2 : BlueShell { Inventory.Amount 2; Radius 6; - Height 20; } } Class BlueShell4 : BlueShell @@ -624,16 +562,6 @@ Class BlueShell4 : BlueShell { Inventory.Amount 4; Radius 6; - Height 20; - } -} -Class BlueShell8 : BlueShell -{ - Default - { - Inventory.Amount 8; - Radius 8; - Height 20; } } @@ -672,7 +600,6 @@ Class BlackShell2 : BlackShell { Inventory.Amount 2; Radius 6; - Height 20; } } Class BlackShell4 : BlackShell @@ -681,7 +608,6 @@ Class BlackShell4 : BlackShell { Inventory.Amount 4; Radius 6; - Height 20; } } @@ -720,7 +646,6 @@ Class PurpleShell2 : PurpleShell { Inventory.Amount 2; Radius 6; - Height 20; } } Class PurpleShell4 : PurpleShell @@ -729,7 +654,6 @@ Class PurpleShell4 : PurpleShell { Inventory.Amount 4; Radius 6; - Height 20; } } @@ -777,7 +701,7 @@ Class GoldShell : Ammo action void A_GoldShellTrail() { if ( Random[Goldy](0,2) ) return; - Spawn("GoldShellSparkle",Vec3Offset(FRandom[Goldy](-2,2),FRandom[Goldy](-2,2),FRandom[Goldy](10,18))); + Spawn("GoldShellSparkle",Vec3Offset(FRandom[Goldy](-radius,radius)/2.,FRandom[Goldy](-radius,radius)/2.,FRandom[Goldy](10,18))); } Default @@ -803,6 +727,22 @@ Class GoldShell : Ammo Wait; } } +Class GoldShell2 : GoldShell +{ + Default + { + Inventory.Amount 2; + Radius 6; + } +} +Class GoldShell4 : GoldShell +{ + Default + { + Inventory.Amount 4; + Radius 6; + } +} // ============================================================================ // Eviscerator ammo @@ -1231,7 +1171,6 @@ Class SilverBullets : MagAmmo MagAmmo.ParentAmmo "SilverBulletAmmo"; MagAmmo.ClipSize 5; Inventory.MaxAmount 8; - Inventory.InterHubAmount 8; +FLOATBOB; FloatBobStrength 0.25; Radius 4; @@ -1254,7 +1193,6 @@ Class SilverBullets2 : MagAmmo MagAmmo.ParentAmmo "SilverBulletAmmo2"; MagAmmo.ClipSize 5; Inventory.MaxAmount 8; - Inventory.InterHubAmount 8; +FLOATBOB; FloatBobStrength 0.25; Radius 4; @@ -1373,7 +1311,6 @@ Class CandyGunBullets : MagAmmo MagAmmo.ParentAmmo "CandyGunAmmo"; MagAmmo.ClipSize 7; Inventory.MaxAmount 10; - Inventory.InterHubAmount 10; +FLOATBOB; FloatBobStrength 0.25; Radius 2; @@ -1461,7 +1398,7 @@ Class YnykronAmmo : Ammo Inventory.Amount 1; Inventory.MaxAmount 1; Ammo.BackpackAmount 0; - Ammo.BackpackMaxAmount 4; + Ammo.BackpackMaxAmount 3; Ammo.DropAmount 1; +FLOATBOB; FloatBobStrength 0.25; diff --git a/zscript/swwm_danmaku.zsc b/zscript/swwm_danmaku.zsc index 20c4c58f6..5547582e2 100644 --- a/zscript/swwm_danmaku.zsc +++ b/zscript/swwm_danmaku.zsc @@ -705,6 +705,7 @@ Class EvisceratorCasing : SWWMCasing Class Eviscerator : SWWMWeapon { + double casex, casey; bool isfiring; // barrel is extended bool extended; @@ -1024,7 +1025,13 @@ Class Eviscerator : SWWMWeapon XZW2 A 4; XZW3 STUV 2; XZW3 W 1 A_StartSound("eviscerator/eject",CHAN_WEAPON,CHANF_OVERLAP); - XZW3 X 1 A_Overlay(-9999,"EjectSmoke"); + XZW3 X 1 + { + int layer = PSP_WEAPON+1; + while ( player.FindPSprite(layer) ) layer++; + A_Overlay(layer,"EjectCasing"); + A_Overlay(-9999,"EjectSmoke"); + } XZW3 YZ 1; XZW4 AB 1; XZW4 C 1 @@ -1039,7 +1046,13 @@ Class Eviscerator : SWWMWeapon XZW4 Z 4; XZW6 RSTU 2; XZW6 V 1 A_StartSound("eviscerator/eject",CHAN_WEAPON,CHANF_OVERLAP); - XZW6 W 1 A_Overlay(-9999,"EjectSmoke"); + XZW6 W 1 + { + int layer = PSP_WEAPON+1; + while ( player.FindPSprite(layer) ) layer++; + A_Overlay(layer,"EjectCasing"); + A_Overlay(-9999,"EjectSmoke"); + } XZW6 XYZ 1; XZW7 A 1; XZW7 B 1 @@ -1050,6 +1063,16 @@ Class Eviscerator : SWWMWeapon XZW7 CDE 1; XZW7 FGH 2; Goto ReadyExt; + EjectCasing: + XZWB D 1 + { + A_OverlayOffset(OverlayID(),0,0); + invoker.casex = FRandom[Eviscerator](-2.,2.); + invoker.casey = FRandom[Eviscerator](-2.,2.); + } + XZWB EFGHIJKLM 1 A_OverlayOffset(OverlayID(),invoker.casex,invoker.casey,WOF_ADD|WOF_INTERPOLATE); + TNT1 A 1 A_EvisceratorEject(); + Stop; EjectSmoke: TNT1 A 1 A_EvisceratorCasingSmoke((10,2,-3)); TNT1 A 1 A_EvisceratorCasingSmoke((10,-1,-2)); @@ -1059,7 +1082,6 @@ Class Eviscerator : SWWMWeapon TNT1 A 1 A_EvisceratorCasingSmoke((10,-8.5,-5)); TNT1 A 1 A_EvisceratorCasingSmoke((10,-10,-9)); TNT1 A 1 A_EvisceratorCasingSmoke((10,-11,-14)); - TNT1 A 1 A_EvisceratorEject(); Stop; AltFire: XZW2 A 2 diff --git a/zscript/swwm_funstuff.zsc b/zscript/swwm_funstuff.zsc index 1baa3995e..0c73a180b 100644 --- a/zscript/swwm_funstuff.zsc +++ b/zscript/swwm_funstuff.zsc @@ -929,7 +929,8 @@ Class CBoxLight : SpotLightAttenuated // Collectible box (recycling of discarded "chance box" item) Class Chancebox : Actor { - bool dud; + bool dud; // if true, cannot drop a collectible + bool chanceinit; // internal state has been initialized static void SpawnChanceboxes() { @@ -1077,19 +1078,19 @@ Class Chancebox : Actor if ( Random[Chancebox](0,1) ) { let a = Spawn(!Random[Chancebox](0,2)?"GoldShell":(Random[Chancebox](0,1)||(gameinfo.gametype&GAME_Strife))?"GrilledCheeseSandwich":"YnykronAmmo",pos); - a.bDROPPED = true; + a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,4); } else if ( !Random[Chancebox](0,2) ) { - for ( int i=0; i<=12; i++ ) + for ( int i=0; i<=6; i++ ) { let a = Spawn((i==0)?"CandyGun":"CandyGunBullets",pos); - a.bDROPPED = true; + a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,4); - if ( i > 0 ) a.vel.xy = (cos(i*30),sin(i*30))*FRandom[Chancebox](1,2); + if ( i > 0 ) a.vel.xy = (cos(i*60),sin(i*60))*FRandom[Chancebox](1,2); } } else if ( !Random[Chancebox](0,2) ) @@ -1097,7 +1098,7 @@ Class Chancebox : Actor for ( int i=0; i<3; i++ ) { let a = Spawn("SilverBullets2",pos); - a.bDROPPED = true; + a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,4); a.vel.xy = (cos(i*120),sin(i*120))*FRandom[Chancebox](1,2); @@ -1105,7 +1106,7 @@ Class Chancebox : Actor for ( int i=0; i<6; i++ ) { let a = Spawn("SilverBullets",pos); - a.bDROPPED = true; + a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,4); a.vel.xy = (cos(i*60),sin(i*60))*FRandom[Chancebox](3,4); @@ -1114,13 +1115,13 @@ Class Chancebox : Actor else if ( Random[Chancebox](0,1) ) { let a = Spawn("HellblazerWarheads",pos); - a.bDROPPED = true; + a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,4); for ( int i=0; i<3; i++ ) { a = Spawn("HellblazerRavagers",pos); - a.bDROPPED = true; + a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,4); a.vel.xy = (cos(i*120),sin(i*120))*FRandom[Chancebox](1,2); @@ -1128,7 +1129,7 @@ Class Chancebox : Actor for ( int i=0; i<5; i++ ) { a = Spawn("HellblazerCrackshots",pos); - a.bDROPPED = true; + a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,4); a.vel.xy = (cos(i*72),sin(i*72))*FRandom[Chancebox](3,4); @@ -1136,7 +1137,7 @@ Class Chancebox : Actor for ( int i=0; i<8; i++ ) { a = Spawn("HellblazerMissiles",pos); - a.bDROPPED = true; + a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,4); a.vel.xy = (cos(i*45),sin(i*45))*FRandom[Chancebox](5,6); @@ -1145,13 +1146,13 @@ Class Chancebox : Actor else if ( Random[Chancebox](0,1) ) { let a = Spawn("BlackShell",pos); - a.bDROPPED = true; + a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,4); for ( int i=0; i<3; i++ ) { a = Spawn("BlueShell",pos); - a.bDROPPED = true; + a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,4); a.vel.xy = (cos(i*120),sin(i*120))*FRandom[Chancebox](1,2); @@ -1159,7 +1160,7 @@ Class Chancebox : Actor for ( int i=0; i<8; i++ ) { a = Spawn((i%2)?"WhiteShell":"PurpleShell",pos); - a.bDROPPED = true; + a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,4); a.vel.xy = (cos(i*72),sin(i*72))*FRandom[Chancebox](3,4); @@ -1167,7 +1168,7 @@ Class Chancebox : Actor for ( int i=0; i<12; i++ ) { a = Spawn((i%2)?"RedShell":"GreenShell",pos); - a.bDROPPED = true; + a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,4); a.vel.xy = (cos(i*30),sin(i*30))*FRandom[Chancebox](5,6); @@ -1175,10 +1176,10 @@ Class Chancebox : Actor } else if ( Random[Chancebox](0,1) ) { - for ( int i=0; i<100; i++ ) + for ( int i=0; i<20; i++ ) { let a = Spawn("HealthNuggetItem",pos); - a.bDROPPED = true; + a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,8); a.vel.xy = (cos(i*3.6),sin(i*3.6))*FRandom[Chancebox](1,8); @@ -1189,7 +1190,7 @@ Class Chancebox : Actor for ( int i=0; i<=15; i++ ) { let a = Spawn((i==0)?"RefresherItem":(i%3)?"HealthNuggetItem":"ArmorNuggetItem",pos); - a.bDROPPED = true; + a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,4); if ( i > 0 ) a.vel.xy = (cos(i*24),sin(i*24))*FRandom[Chancebox](1,2); @@ -1200,7 +1201,7 @@ Class Chancebox : Actor { // pop one at random let a = Spawn(candidates[Random[Chancebox](0,candidates.Size()-1)],pos); - a.bDROPPED = true; + a.bDROPPED = false; a.bNOGRAVITY = false; a.vel.z = FRandom[Chancebox](2,4); } @@ -1236,15 +1237,33 @@ Class Chancebox : Actor double rang = user.player?PlayerPawn(user.player.mo).UseRange:(user.Height/2); if ( abs(diff.z) > rang ) return false; if ( CurState != FindState("Spawn") ) return false; - if ( !dud ) + if ( !chanceinit ) { - if ( !Random[Chancebox](0,2) ) + int col = 0; + let ti = ThinkerIterator.Create("SWWMCollectible"); + SWWMCollectible c; + while ( c = SWWMCollectible(ti.Next()) ) col++; + int tcol = 0; + for ( int i=0; i)(AllActorClasses[i]); + if ( !c || (c == 'SWWMCollectible') ) continue; + let def = GetDefaultByType(c); + // check that we can collect it in this IWAD + if ( !(gameinfo.gametype&def.avail) ) continue; + tcol++; + } + int alldudchance = 5-(4*col)/tcol; // chance for all boxes to be duds (no collectibles) + if ( (col > 0) && !Random[Chancebox](0,alldudchance) ) { // all boxes are duds let ti = ThinkerIterator.Create("Chancebox"); Chancebox c; while ( c = Chancebox(ti.Next()) ) + { + c.chanceinit = true; c.dud = true; + } } else if ( Random[Chancebox](0,2) ) { @@ -1265,12 +1284,21 @@ Class Chancebox : Actor // the others are duds let ti = ThinkerIterator.Create("Chancebox"); Chancebox c; + bool onemore = !Random[Chancebox](0,2); // unless... while ( c = Chancebox(ti.Next()) ) { - if ( c == self ) continue; - c.dud = true; // we found one, the others just drop goodies + if ( (c == self) || c.chanceinit ) continue; + c.chanceinit = true; + if ( onemore ) + { + onemore = false; + // this one isn't a dud either (wow, how lucky) + c.dud = false; + } + else c.dud = true; // this one's a dud } } + chanceinit = true; } if ( bCOUNTITEM ) { diff --git a/zscript/swwm_handler.zsc b/zscript/swwm_handler.zsc index 09f7f6718..8012e6252 100644 --- a/zscript/swwm_handler.zsc +++ b/zscript/swwm_handler.zsc @@ -2372,7 +2372,7 @@ Class SWWMHandler : EventHandler // respect final replacements if ( e.IsFinal ) return; // shell types (sorted by rarity - static const Class redpool[] = {"RedShell","RedShell2","RedShell4","RedShell8"}; + static const Class redpool[] = {"RedShell","RedShell2","RedShell4"}; static const Class greenpool[] = {"GreenShell","GreenShell2","GreenShell4"}; static const Class whitepool[] = {"WhiteShell","WhiteShell2"}; static const Class purplepool[] = {"PurpleShell","PurpleShell2","PurpleShell4"}; diff --git a/zscript/swwm_player.zsc b/zscript/swwm_player.zsc index 2ddf0e4ea..26f50b105 100644 --- a/zscript/swwm_player.zsc +++ b/zscript/swwm_player.zsc @@ -89,6 +89,7 @@ Class Demolitionist : PlayerPawn DamageFactor "Poison", 0.; DamageFactor "PoisonCloud", 0.; DamageFactor "Falling", 0.; + DamageFactor "Crush", .25; Demolitionist.DashFuel 240.; +NOBLOOD; +DONTGIB; diff --git a/zscript/swwm_tastytreat.zsc b/zscript/swwm_tastytreat.zsc index 66ec3cf7e..7779c94ab 100644 --- a/zscript/swwm_tastytreat.zsc +++ b/zscript/swwm_tastytreat.zsc @@ -891,6 +891,7 @@ Class CandyGun : SWWMWeapon { int clipcount; bool chambered; + double casex, casey; transient ui TextureID WeaponBox; transient ui Font TewiFont; bool tospecial; @@ -1249,9 +1250,26 @@ Class CandyGun : SWWMWeapon Wait; Fire: XZW2 A 1 A_Schutt(); - XZW2 IJKLMNOPQR 1; - XZW2 S 2 A_DropCasing(); + XZW2 I 1; + XZW2 J 1 + { + int layer = PSP_WEAPON+1; + while ( player.FindPSprite(layer) ) layer++; + A_Overlay(layer,"Casing"); + } + XZW2 KLMNOP 1; + XZW2 Q 2; Goto Ready; + Casing: + XZWC A 1 + { + A_OverlayOffset(OverlayID(),0,0); + invoker.casex = FRandom[Explodium](-1.,5.); + invoker.casey = FRandom[Explodium](-2.,1.); + } + XZWC BCDEFGHIJ 1 A_OverlayOffset(OverlayID(),invoker.casex,invoker.casey,WOF_ADD|WOF_INTERPOLATE); + TNT1 A 1 A_DropCasing(); + Stop; AltFire: XZW2 A 2 { diff --git a/zscript/swwm_thiccboolet.zsc b/zscript/swwm_thiccboolet.zsc index ffb99cac8..0f6475eec 100644 --- a/zscript/swwm_thiccboolet.zsc +++ b/zscript/swwm_thiccboolet.zsc @@ -648,6 +648,7 @@ Class SilverBullet : SWWMWeapon bool chambered, fired; bool fcbchambered, fcbloaded, fcbselected; int clipcount; + double casex, casey; transient ui TextureID WeaponBox[2], ZoomBar, BulletIcon[2], AmmoIcon[2]; transient ui Font TewiFont; @@ -1133,7 +1134,7 @@ Class SilverBullet : SWWMWeapon Vector3 x, y, z; [x, y, z] = swwm_CoordUtil.GetAxes(pitch,angle,roll); vel += x*min(1.,invoker.specialf1)*(600./Mass); - A_OverlayAlpha(PSP_WEAPON+2,clamp(invoker.specialf1*3.,0.,1.)); + A_OverlayAlpha(PSP_WEAPON+1,clamp(invoker.specialf1*3.,0.,1.)); if ( Random[SilverBullet](0,int(invoker.specialf1*2)) ) self.DamageMobj(invoker,self,1,'jet'); Vector3 origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),-x*10-z*10); @@ -1321,9 +1322,9 @@ Class SilverBullet : SWWMWeapon TNT1 A 0 { A_StartSound("silverbullet/jet",CHAN_WEAPON,CHANF_OVERLAP); - A_Overlay(PSP_WEAPON+2,"JetSmoke"); - A_OverlayFlags(PSP_WEAPON+2,PSPF_RENDERSTYLE|PSPF_ALPHA|PSPF_FORCESTYLE|PSPF_FORCEALPHA,true); - A_OverlayRenderStyle(PSP_WEAPON+2,STYLE_Add); + A_Overlay(PSP_WEAPON+1,"JetSmoke"); + A_OverlayFlags(PSP_WEAPON+1,PSPF_RENDERSTYLE|PSPF_ALPHA|PSPF_FORCESTYLE|PSPF_FORCEALPHA,true); + A_OverlayRenderStyle(PSP_WEAPON+1,STYLE_Add); } TNT1 A 1 { @@ -1359,15 +1360,17 @@ Class SilverBullet : SWWMWeapon A_StartSound("silverbullet/boltopen",CHAN_WEAPON,CHANF_OVERLAP); if ( invoker.chambered ) { + int layer = PSP_WEAPON+2; + while ( player.FindPSprite(layer) ) layer++; if ( invoker.fired ) { - if ( invoker.fcbchambered ) A_Overlay(PSP_WEAPON+1,"Casing2"); - else A_Overlay(PSP_WEAPON+1,"Casing"); + if ( invoker.fcbchambered ) A_Overlay(layer,"Casing2"); + else A_Overlay(layer,"Casing"); } else { - if ( invoker.fcbchambered ) A_Overlay(PSP_WEAPON+1,"Bullet2"); - else A_Overlay(PSP_WEAPON+1,"Bullet"); + if ( invoker.fcbchambered ) A_Overlay(layer,"Bullet2"); + else A_Overlay(layer,"Bullet"); } } invoker.fired = false; @@ -1389,15 +1392,17 @@ Class SilverBullet : SWWMWeapon A_StartSound("silverbullet/boltopen",CHAN_WEAPON,CHANF_OVERLAP); if ( invoker.chambered ) { + int layer = PSP_WEAPON+2; + while ( player.FindPSprite(layer) ) layer++; if ( invoker.fired ) { - if ( invoker.fcbchambered ) A_Overlay(PSP_WEAPON+1,"Casing2"); - else A_Overlay(PSP_WEAPON+1,"Casing"); + if ( invoker.fcbchambered ) A_Overlay(layer,"Casing2"); + else A_Overlay(layer,"Casing"); } else { - if ( invoker.fcbchambered ) A_Overlay(PSP_WEAPON+1,"Bullet2"); - else A_Overlay(PSP_WEAPON+1,"Bullet"); + if ( invoker.fcbchambered ) A_Overlay(layer,"Bullet2"); + else A_Overlay(layer,"Bullet"); } } invoker.fired = false; @@ -1411,24 +1416,48 @@ Class SilverBullet : SWWMWeapon XZW9 JKLMNOPQR 2; Goto Ready2; Casing: - XZW7 DE 2; - XZW7 FGHIJKLMNO 1; + XZW7 D 2 + { + A_OverlayOffset(OverlayID(),0,0); + invoker.casex = FRandom[Silverbullet](-2.,2.); + invoker.casey = FRandom[Silverbullet](-2.,2.); + } + XZW7 E 2; + XZW7 FGHIJKLMNO 1 A_OverlayOffset(OverlayID(),invoker.casex,invoker.casey,WOF_ADD|WOF_INTERPOLATE); TNT1 A 0 A_DropCasing(); Stop; Casing2: - XZWD DE 2; - XZWD FGHIJKLMNO 1; + XZWD D 2 + { + A_OverlayOffset(OverlayID(),0,0); + invoker.casex = FRandom[Silverbullet](-2.,2.); + invoker.casey = FRandom[Silverbullet](-2.,2.); + } + XZWD E 2; + XZWD FGHIJKLMNO 1 A_OverlayOffset(OverlayID(),invoker.casex,invoker.casey,WOF_ADD|WOF_INTERPOLATE); TNT1 A 0 A_DropCasing(true); Stop; Bullet: - XZWD PQ 2; - XZWD RSTUVWXYZ 1; - XZWE A 1; + XZWD P 2 + { + A_OverlayOffset(OverlayID(),0,0); + invoker.casex = FRandom[Silverbullet](-2.,2.); + invoker.casey = FRandom[Silverbullet](-2.,2.); + } + XZWD Q 2; + XZWD RSTUVWXYZ 1 A_OverlayOffset(OverlayID(),invoker.casex,invoker.casey,WOF_ADD|WOF_INTERPOLATE); + XZWE A 1 A_OverlayOffset(OverlayID(),invoker.casex,invoker.casey,WOF_ADD|WOF_INTERPOLATE); TNT1 A 0 A_DropBullet(); Stop; Bullet2: - XZWE BC 2; - XZWE DEFGHIJKLM 1; + XZWE B 2 + { + A_OverlayOffset(OverlayID(),0,0); + invoker.casex = FRandom[Silverbullet](-2.,2.); + invoker.casey = FRandom[Silverbullet](-2.,2.); + } + XZWE C 2; + XZWE DEFGHIJKLM 1 A_OverlayOffset(OverlayID(),invoker.casex,invoker.casey,WOF_ADD|WOF_INTERPOLATE); TNT1 A 0 A_DropBullet(true); Stop; ZoomFire: