diff --git a/FuturePlans.md b/FuturePlans.md index 35e1f5aab..7dd04733c 100644 --- a/FuturePlans.md +++ b/FuturePlans.md @@ -47,6 +47,9 @@ More weapons, because we need 'em. In addition, a bunch of cleanup in base weapo * [x] **Additional WAD Compatibility:** - [x] SIGIL 2 - [x] Eviternity 2 +* [ ] **GZDoom 4.12.x Features:** + - [x] Lesser code cleanup/refactor *(new variables, functions, flags, etc.)* + - [ ] Visual Thinker migration where needed *(more lightweight sprite explosions and the like)* ## 1.4 update *(Fine Refinements)*: @@ -114,7 +117,6 @@ Re-animation of old FK models. Plus extra score incentives and achievements. Things that I'm unsure when will be added *(or if they can be added)*. -* [ ] **Switch various actor-based sprite effects to use more lightweight visual thinkers *(not yet in stable GZDoom)*** * [ ] **Fix handling of conveyor physics *(if scrollers ever get exposed to ZScript)*** * [ ] **Per-weapon player models *(could be very time-consuming)*** * [ ] **Model animations decoupled from actor states *(may be needed for the previous one)*** diff --git a/README.md b/README.md index fef75d9d8..22be17b15 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ Hope you have fun exploding demon knees. ## Software and Hardware Requirements -**Codename: Demolitionist** requires **GZDoom 4.11** or later. For mobile platforms, this is available on **Delta Touch** as of version 5.1. +**Codename: Demolitionist** requires **GZDoom 4.12** or later. As of writing this, **Delta Touch** has not yet been updated and still offers 4.11.3 instead. Sorry, mobile players. Recommended desktop hardware specs are as follows: @@ -62,7 +62,7 @@ Recommended GZDoom settings are as follows: - **Lighting:** Dynamic lights should be enabled. It's also advised to use `Classic` sector lighting, as other modes may over-brighten weapon models. - **Audio:** Increasing sound channels to their maximum limit is advised. -This mod has also been verified to run smoothly on the Steam Deck *(in desktop mode)*. Although it is not really possible to bind *ALL* controls beyond the bare essentials, this might be addressed in the future. +This mod has also been verified to run smoothly on the Steam Deck *(in desktop mode)*. Although it is not really possible to bind *ALL* controls beyond the bare essentials, this might be addressed in the future *(note that as of writing this, the flatpak version is still at 4.11.3)*. *(Testers are welcome for narrowing down more precise hardware requirements)* diff --git a/graphics/xhairb99.png b/graphics/xhairb99.png deleted file mode 100644 index 8230e883f..000000000 Binary files a/graphics/xhairb99.png and /dev/null differ diff --git a/graphics/xhairs99.png b/graphics/xhairs99.png deleted file mode 100644 index 910ddf552..000000000 Binary files a/graphics/xhairs99.png and /dev/null differ diff --git a/language.version b/language.version index b7578beb9..e0e8932ed 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r1125 \cu(Thu Apr 18 20:02:26 CEST 2024)\c-"; -SWWM_SHORTVER="\cw1.3pre r1125 \cu(2024-04-18 20:02:26)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r1127 \cu(Mon Apr 22 14:35:02 CEST 2024)\c-"; +SWWM_SHORTVER="\cw1.3pre r1127 \cu(2024-04-22 14:35:02)\c-"; diff --git a/modeldef/demolitionist.txt b/modeldef/demolitionist.txt index 0a6657f25..cbc5b97e4 100644 --- a/modeldef/demolitionist.txt +++ b/modeldef/demolitionist.txt @@ -17,6 +17,7 @@ Model "Demolitionist" AngleOffset -90 Scale 40.96 40.96 40.96 IGNORETRANSLATION + FORCECULLBACKFACES // Still/Walk FrameIndex XZW1 A 0 1 diff --git a/modeldef/dlc/dlcammo.txt b/modeldef/dlc/dlcammo.txt index 703593350..e311e32ca 100644 --- a/modeldef/dlc/dlcammo.txt +++ b/modeldef/dlc/dlcammo.txt @@ -10,6 +10,7 @@ ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -23,6 +24,7 @@ Model "SMW05Ammo2" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -36,6 +38,7 @@ Model "SMW05Ammo3" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -49,6 +52,7 @@ Model "SMW05SmallAmmo" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -62,6 +66,7 @@ Model "SMW05BigAmmo" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 }*/ @@ -76,6 +81,7 @@ Model "SheenAmmo" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -87,6 +93,7 @@ Model "SheenAmmo2" Skin 0 "SheenBullet.png" Scale 6 6 6 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -98,6 +105,7 @@ Model "SheenAmmo3" Skin 0 "SheenBullet.png" Scale 6 6 6 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -122,6 +130,7 @@ Model "SheenBigAmmo" Scale 12 12 12 AngleOffset -90 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -137,6 +146,7 @@ Model "QuadravolAmmo" RollOffset -30 AngleOffset -90 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -149,6 +159,7 @@ Model "QuadravolAmmo2" Scale 5 5 5 ZOffset 16 AngleOffset -90 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -161,6 +172,7 @@ Model "QuadravolAmmo3" Scale 5 5 5 ZOffset 16 AngleOffset -90 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -175,6 +187,7 @@ Model "QuadravolAmmo3" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -188,6 +201,7 @@ Model "SparksterBAmmo2" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -201,6 +215,7 @@ Model "SparksterBAmmo3" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -214,6 +229,7 @@ Model "SparksterRAmmo" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -227,6 +243,7 @@ Model "SparksterRAmmo2" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -240,6 +257,7 @@ Model "SparksterRAmmo3" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -254,6 +272,7 @@ Model "RayBolt" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -267,6 +286,7 @@ Model "RayBolt2" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -280,6 +300,7 @@ Model "RayBolt5" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -293,6 +314,7 @@ Model "RayAmmo" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 }*/ @@ -305,6 +327,7 @@ Model "MisterRound" Skin 0 "MortalRound.png" Scale 8 8 8 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -316,6 +339,7 @@ Model "MisterRound2" Skin 0 "MortalRound.png" Scale 8 8 8 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -327,6 +351,7 @@ Model "MisterRound3" Skin 0 "MortalRound.png" Scale 8 8 8 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -338,6 +363,7 @@ Model "MisterRound5" Skin 0 "MortalRound.png" Scale 8 8 8 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -351,6 +377,7 @@ Model "MisterAmmo" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -365,6 +392,7 @@ Model "MisterGAmmo" AngleOffset -90 RollOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -379,6 +407,7 @@ Model "MisterGAmmo" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -392,6 +421,7 @@ Model "UltimateAmmo" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 }*/ diff --git a/modeldef/dlc/hammer.txt b/modeldef/dlc/hammer.txt index 1fa1cfcd6..f3cbd799e 100644 --- a/modeldef/dlc/hammer.txt +++ b/modeldef/dlc/hammer.txt @@ -24,6 +24,7 @@ Model "ItamexHammer" Scale 50 50 50 ZOffset 28 AngleOffset -90 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -40,6 +41,7 @@ Model "ItamexHammer" AngleOffset -90 Scale -128 64 128 + FORCECULLBACKFACES // Still FrameIndex XZW2 A 1 0 diff --git a/modeldef/dlc/mortalrifle.txt b/modeldef/dlc/mortalrifle.txt index c3a213fab..98008d018 100644 --- a/modeldef/dlc/mortalrifle.txt +++ b/modeldef/dlc/mortalrifle.txt @@ -11,6 +11,7 @@ Model "MisterCasing" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 ZOffset 0.35 @@ -34,6 +35,7 @@ Model "MisterGCasing" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 ZOffset 1.1 @@ -50,6 +52,7 @@ Model "MisterMag" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES Skin 0 "MortalMag_Empty.png" FrameIndex XZW1 A 0 0 @@ -69,6 +72,7 @@ Model "MisterGrenade" Scale 24 24 24 AngleOffset 90 ZOffset 3.3 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -81,6 +85,7 @@ Model "MisterSubGrenade" Scale 8 8 8 AngleOffset 90 ZOffset 1.1 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -131,7 +136,7 @@ Model "MisterRifle" Scale 64 64 64 ZOffset 20 AngleOffset -90 - DONTCULLBACKFACES + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 FrameIndex XZW1 B 0 1 @@ -194,6 +199,7 @@ Model "MisterRifle" AngleOffset -90 Scale -128 64 128 + FORCECULLBACKFACES //// UNLOCKED // Still / Deselect diff --git a/modeldef/dlc/newsparkster.txt b/modeldef/dlc/newsparkster.txt index 0fa926b9c..10af5b662 100644 --- a/modeldef/dlc/newsparkster.txt +++ b/modeldef/dlc/newsparkster.txt @@ -9,6 +9,7 @@ Model "ModernSparkster" Scale 50 50 50 ZOffset 20 AngleOffset -90 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } diff --git a/modeldef/dlc/plasmablast.txt b/modeldef/dlc/plasmablast.txt index 4b0c54245..7af84b47f 100644 --- a/modeldef/dlc/plasmablast.txt +++ b/modeldef/dlc/plasmablast.txt @@ -10,6 +10,7 @@ Model "PlasmaBlast" Scale 120 120 120 ZOffset 16 AngleOffset -90 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } diff --git a/modeldef/dlc/puntzerbeta.txt b/modeldef/dlc/puntzerbeta.txt index 0aa9de9e8..20e001927 100644 --- a/modeldef/dlc/puntzerbeta.txt +++ b/modeldef/dlc/puntzerbeta.txt @@ -10,6 +10,7 @@ Model "PuntzerBeta" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } diff --git a/modeldef/dlc/puntzergamma.txt b/modeldef/dlc/puntzergamma.txt index 8ef80540d..24ffd9dbe 100644 --- a/modeldef/dlc/puntzergamma.txt +++ b/modeldef/dlc/puntzergamma.txt @@ -10,6 +10,7 @@ Model "PuntzerGamma" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } diff --git a/modeldef/dlc/quadravol.txt b/modeldef/dlc/quadravol.txt index c079c2e06..2d40a545e 100644 --- a/modeldef/dlc/quadravol.txt +++ b/modeldef/dlc/quadravol.txt @@ -11,6 +11,7 @@ Model "QuadravolCasing" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 ZOffset 1 @@ -28,6 +29,7 @@ Model "Quadravol" Scale 100 100 100 ZOffset 20 AngleOffset -90 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -40,6 +42,7 @@ Model "Quadravol" AngleOffset -90 Scale -128 64 128 + FORCECULLBACKFACES // Eject FrameIndex XZWZ A 2 87 @@ -134,6 +137,7 @@ Model "Quadravol" AngleOffset -90 Scale -128 64 128 + FORCECULLBACKFACES //// TWO HANDED // Still diff --git a/modeldef/dlc/rafankos.txt b/modeldef/dlc/rafankos.txt index 75a3b0263..292b0238d 100644 --- a/modeldef/dlc/rafankos.txt +++ b/modeldef/dlc/rafankos.txt @@ -10,6 +10,7 @@ Model "RafanKos" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } diff --git a/modeldef/dlc/raykhom.txt b/modeldef/dlc/raykhom.txt index fd778c15c..f4ce4e36f 100644 --- a/modeldef/dlc/raykhom.txt +++ b/modeldef/dlc/raykhom.txt @@ -10,6 +10,7 @@ Model "RayKhom" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } diff --git a/modeldef/dlc/sheenhmg.txt b/modeldef/dlc/sheenhmg.txt index b688b711c..d68572611 100644 --- a/modeldef/dlc/sheenhmg.txt +++ b/modeldef/dlc/sheenhmg.txt @@ -57,6 +57,7 @@ Model "SheenCasing" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 ZOffset 0.75 @@ -73,6 +74,7 @@ Model "HeavyMahSheenGun" Scale 100 100 100 AngleOffset -90 ZOffset 20 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -157,6 +159,7 @@ Model "HeavyMahSheenGun" AngleOffset -90 Scale -128 64 128 Offset 0 -1 -2 + FORCECULLBACKFACES // Still FrameIndex XZW2 A 1 0 diff --git a/modeldef/gesture.txt b/modeldef/gesture.txt index 7a8c39dc9..4ea1bbe91 100644 --- a/modeldef/gesture.txt +++ b/modeldef/gesture.txt @@ -8,6 +8,7 @@ Model "SWWMGesture" SurfaceSkin 0 2 "DemoSoft.png" AngleOffset -90 Scale -128 64 128 + FORCECULLBACKFACES // Initial FrameIndex XZW1 A 0 0 @@ -121,6 +122,7 @@ Model "SWWMGesture" SurfaceSkin 0 3 "ExplodiumGun.png" AngleOffset -90 Scale -128 64 128 + FORCECULLBACKFACES // Quick Grenade FrameIndex XZW4 Q 0 0 @@ -171,6 +173,7 @@ Model "SWWMGesture" SurfaceSkin 0 0 "DemoTags.png" SurfaceSkin 0 1 "DemoArms.png" SurfaceSkin 0 2 "DemoSoft.png" + FORCECULLBACKFACES AngleOffset -90 Scale -128 64 128 diff --git a/modeldef/items/ammo.txt b/modeldef/items/ammo.txt index 12b25e4ec..6b9249aa5 100644 --- a/modeldef/items/ammo.txt +++ b/modeldef/items/ammo.txt @@ -8,6 +8,7 @@ Model "RedShell" PitchOffset 30 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -19,6 +20,7 @@ Model "RedShell2" Skin 0 "Shell_Normal.png" Scale 6 6 6 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -30,6 +32,7 @@ Model "RedShell4" Skin 0 "Shell_Normal.png" Scale 6 6 6 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -56,6 +59,7 @@ Model "GoldShell" PitchOffset 30 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -70,6 +74,7 @@ Model "EvisceratorShell" PitchOffset 45 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -82,6 +87,7 @@ Model "EvisceratorShell2" SurfaceSkin 0 1 "EvisceratorClip.png" Scale 45 45 45 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -94,6 +100,7 @@ Model "EvisceratorShell3" SurfaceSkin 0 1 "EvisceratorClip.png" Scale 45 45 45 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -106,6 +113,7 @@ Model "EvisceratorSixPack" SurfaceSkin 0 1 "EvisceratorShell.png" Scale 20 20 20 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -120,6 +128,7 @@ Model "HellblazerMissiles" PitchOffset 45 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -131,6 +140,7 @@ Model "HellblazerMissiles2" Skin 0 "HellblazerMissile.png" Scale 40 40 40 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -142,6 +152,7 @@ Model "HellblazerMissiles3" Skin 0 "HellblazerMissile.png" Scale 40 40 40 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -156,6 +167,7 @@ Model "HellblazerMissileMag" PitchOffset -45 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -170,6 +182,7 @@ Model "SparkUnit" PitchOffset 30 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -181,6 +194,7 @@ Model "SparkUnit2" Skin 0 "SparksterAmmo.png" Scale 40 40 40 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -195,6 +209,7 @@ Model "SilverBulletAmmo" PitchOffset 30 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -208,6 +223,7 @@ Model "SilverBullets" PitchOffset 30 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -219,6 +235,7 @@ Model "SilverBullets2" Skin 0 "SilverbulletBullet.png" Scale 12 12 12 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -230,6 +247,7 @@ Model "SilverBullets3" Skin 0 "SilverbulletBullet.png" Scale 12 12 12 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -244,6 +262,7 @@ Model "CandyGunAmmo" PitchOffset 30 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -258,6 +277,7 @@ Model "CandyGunBullets" PitchOffset 30 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -270,6 +290,7 @@ Model "CandyGunBullets2" SurfaceSkin 0 1 "CandyCasing.png" Scale 5 5 5 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -282,6 +303,7 @@ Model "CandyGunBullets3" SurfaceSkin 0 1 "CandyCasing.png" Scale 5 5 5 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -296,6 +318,7 @@ Model "YnykronAmmo" PitchOffset 30 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -308,6 +331,7 @@ Model "FabricatorTier1" Skin 0 "Fabricator.png" Scale 32 32 32 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -319,6 +343,7 @@ Model "FabricatorTier2" Skin 0 "Fabricator_Tier2.png" Scale 34 34 34 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -330,6 +355,7 @@ Model "FabricatorTier3" Skin 0 "Fabricator_Tier3.png" Scale 36 36 36 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -341,6 +367,7 @@ Model "FabricatorTier4" Skin 0 "Fabricator_Tier4.png" Scale 40 40 40 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -356,6 +383,7 @@ Model "HammerspaceEmbiggener" PitchOffset 20 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -370,6 +398,7 @@ Model "BulkHammerspaceEmbiggener" PitchOffset 20 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 Skin 0 "Embiggener_Tier2.png" diff --git a/modeldef/items/collectibles.txt b/modeldef/items/collectibles.txt index 6d7cb515a..c32111790 100644 --- a/modeldef/items/collectibles.txt +++ b/modeldef/items/collectibles.txt @@ -6,6 +6,7 @@ Model "GenericCube" Skin 0 "PerfectlyGeneric.png" Scale 10 10 10 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -19,6 +20,7 @@ Model "AkariProject" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -32,6 +34,7 @@ Model "LoveSignalsCD" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -101,6 +104,7 @@ Model "SayasMug" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -116,6 +120,7 @@ Model "DemoPlush" AngleOffset -90 RollOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -141,6 +146,7 @@ Model "MilkBreads" Skin 0 "MilkBreads.png" Scale 4 4 4 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -154,6 +160,7 @@ Model "KirinManga" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } diff --git a/modeldef/items/funstuff.txt b/modeldef/items/funstuff.txt index ad48383da..3bba8cf17 100644 --- a/modeldef/items/funstuff.txt +++ b/modeldef/items/funstuff.txt @@ -6,6 +6,7 @@ Model "FroggyChair" Skin 0 "ASmallPriceToPay.png" Scale 40 40 50 AngleOffset -90 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -92,6 +93,7 @@ Model "Chancebox" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 // deploy @@ -121,6 +123,7 @@ Model "ChanceboxTop" Scale 24 24 24 AngleOffset -90 ZOffset 2 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -132,6 +135,7 @@ Model "ChanceboxSide" Scale 24 24 24 AngleOffset -90 ZOffset 10 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } diff --git a/modeldef/items/itemgesture.txt b/modeldef/items/itemgesture.txt index a88d1bba9..bffbfb571 100644 --- a/modeldef/items/itemgesture.txt +++ b/modeldef/items/itemgesture.txt @@ -6,6 +6,7 @@ Model "GenericCubeGesture" SurfaceSkin 0 1 "DemoArms.png" SurfaceSkin 0 2 "DemoSoft.png" SurfaceSkin 0 3 "PerfectlyGeneric.png" + FORCECULLBACKFACES AngleOffset -90 Scale -128 64 128 @@ -41,6 +42,7 @@ Model "AkariProjectGesture" SurfaceSkin 0 1 "DemoArms.png" SurfaceSkin 0 2 "DemoSoft.png" SurfaceSkin 0 3 "AkariProject.png" + FORCECULLBACKFACES AngleOffset -90 Scale -128 64 128 @@ -76,6 +78,7 @@ Model "LoveSignalsCDGesture" SurfaceSkin 0 1 "DemoArms.png" SurfaceSkin 0 2 "DemoSoft.png" SurfaceSkin 0 3 "LoveSignals.png" + FORCECULLBACKFACES AngleOffset -90 Scale -128 64 128 @@ -265,6 +268,7 @@ Model "SayasMugGesture" SurfaceSkin 0 1 "DemoArms.png" SurfaceSkin 0 2 "DemoSoft.png" SurfaceSkin 0 3 "SayasMug.png" + FORCECULLBACKFACES AngleOffset -90 Scale -128 64 128 @@ -331,6 +335,7 @@ Model "DemoPlushGesture" SurfaceSkin 0 2 "DemoSoft.png" SurfaceSkin 0 3 "DemoPlush.png" SurfaceSkin 0 4 "DemoPlush2.png" + FORCECULLBACKFACES AngleOffset -90 Scale -128 64 128 @@ -406,6 +411,7 @@ Model "MilkBreadsGesture" SurfaceSkin 0 1 "DemoArms.png" SurfaceSkin 0 2 "DemoSoft.png" SurfaceSkin 0 3 "MilkBreads.png" + FORCECULLBACKFACES AngleOffset -90 Scale -128 64 128 @@ -441,6 +447,7 @@ Model "KirinMangaGesture" SurfaceSkin 0 1 "DemoArms.png" SurfaceSkin 0 2 "DemoSoft.png" SurfaceSkin 0 3 "KirinManga.png" + FORCECULLBACKFACES AngleOffset -90 Scale -128 64 128 diff --git a/modeldef/items/keys.txt b/modeldef/items/keys.txt index 74628581e..2ad8d852e 100644 --- a/modeldef/items/keys.txt +++ b/modeldef/items/keys.txt @@ -7,6 +7,7 @@ Model "SWWMRedCard" PitchOffset 15 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES SurfaceSkin 0 1 "DoomKeyLight2.png" FrameIndex XZW1 A 0 0 @@ -22,6 +23,7 @@ Model "SWWMYellowCard" PitchOffset 15 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES SurfaceSkin 0 1 "DoomKeyLight2.png" FrameIndex XZW1 A 0 0 @@ -37,6 +39,7 @@ Model "SWWMBlueCard" PitchOffset 15 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES SurfaceSkin 0 1 "DoomKeyLight2.png" FrameIndex XZW1 A 0 0 @@ -52,6 +55,7 @@ Model "SWWMGreenCard" PitchOffset 15 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES SurfaceSkin 0 1 "DoomKeyLight2.png" FrameIndex XZW1 A 0 0 @@ -67,6 +71,7 @@ Model "SWWMSilverCardKDiZD" PitchOffset 15 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES SurfaceSkin 0 1 "DoomKeyLight2.png" FrameIndex XZW1 A 0 0 @@ -82,6 +87,7 @@ Model "SWWMGreenCardKDiZD" PitchOffset 15 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES SurfaceSkin 0 1 "DoomKeyLight2.png" FrameIndex XZW1 A 0 0 @@ -97,6 +103,7 @@ Model "SWWMOrangeCardKDiZD" PitchOffset 15 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES SurfaceSkin 0 1 "DoomKeyLight2.png" FrameIndex XZW1 A 0 0 @@ -114,6 +121,7 @@ Model "SWWMRedSkull" RollOffset 15 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -127,6 +135,7 @@ Model "SWWMBlueSkull" RollOffset 15 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -140,6 +149,7 @@ Model "SWWMYellowSkull" RollOffset 15 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -153,6 +163,7 @@ Model "SWWMPurpleSkull" RollOffset 15 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -167,6 +178,7 @@ Model "SWWMFakeRedSkull" AngleOffset 244 ZOffset 5 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -180,6 +192,7 @@ Model "SWWMFakeBlueSkull" AngleOffset 225 ZOffset 5 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -193,6 +206,7 @@ Model "SWWMFakeYellowSkull" AngleOffset 135 ZOffset 5 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -206,6 +220,7 @@ Model "SWWMFakePurpleSkull" AngleOffset 116 ZOffset 5 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -220,6 +235,7 @@ Model "SWWMKeyGreen" RollOffset 15 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -233,6 +249,7 @@ Model "SWWMKeyBlue" RollOffset 15 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -246,6 +263,7 @@ Model "SWWMKeyYellow" RollOffset 15 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -259,6 +277,7 @@ Model "SWWMKeyRed" RollOffset 15 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } diff --git a/modeldef/items/pickups.txt b/modeldef/items/pickups.txt index 6b4b6ff08..2a9bf9d8e 100644 --- a/modeldef/items/pickups.txt +++ b/modeldef/items/pickups.txt @@ -5,6 +5,7 @@ Model "ArmorNuggetItem" Skin 0 "Nugget_Armor.png" Scale 0.05 0.05 0.05 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 FrameIndex XZW1 B 0 1 @@ -22,6 +23,7 @@ Model "HealthNuggetItem" Skin 0 "Nugget.png" Scale 0.05 0.05 0.05 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 FrameIndex XZW1 B 0 1 @@ -40,6 +42,7 @@ Model "TetraHealthItem" Skin 0 "TetraHealth.png" Scale 8 8 8 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -51,6 +54,7 @@ Model "CubeHealthItem" Skin 0 "CubeHealth.png" Scale 8 8 8 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -64,6 +68,7 @@ Model "RefresherItem" ZOffset 16 AngleOffset -90 RollOffset 30 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -75,6 +80,7 @@ Model "BlastSuitItem" Skin 0 "BlastSuit.png" Scale 24 24 24 ZOffset 20 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -86,6 +92,7 @@ Model "WarArmorItem" Skin 0 "WarArmor.png" Scale 18 18 18 ZOffset 20 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -100,6 +107,7 @@ Model "GrilledCheeseSandwich" PitchOffset -45 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -111,6 +119,7 @@ Model "GhostArtifact" Skin 0 "GhostArtifact.png" Scale 12 12 12 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -132,6 +141,7 @@ Model "GravitySuppressor" Skin 0 "Gravity.png" Scale 16 16 16 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -142,6 +152,7 @@ Model "GravityX" Skin 0 "envmap/watrenv.png" Scale 16 16 16 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -153,6 +164,7 @@ Model "FuckingInvinciball" Skin 0 "Invinciball.png" Scale 10 10 10 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -163,6 +175,7 @@ Model "InvinciballX" Skin 0 "envmap/redenv.png" Scale 10 10 10 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -174,6 +187,7 @@ Model "Ragekit" Skin 0 "Ragekit.png" Scale 12 12 12 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -184,6 +198,7 @@ Model "RagekitX" Skin 0 "envmap/lavaenv.png" Scale 12 12 12 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -197,6 +212,7 @@ Model "Omnisight" RollOffset 30 ZOffset 16 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -239,6 +255,7 @@ Model "CompanionLamp" Skin 0 "Lamp_off.png" Scale 8 8 8 ZOffset 8 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 Skin 0 "Lamp.png" @@ -252,6 +269,7 @@ Model "SWWMLamp" Skin 0 "Lamp_off.png" Scale 12 12 12 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -263,6 +281,7 @@ Model "EBarrier" Skin 0 "Barrier.png" Scale 24 24 24 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -302,6 +321,7 @@ Model "SafetyTether" ZOffset 16 PitchOffset 30 CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 Skin 0 "SafetyTether.png" @@ -316,6 +336,7 @@ Model "AngerySigil" Scale 18 18 18 AngleOffset -90 ZOffset 20 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -327,6 +348,7 @@ Model "DivineSprite" Skin 0 "DivineSprite.png" Scale 8 8 8 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } diff --git a/modeldef/misc.txt b/modeldef/misc.txt index c40b1154a..b734de8da 100644 --- a/modeldef/misc.txt +++ b/modeldef/misc.txt @@ -8,6 +8,7 @@ Model "Unknown" Skin 0 "ERRORENV" Scale 32 32 48 ZOffset 28 + FORCECULLBACKFACES FrameIndex UNKN A 0 0 } @@ -77,6 +78,7 @@ Model "SWWMChip" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES Rotation-Center 0 0 0.1 ZOffset 0.2 @@ -130,6 +132,7 @@ Model "mkFlyingGib" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES Rotation-Center 0 0 1 ZOffset 2 @@ -148,6 +151,7 @@ Model "RadiusDebugSphere" Path "models/extra" Model 0 "UnitSphere.obj" Scale 1 1 1 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -330,6 +334,7 @@ Model "TheBall" Skin 0 "envmap/leadenv.png" Scale 2 2 2 ZOffset 1 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } diff --git a/modeldef/weapons/candygun.txt b/modeldef/weapons/candygun.txt index f79e59781..3506c0c7d 100644 --- a/modeldef/weapons/candygun.txt +++ b/modeldef/weapons/candygun.txt @@ -8,6 +8,7 @@ Model "CandyCasing" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 ZOffset 0.5 @@ -23,6 +24,7 @@ Model "CandyMag" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES Skin 0 "CandyGun_EmptyMag.png" FrameIndex XZW1 A 0 0 @@ -42,6 +44,7 @@ Model "CandyMagProj" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 1 } @@ -56,6 +59,7 @@ Model "CandyGunProj" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -97,6 +101,7 @@ Model "CandyGun" Scale 12 12 12 ZOffset 16 AngleOffset 180 + FORCECULLBACKFACES SurfaceSkin 0 1 "CandyGun.png" FrameIndex XZW1 A 0 0 @@ -147,6 +152,7 @@ Model "CandyGun" Scale -128 64 128 AngleOffset -90 Offset 0 0 -2 + FORCECULLBACKFACES // Casing Drop FrameIndex XZWC A 3 14 @@ -196,6 +202,7 @@ Model "CandyGun" Scale -128 64 128 AngleOffset -90 Offset 0 0 -2 + FORCECULLBACKFACES // Still FrameIndex XZW2 A 1 0 diff --git a/modeldef/weapons/deepimpact.txt b/modeldef/weapons/deepimpact.txt index ba5fb3b60..f1ed186ba 100644 --- a/modeldef/weapons/deepimpact.txt +++ b/modeldef/weapons/deepimpact.txt @@ -6,6 +6,7 @@ Model "DeepImpact" Skin 0 "DeepImpact.png" Scale 25 25 25 ZOffset 20 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -23,6 +24,7 @@ Model "DeepImpact" Scale -128 64 128 AngleOffset -90 Offset 0 0 -2 + FORCECULLBACKFACES // Still / Down / Select FrameIndex XZW2 A 1 0 // still / down diff --git a/modeldef/weapons/eviscerator.txt b/modeldef/weapons/eviscerator.txt index 719f7f8d6..7b9581adf 100644 --- a/modeldef/weapons/eviscerator.txt +++ b/modeldef/weapons/eviscerator.txt @@ -8,6 +8,7 @@ Model "EvisceratorCasing" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 ZOffset 1 @@ -62,6 +63,7 @@ Model "EvisceratorChunk" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES Rotation-Center 0 0 0.1 ZOffset 0.2 @@ -85,6 +87,7 @@ Model "EvisceratorProj" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -97,6 +100,7 @@ Model "Eviscerator" Skin 0 "Eviscerator.png" Scale 24 24 24 ZOffset 20 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 FrameIndex XZW1 B 0 1 @@ -139,6 +143,7 @@ Model "Eviscerator" Scale -128 64 128 AngleOffset -90 Offset 0 2 0 + FORCECULLBACKFACES // Casing Ejected FrameIndex XZWB D 3 51 @@ -165,6 +170,7 @@ Model "Eviscerator" Scale -128 64 128 AngleOffset -90 Offset 0 2 0 + FORCECULLBACKFACES ////// WIDE SPREAD BARREL // Still / Deselect diff --git a/modeldef/weapons/explodiumgun.txt b/modeldef/weapons/explodiumgun.txt index 154d413ee..682b02cac 100644 --- a/modeldef/weapons/explodiumgun.txt +++ b/modeldef/weapons/explodiumgun.txt @@ -8,6 +8,7 @@ Model "ExplodiumCasing" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 ZOffset 0.5 @@ -23,6 +24,7 @@ Model "ExplodiumMag" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES Skin 0 "ExplodiumGun_EmptyMag.png" FrameIndex XZW1 A 0 0 @@ -43,6 +45,7 @@ Model "ExplodiumMagProj" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 1 } @@ -56,6 +59,7 @@ Model "ExplodiumMagAttach" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES AngleOffset 90 FrameIndex XZW1 A 0 1 @@ -74,6 +78,7 @@ Model "ExplodiumGun" Scale 12 12 12 ZOffset 16 AngleOffset 180 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -118,6 +123,7 @@ Model "ExplodiumGun" Scale -128 64 128 AngleOffset -90 Offset 0 0 -2 + FORCECULLBACKFACES // Casing Drop SurfaceSkin 3 0 "ExplodiumCasing_Used.png" @@ -168,6 +174,7 @@ Model "ExplodiumGun" Scale -128 64 128 AngleOffset -90 Offset 0 0 -2 + FORCECULLBACKFACES // Still FrameIndex XZW2 A 1 0 @@ -534,6 +541,9 @@ Model "DualExplodiumGun" Scale -128 64 128 AngleOffset -90 Offset -3 0 -2 + // normals are currently screwed up, keep this commented out until I + // re-do the model in 1.4 + //FORCECULLBACKFACES // Casings // LEFT @@ -559,6 +569,7 @@ Model "DualExplodiumGun" Scale -128 64 128 AngleOffset -90 Offset 3 0 -2 + FORCECULLBACKFACES // Casings // RIGHT @@ -588,6 +599,9 @@ Model "DualExplodiumGun" Scale -128 64 128 AngleOffset -90 Offset -3 0 -2 + // normals are currently screwed up, keep this commented out until I + // re-do the model in 1.4 + //FORCECULLBACKFACES //// LEFT // Still @@ -795,6 +809,7 @@ Model "DualExplodiumGun" Scale -128 64 128 AngleOffset -90 Offset 3 0 -2 + FORCECULLBACKFACES //// RIGHT // Still @@ -997,6 +1012,7 @@ Model "SWWMDualWeaponGiver" Skin 0 "ExplodiumGun.png" Scale 12 12 12 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } diff --git a/modeldef/weapons/hellblazer.txt b/modeldef/weapons/hellblazer.txt index 2aef5462b..575ffa5e1 100644 --- a/modeldef/weapons/hellblazer.txt +++ b/modeldef/weapons/hellblazer.txt @@ -7,6 +7,7 @@ Model "HellblazerMissile" Scale 25 25 25 USEACTORPITCH CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -20,6 +21,7 @@ Model "HellblazerMissile2" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -33,6 +35,7 @@ Model "Hellblazer" SurfaceSkin 0 1 "HellblazerAmmo.png" Scale 28 28 28 ZOffset 20 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -218,6 +221,7 @@ Model "Hellblazer" AngleOffset -90 Scale -128 64 128 Offset -2 2 1 + FORCECULLBACKFACES // Still / Deselect FrameIndex XZW2 A 1 0 diff --git a/modeldef/weapons/silverbullet.txt b/modeldef/weapons/silverbullet.txt index 0374326f7..a74049437 100644 --- a/modeldef/weapons/silverbullet.txt +++ b/modeldef/weapons/silverbullet.txt @@ -9,6 +9,7 @@ Model "SilverBulletCasing" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 ZOffset 1 @@ -24,6 +25,7 @@ Model "SilverBulletMag" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 RollOffset 90 @@ -42,6 +44,7 @@ Model "SilverBullet" SurfaceSkin 0 1 "SilverbulletAmmo.png" Scale 64 64 64 ZOffset 24 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -67,6 +70,7 @@ Model "SilverBullet" AngleOffset -90 Scale -128 64 128 DONTCULLBACKFACES + FORCECULLBACKFACES // Casing SurfaceSkin 2 0 "SilverbulletBullet_Used.png" @@ -133,6 +137,7 @@ Model "SilverBullet" SurfaceSkin 1 4 "SilverbulletAmmo.png" AngleOffset -90 Scale -128 64 128 + FORCECULLBACKFACES // Still / Deselect FrameIndex XZW2 A 1 0 diff --git a/modeldef/weapons/sparkster.txt b/modeldef/weapons/sparkster.txt index a4e0f9ed5..efdafa800 100644 --- a/modeldef/weapons/sparkster.txt +++ b/modeldef/weapons/sparkster.txt @@ -8,6 +8,7 @@ Model "SparksterMag" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 ZOffset 1.5 @@ -159,6 +160,7 @@ Model "BiosparkCore" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -172,6 +174,7 @@ Model "Sparkster" SurfaceSkin 0 1 "SparksterAmmo.png" Scale 30 30 30 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 SurfaceSkin 0 2 "SparksterAmmo.png" @@ -264,6 +267,7 @@ Model "Sparkster" AngleOffset -90 Scale -128 64 128 + FORCECULLBACKFACES // Still / Deselect FrameIndex XZW2 A 1 0 diff --git a/modeldef/weapons/spreadgun.txt b/modeldef/weapons/spreadgun.txt index b08554358..c1451958b 100644 --- a/modeldef/weapons/spreadgun.txt +++ b/modeldef/weapons/spreadgun.txt @@ -8,6 +8,7 @@ Model "RedShellCasing" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 ZOffset 1 @@ -23,6 +24,7 @@ Model "GoldShellCasing" USEACTORPITCH USEACTORROLL CORRECTPIXELSTRETCH + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 ZOffset 1 @@ -37,6 +39,7 @@ Model "Spreadgun" Skin 0 "Spreadgun.png" Scale 10 10 10 ZOffset 16 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 FrameIndex XZW1 B 0 1 @@ -72,6 +75,7 @@ Model "Spreadgun" AngleOffset -90 Offset -4 0 -2 Scale -128 64 128 + FORCECULLBACKFACES ///// PRIMED // Idle / Deselect diff --git a/modeldef/weapons/wallbuster.txt b/modeldef/weapons/wallbuster.txt index 9f20c4dae..531072648 100644 --- a/modeldef/weapons/wallbuster.txt +++ b/modeldef/weapons/wallbuster.txt @@ -6,6 +6,7 @@ Model "Wallbuster" Skin 0 "Wallbuster.png" Scale 45 45 45 ZOffset 28 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -91,6 +92,7 @@ Model "Wallbuster" PitchOffset 0.4 Offset 0 2 0 Scale -128 64 128 + FORCECULLBACKFACES // Still/Deselect FrameIndex XZW2 A 1 0 diff --git a/modeldef/weapons/ynykron.txt b/modeldef/weapons/ynykron.txt index a699798a2..633549048 100644 --- a/modeldef/weapons/ynykron.txt +++ b/modeldef/weapons/ynykron.txt @@ -297,6 +297,7 @@ Model "Ynykron" SurfaceSkin 0 1 "YnykronAmmo.png" Scale 45 45 45 ZOffset 24 + FORCECULLBACKFACES FrameIndex XZW1 A 0 0 } @@ -371,6 +372,7 @@ Model "Ynykron" SurfaceSkin 1 4 "YnykronAmmo.png" AngleOffset -90 Scale -128 64 128 + FORCECULLBACKFACES // Still / Deselect FrameIndex XZW2 A 1 0 diff --git a/zscript.txt b/zscript.txt index a1befde13..44b87640d 100644 --- a/zscript.txt +++ b/zscript.txt @@ -1,4 +1,4 @@ -version "4.11" +version "4.12" /* DEMOLITIONIST Main Codebase diff --git a/zscript/dlc/swwm_mister_fx.zsc b/zscript/dlc/swwm_mister_fx.zsc index 072e00176..2b0bde94f 100644 --- a/zscript/dlc/swwm_mister_fx.zsc +++ b/zscript/dlc/swwm_mister_fx.zsc @@ -1040,9 +1040,8 @@ Class MisterGrenade : Actor // "safe delay" for main grenade if ( !bAMBUSH && (ReactionTime > default.ReactionTime-20) ) return; let bt = BlockThingsIterator.Create(self,bAMBUSH?80:120); - while ( bt.Next() ) + foreach ( t,p,f:bt ) { - let t = bt.Thing; if ( !t || !t.bSHOOTABLE || (!t.bISMONSTER && !(t is 'BossBrain') && !t.player) || (t.Health <= 0) || (target && t.IsFriend(target)) || !SWWMUtility.SphereIntersect(t,level.Vec3Offset(pos,vel),bAMBUSH?80:120) || !CheckSight(t,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) continue; special1++; tracer = t; diff --git a/zscript/handler/swwm_handler_crosshair.zsc b/zscript/handler/swwm_handler_crosshair.zsc index f4a9bae03..483da11c5 100644 --- a/zscript/handler/swwm_handler_crosshair.zsc +++ b/zscript/handler/swwm_handler_crosshair.zsc @@ -105,7 +105,7 @@ extend Class SWWMHandler double frametime = (curframe-prevframe)/1000.; double theta = clamp(15.*frametime,0.,.5); // naive, but whatever // draw precise crosshair(s) - if ( automapactive || (players[consoleplayer].Camera != players[consoleplayer].mo) || (players[consoleplayer].cheats&CF_CHASECAM) || (numcrosshairs <= 0) ) return; + if ( (automapactive && !viewactive) || (players[consoleplayer].Camera != players[consoleplayer].mo) || (players[consoleplayer].cheats&CF_CHASECAM) || (numcrosshairs <= 0) ) return; let sw = SWWMWeapon(players[consoleplayer].ReadyWeapon); if ( sw && !sw.ShouldDrawCrosshair() ) return; if ( !swwm_precisecrosshair ) return; diff --git a/zscript/handler/swwm_handler_process.zsc b/zscript/handler/swwm_handler_process.zsc index 27695197f..37b809e9a 100644 --- a/zscript/handler/swwm_handler_process.zsc +++ b/zscript/handler/swwm_handler_process.zsc @@ -650,7 +650,7 @@ extend Class SWWMHandler else if ( WeapSel && swwm_useweaponbar && !paused && (players[consoleplayer].playerstate == PST_LIVE) && players[consoleplayer].mo && (gamestate == GS_LEVEL) ) { // special case: ignore if we used the mousewheel and the automap is active - if ( automapactive && ((e.KeyScan == InputEvent.Key_MWheelUp) || (e.KeyScan == InputEvent.Key_MWheelDown)) ) + if ( (automapactive && !viewactive) && ((e.KeyScan == InputEvent.Key_MWheelUp) || (e.KeyScan == InputEvent.Key_MWheelDown)) ) return false; // only if player owns any selectable weapons if ( !wsel && SWWMWeaponSelect.PlayerHasWeapons(players[consoleplayer].mo) ) diff --git a/zscript/handler/swwm_handler_vanillaboss.zsc b/zscript/handler/swwm_handler_vanillaboss.zsc index 287566189..755725e83 100644 --- a/zscript/handler/swwm_handler_vanillaboss.zsc +++ b/zscript/handler/swwm_handler_vanillaboss.zsc @@ -133,8 +133,7 @@ extend Class SWWMHandler hnd.bossactors.Clear(); hnd.initialized = false; let ai = level.CreateActorIterator(tid); - Actor a; - while ( a = ai.Next() ) + foreach ( a:ai ) { hnd.bossactors.Push(a); a.GiveInventory('BossMarker',1); diff --git a/zscript/handler/swwm_handler_worldload.zsc b/zscript/handler/swwm_handler_worldload.zsc index 39c156eca..398c2d231 100644 --- a/zscript/handler/swwm_handler_worldload.zsc +++ b/zscript/handler/swwm_handler_worldload.zsc @@ -446,8 +446,7 @@ extend Class SWWMHandler if ( cls.GetClassName() != 'KdikdizdCompatEventHandler' ) continue; ti = ThinkerIterator.Create("Thinker"); - Thinker t; - while ( t = ti.Next() ) + foreach ( t:ti ) { if ( t.GetClassName() != 'VoodooPusher' ) continue; diff --git a/zscript/handler/swwm_statichandler.zsc b/zscript/handler/swwm_statichandler.zsc index 1ad936536..3e54cf565 100644 --- a/zscript/handler/swwm_statichandler.zsc +++ b/zscript/handler/swwm_statichandler.zsc @@ -72,8 +72,7 @@ Class SWWMStaticHandler : StaticEventHandler Array stinkers; if ( !sti ) sti = ThinkerIterator.Create("SWWMStaticThinker"); else sti.Reinit(); - Thinker t; - while ( t = sti.Next() ) stinkers.Push(t); + foreach ( t:sti ) stinkers.Push(t); if ( stinkers.Size() > 0 ) { foreach ( s:stinkers ) Console.PrintfEx(PRINT_HIGH|PRINT_NONOTIFY,"%s is not STAT_STATIC!",s.GetClassName()); @@ -341,8 +340,7 @@ Class SWWMStaticHandler : StaticEventHandler for ( int i=Thinker.STAT_INFO; i achievements ) + private void ParseAchievementList( Array &achievements ) { achievements.Clear(); let lmp = Wads.FindLumpFullName("achievements.lst"); @@ -241,36 +241,38 @@ extend Class SWWMStaticHandler let di = DictionaryIterator.Create(achievementstate); while ( di.Next() ) { - String key = di.Key(); + let k = di.Key(); + let v = di.Value(); bool deleteme = true; foreach ( inf:achievementinfo ) { - if ( inf.basename != key ) continue; + if ( inf.basename != k ) continue; deleteme = false; break; } if ( deleteme ) { - if ( developer >= 2 ) Console.Printf("Deleting bogus achievement state %s = %s",key,di.Value()); - achievementstate.Remove(key); + if ( developer >= 2 ) Console.Printf("Deleting bogus achievement state %s = %s",k,v); + achievementstate.Remove(k); } } di = DictionaryIterator.Create(achievementprogress); while ( di.Next() ) { - String key = di.Key(); + let k = di.Key(); + let v = di.Value(); bool deleteme = true; foreach ( inf:achievementinfo ) { - if ( inf.basename != key ) continue; + if ( inf.basename != k ) continue; if ( !inf.maxval ) continue; deleteme = false; break; } if ( deleteme ) { - if ( developer >= 2 ) Console.Printf("Deleting bogus achievement progress %s = %s",key,di.Value()); - achievementprogress.Remove(key); + if ( developer >= 2 ) Console.Printf("Deleting bogus achievement progress %s = %s",k,v); + achievementprogress.Remove(k); } } foreach ( inf:achievementinfo ) diff --git a/zscript/hud/swwm_hud_target.zsc b/zscript/hud/swwm_hud_target.zsc index 85536c8c4..68e808740 100644 --- a/zscript/hud/swwm_hud_target.zsc +++ b/zscript/hud/swwm_hud_target.zsc @@ -9,7 +9,7 @@ extend Class SWWMStatusBar return String.Format("\cj%d\cc%s",int(meters),StringTable.Localize("$SWWM_UNIT_METER")); } - private void DrawInterest( Vector3 viewvec, out bool projinit ) + private void DrawInterest( Vector3 viewvec, bool &projinit ) { String tag; SWWMInterest poi = hnd.intpoints; @@ -84,7 +84,7 @@ extend Class SWWMStatusBar return col; } - private void DrawItemSense( Vector3 viewvec, out bool projinit ) + private void DrawItemSense( Vector3 viewvec, bool &projinit ) { let demo = Demolitionist(CPlayer.mo); if ( !demo ) return; @@ -124,7 +124,7 @@ extend Class SWWMStatusBar return false; } - private void DrawTrackers( Vector3 viewvec, out bool projinit ) + private void DrawTrackers( Vector3 viewvec, bool &projinit ) { let cam = players[consoleplayer].camera; if ( !cti ) cti = ThinkerIterator.Create("SWWMQuickCombatTracker",Thinker.STAT_INVENTORY); @@ -336,7 +336,7 @@ extend Class SWWMStatusBar } } - private void DrawNumbers( Vector3 viewvec, out bool projinit ) + private void DrawNumbers( Vector3 viewvec, bool &projinit ) { SWWMDamNum snum = hnd.damnums; if ( !snum ) return; @@ -366,7 +366,7 @@ extend Class SWWMStatusBar while ( snum = snum.next ); } - private void DrawScores( Vector3 viewvec, out bool projinit ) + private void DrawScores( Vector3 viewvec, bool &projinit ) { SWWMScoreObj snum = hnd.scorenums; if ( !snum ) return; @@ -406,7 +406,7 @@ extend Class SWWMStatusBar private void DrawTarget() { // don't draw when dead or with automap open - if ( (CPlayer.health <= 0) || automapactive ) return; + if ( (CPlayer.health <= 0) || (automapactive && !viewactive) ) return; bool projinit = false; Vector3 viewvec = SWWMUtility.Vec3FromAngles(viewrot.x,viewrot.y); // points of interest diff --git a/zscript/hud/swwm_hud_topstuff.zsc b/zscript/hud/swwm_hud_topstuff.zsc index a2b416c07..1166755d0 100644 --- a/zscript/hud/swwm_hud_topstuff.zsc +++ b/zscript/hud/swwm_hud_topstuff.zsc @@ -510,8 +510,7 @@ extend Class SWWMStatusBar { // oh bother, this will be dicks let ai = level.CreateActorIterator(m.args[0]); - Actor a; - while ( a = ai.Next() ) + foreach ( a:ai ) { Vector2 rv = a.pos.xy-cpos; bool isportal = false; @@ -829,7 +828,7 @@ extend Class SWWMStatusBar { int xx = xmargin, yy = ymargin; // obviously, don't draw the minimap if the automap is open - if ( !automapactive && swwm_mm_enable ) + if ( !(automapactive && !viewactive) && swwm_mm_enable ) { bool smol = (min(ss.x,ss.y/.5625)<480); int hsz = smol?HALFMAPSIZE_SMALL:HALFMAPSIZE; @@ -841,11 +840,11 @@ extend Class SWWMStatusBar // draw stats and timer when automap is open int fstats = swwm_forcestats; bool pstats = swwm_percentstats; - if ( automapactive || (fstats > 0) ) + if ( (automapactive && !viewactive) || (fstats > 0) ) { xx = int(ss.x-(xmargin+2)); String str; - if ( automapactive || (fstats > 1) ) + if ( (automapactive && !viewactive) || (fstats > 1) ) { int label = am_showmaplabel; String ln = level.levelname; diff --git a/zscript/hud/swwm_hudextra.zsc b/zscript/hud/swwm_hudextra.zsc index 1e748a8ad..8e8aa4549 100644 --- a/zscript/hud/swwm_hudextra.zsc +++ b/zscript/hud/swwm_hudextra.zsc @@ -151,7 +151,7 @@ Class GenericFlash : HUDMessageBase } override void Draw( int bottom, int visibility ) { - if ( automapactive || (visibility != BaseStatusBar.HUDMSGLayer_UnderHUD) ) return; + if ( (automapactive && !viewactive) || (visibility != BaseStatusBar.HUDMSGLayer_UnderHUD) ) return; if ( cam && (players[consoleplayer].camera != cam) ) return; double fractic = System.GetTimeFrac(); double falpha = alpha-fractic*(1./duration); diff --git a/zscript/items/swwm_ammospawn.zsc b/zscript/items/swwm_ammospawn.zsc index 48af9787b..f013ee1c8 100644 --- a/zscript/items/swwm_ammospawn.zsc +++ b/zscript/items/swwm_ammospawn.zsc @@ -51,7 +51,7 @@ Class SWWMAmmoSpawner : Inventory abstract return false; } - override bool TryPickup( in out Actor toucher ) + override bool TryPickup( Actor &toucher ) { return false; } diff --git a/zscript/items/swwm_basearmor.zsc b/zscript/items/swwm_basearmor.zsc index dad034392..b5508d95a 100644 --- a/zscript/items/swwm_basearmor.zsc +++ b/zscript/items/swwm_basearmor.zsc @@ -75,7 +75,7 @@ Class SWWMArmor : Armor abstract { return damage; } - override void AbsorbDamage( int damage, Name damageType, out int newdamage, Actor inflictor, Actor source, int flags ) + override void AbsorbDamage( int damage, Name damageType, int &newdamage, Actor inflictor, Actor source, int flags ) { int saved; if ( (amount <= 0) || DamageTypeDefinition.IgnoreArmor(damageType) || (damage <= 0) ) diff --git a/zscript/items/swwm_basehealth.zsc b/zscript/items/swwm_basehealth.zsc index 50f1d901c..aaf433058 100644 --- a/zscript/items/swwm_basehealth.zsc +++ b/zscript/items/swwm_basehealth.zsc @@ -113,7 +113,7 @@ Class SWWMHealth : Inventory abstract if ( Amount <= 0 ) DepleteOrDestroy(); } - override void AbsorbDamage( int damage, Name damageType, out int newdamage, Actor inflictor, Actor source, int flags ) + override void AbsorbDamage( int damage, Name damageType, int &newdamage, Actor inflictor, Actor source, int flags ) { if ( Owner.ApplyDamageFactor(damageType,damage) <= 0 ) return; // this damage type is ignored by the player, so it does not affect us diff --git a/zscript/items/swwm_baseitem.zsc b/zscript/items/swwm_baseitem.zsc index 146ae8f89..faded08a0 100644 --- a/zscript/items/swwm_baseitem.zsc +++ b/zscript/items/swwm_baseitem.zsc @@ -31,7 +31,7 @@ Mixin Class SWWMAutoUseFix } return Super.HandlePickup(item); } - override bool TryPickup( in out Actor toucher ) + override bool TryPickup( Actor &toucher ) { if ( !deathmatch ) return Super.TryPickup(toucher); // pretend to have a max amount of 0 so we can only be picked up if we can be used diff --git a/zscript/items/swwm_funstuff.zsc b/zscript/items/swwm_funstuff.zsc index 33168a6d7..02c4ac9ba 100644 --- a/zscript/items/swwm_funstuff.zsc +++ b/zscript/items/swwm_funstuff.zsc @@ -123,39 +123,37 @@ Class FroggyChair : Actor override bool CanCollideWith( Actor other, bool passive ) { if ( !other.bSHOOTABLE && !other.bSOLID ) return false; + if ( (other == tracer) && (vel.length() > 1) ) return false; + return true; + } + override void CollidedWith( Actor other, bool passive ) + { Vector3 dir = vel; double vsize = dir.length(); // we need to compare Z height because wow thanks Vector3 diff = level.Vec3Diff(pos,other.pos); - if ( (diff.z > height) || (diff.z < -other.height) ) return false; - if ( vsize > 1 ) + if ( (diff.z > height) || (diff.z < -other.height) ) return; + if ( vsize <= 1 ) return; + if ( other == lasthit ) return; + dir /= vsize; + if ( !passive && other.bSHOOTABLE && (!tracer || !other.IsFriend(tracer)) ) { - if ( other == lasthit ) - return false; - dir /= vsize; - if ( !passive && other.bSHOOTABLE && (!tracer || !other.IsFriend(tracer)) ) + lasthit = other; + SWWMUtility.DoKnockback(other,dir,5000*vsize); + Vector3 dirto = level.Vec3Diff(other.Vec3Offset(0,0,other.height/2),Vec3Offset(0,0,height)); + double lento = dirto.length(); + if ( lento <= double.epsilon ) { - lasthit = other; - SWWMUtility.DoKnockback(other,dir,5000*vsize); - Vector3 dirto = level.Vec3Diff(other.Vec3Offset(0,0,other.height/2),Vec3Offset(0,0,height)); - double lento = dirto.length(); - if ( lento <= double.epsilon ) - { - double ang = FRandom[DoBlast](0,360); - double pt = FRandom[DoBlast](-90,90); - dirto = SWWMUtility.Vec3FromAngles(ang,pt); - } - else dirto /= lento; - vel = (dirto+(0,0,.1))*vsize*.3; - Spawn("SWWMItemFog",pos); - other.DamageMobj(self,tracer,int(2.5*vsize),'Melee',DMG_THRUSTLESS); - A_StartSound("squeak",CHAN_WEAPON); - return false; + double ang = FRandom[DoBlast](0,360); + double pt = FRandom[DoBlast](-90,90); + dirto = SWWMUtility.Vec3FromAngles(ang,pt); } - if ( other == tracer ) - return false; + else dirto /= lento; + vel = (dirto+(0,0,.1))*vsize*.3; + Spawn("SWWMItemFog",pos); + other.DamageMobj(self,tracer,int(2.5*vsize),'Melee',DMG_THRUSTLESS); + A_StartSound("squeak",CHAN_WEAPON); } - return true; } States { @@ -696,9 +694,8 @@ Class ChanceboxSpawner : Actor tbox[1] = pos.y-32; tbox[2] = pos.x-32; tbox[3] = pos.x+32; - while ( bl.Next() ) + foreach ( l,p,f:bl ) { - Line l = bl.CurLine; if ( !l ) continue; if ( tbox[2] > l.bbox[3] ) continue; if ( tbox[3] < l.bbox[2] ) continue; @@ -1065,9 +1062,8 @@ Class Chancebox : Actor tbox[1] = testpos.y-32; tbox[2] = testpos.x-32; tbox[3] = testpos.x+32; - while ( bl.Next() ) + foreach ( l,p,f:bl ) { - Line l = bl.CurLine; if ( !l ) continue; if ( tbox[2] > l.bbox[3] ) continue; if ( tbox[3] < l.bbox[2] ) continue; @@ -1098,11 +1094,11 @@ Class Chancebox : Actor if ( cz-fz < 60 ) continue; // too short bool blockedff = false; BlockThingsIterator bt = BlockThingsIterator.CreateFromPos(testpos.x,testpos.y,fz,60,256,false); - while ( bt.Next() ) + foreach ( t,p,f:bt ) { - if ( !bt.Thing ) continue; - if ( abs(bt.Thing.pos.x-testpos.x) > 32+bt.Thing.Radius ) continue; - if ( abs(bt.Thing.pos.y-testpos.y) > 32+bt.Thing.Radius ) continue; + if ( !t ) continue; + if ( abs(t.pos.x-testpos.x) > 32+t.Radius ) continue; + if ( abs(t.pos.y-testpos.y) > 32+t.Radius ) continue; blockedff = true; break; } @@ -1117,11 +1113,10 @@ Class Chancebox : Actor // don't spawn on sky or hurtfloors if there are 3D floors if ( (nffloor > 0) && ((s.GetTexture(0) == skyflatnum) || (s.damageamount > 0)) ) continue; BlockThingsIterator bt = BlockThingsIterator.CreateFromPos(testpos.x,testpos.y,testpos.z,60,256,false); - while ( bt.Next() ) + foreach ( t,p,f:bt ) { - if ( !bt.Thing ) continue; - if ( abs(bt.Thing.pos.x-testpos.x) > 32+bt.Thing.Radius ) continue; - if ( abs(bt.Thing.pos.y-testpos.y) > 32+bt.Thing.Radius ) continue; + if ( abs(t.pos.x-testpos.x) > 32+t.Radius ) continue; + if ( abs(t.pos.y-testpos.y) > 32+t.Radius ) continue; blocked = true; break; } diff --git a/zscript/items/swwm_keys.zsc b/zscript/items/swwm_keys.zsc index aaed0319f..6e93422d5 100644 --- a/zscript/items/swwm_keys.zsc +++ b/zscript/items/swwm_keys.zsc @@ -7,9 +7,7 @@ Class SWWMKey : Key abstract Mixin SWWMRotatingPickup; Mixin SWWMUnrealStyleDrop; - bool propagated; - - override bool TryPickup( in out Actor toucher ) + override bool TryPickup( Actor &toucher ) { // attach the vanilla key that we replace let rt = toucher; @@ -21,8 +19,6 @@ Class SWWMKey : Key abstract SWWMHandler.KeyTagFix(p); p.AttachToOwner(rt); } - // clean up the flag - propagated = false; GoAwayAndDie(); return true; } diff --git a/zscript/items/swwm_miscitems.zsc b/zscript/items/swwm_miscitems.zsc index 301b31bd1..4a4e94eb5 100644 --- a/zscript/items/swwm_miscitems.zsc +++ b/zscript/items/swwm_miscitems.zsc @@ -8,7 +8,7 @@ Class Omnisight : Inventory Mixin SWWMRotatingPickup; Mixin SWWMUnrealStyleDrop; - override bool TryPickup( in out Actor toucher ) + override bool TryPickup( Actor &toucher ) { if ( !level.allmap ) { @@ -267,7 +267,7 @@ Class TheBall : Actor override int SpecialMissileHit( Actor victim ) { if ( (vel.length() <= 5) || ((victim == target) && !bHITOWNER) || (victim == lasthit) || (!victim.bSHOOTABLE && !victim.bSOLID) ) - return 1; + return MHIT_PASS; // check if we should rip or bounce // girthitude double girth = (victim.radius+victim.height)/2.*max(50,victim.mass)*(victim.health/double(victim.GetSpawnHealth())); @@ -337,14 +337,14 @@ Class TheBall : Actor if ( (slamforce > girth) && is_schutt ) { vel *= .7; - return 1; + return MHIT_PASS; } // force bounce BlockingMobj = victim; A_HandleBounce(); lasthit = victim; // pretend to pass through - return 1; + return MHIT_PASS; } override void PostBeginPlay() { diff --git a/zscript/items/swwm_powerups.zsc b/zscript/items/swwm_powerups.zsc index 585518c7e..36a021d9f 100644 --- a/zscript/items/swwm_powerups.zsc +++ b/zscript/items/swwm_powerups.zsc @@ -7,7 +7,7 @@ Class GrilledCheeseSafeguard : Powerup Powerup.Duration -3; } - override void ModifyDamage( int damage, Name damageType, out int newdamage, bool passive, Actor inflictor, Actor source, int flags ) + override void ModifyDamage( int damage, Name damageType, int &newdamage, bool passive, Actor inflictor, Actor source, int flags ) { if ( passive ) newdamage = 0; } @@ -96,7 +96,7 @@ Class GrilledCheeseSandwich : Inventory DoTheThing(); return true; } - override void AbsorbDamage( int damage, Name damageType, out int newdamage, Actor inflictor, Actor source, int flags ) + override void AbsorbDamage( int damage, Name damageType, int &newdamage, Actor inflictor, Actor source, int flags ) { if ( Owner.FindInventory("GrilledCheeseSafeguard") ) return; // the safeguard absorbs all @@ -328,9 +328,8 @@ Class GhostTarget : Actor if ( isFrozen() ) return; if ( diedie ) A_FadeOut(.05); let bt = BlockThingsIterator.Create(self,256); - while ( bt.Next() ) + foreach ( t,p,f:bt ) { - let t = bt.Thing; if ( !t || !t.bIsMonster || t.player || !t.IsHostile(master) || (t.target != self) ) continue; if ( SWWMUtility.BoxIntersect(self,t,pad:16) || t.CheckMeleeRange() ) { @@ -1111,7 +1110,7 @@ Class RagekitPower : Powerup Demolitionist(Owner).lastbump *= .9; } - override void ModifyDamage( int damage, Name damageType, out int newdamage, bool passive, Actor inflictor, Actor source, int flags ) + override void ModifyDamage( int damage, Name damageType, int &newdamage, bool passive, Actor inflictor, Actor source, int flags ) { if ( passive ) return; if ( (damageType == 'Melee') || (damageType == 'Jump') || (damageType == 'Dash') || (damageType == 'Buttslam') || (damageType == 'GroundPound') || (damageType == 'HammerShockwave') ) diff --git a/zscript/items/swwm_powerups_vip.zsc b/zscript/items/swwm_powerups_vip.zsc index ad7d8b293..a27d4f186 100644 --- a/zscript/items/swwm_powerups_vip.zsc +++ b/zscript/items/swwm_powerups_vip.zsc @@ -515,9 +515,8 @@ Class Mykradvo : Inventory { Vector2 disp = level.GetDisplacement(t.CurSector.PortalGroup,i); bt = BlockThingsIterator.CreateFromPos(t.pos.x+disp.x,t.pos.y+disp.y,t.pos.z,3200,3200,false); - while ( bt.Next() ) + foreach ( a,p,f:bt ) { - let a = bt.Thing; // must be an active, shootable live monster if ( !a || !a.bISMONSTER || !a.bSHOOTABLE || a.bDORMANT || (a.Health <= 0) ) continue; // skip non-hostiles @@ -880,7 +879,7 @@ Class AngeryPower : Powerup Demolitionist(Owner).lastbump *= .9; } - override void ModifyDamage( int damage, Name damageType, out int newdamage, bool passive, Actor inflictor, Actor source, int flags ) + override void ModifyDamage( int damage, Name damageType, int &newdamage, bool passive, Actor inflictor, Actor source, int flags ) { if ( passive || (damage <= 0) ) return; if ( damageType == 'CoAb44' ) // can only be in 4s diff --git a/zscript/kbase/swwm_kbase_priv.zsc b/zscript/kbase/swwm_kbase_priv.zsc index 3b57c1d73..85d1bdc17 100644 --- a/zscript/kbase/swwm_kbase_priv.zsc +++ b/zscript/kbase/swwm_kbase_priv.zsc @@ -3,7 +3,7 @@ extend Class DemolitionistMenu { // initialize the crime clock - static void SetClock( out int c_year, out int c_month, out int c_day, out int c_hour, out int c_minute, out String c_tz ) + static void SetClock( int &c_year, int &c_month, int &c_day, int &c_hour, int &c_minute, String &c_tz ) { // use mission log clock if available let mlog = SWWMMissionLog.Get(); diff --git a/zscript/kbase/swwm_kbasetab_stats.zsc b/zscript/kbase/swwm_kbasetab_stats.zsc index 3eb259663..4130fcdc0 100644 --- a/zscript/kbase/swwm_kbasetab_stats.zsc +++ b/zscript/kbase/swwm_kbasetab_stats.zsc @@ -576,7 +576,7 @@ Class DemolitionistMenuMapStatItem : DemolitionistMenuListItem return width; } - void GetLengths( bool selected, out int tlen, out int slen, out int ilen, out int klen ) + void GetLengths( bool selected, int &tlen, int &slen, int &ilen, int &klen ) { int time, par, suck, stotal, scount, itotal, icount, ktotal, kcount; if ( selected ) diff --git a/zscript/menu/swwm_title.zsc b/zscript/menu/swwm_title.zsc index b425a1ced..0a6352f04 100644 --- a/zscript/menu/swwm_title.zsc +++ b/zscript/menu/swwm_title.zsc @@ -95,6 +95,9 @@ Class SWWMTitleStuff : EventHandler if ( swwm_nointroex && (titletimer >= -300) && (titletimer < 0) ) titletimer = 0; if ( titletimer == -250 ) { + // this would be much simpler if we had a way to access the mapinfo variable + // (obviously, with this naive method, any custom music that doesn't use the + // vanilla filename won't be used) if ( gameinfo.gametype&GAME_Hexen ) S_ChangeMusic("HEXEN"); else if ( gameinfo.gametype&GAME_Heretic ) S_ChangeMusic("MUS_TITL"); else diff --git a/zscript/player/swwm_player.zsc b/zscript/player/swwm_player.zsc index 891e3fc3f..3e85b4489 100644 --- a/zscript/player/swwm_player.zsc +++ b/zscript/player/swwm_player.zsc @@ -22,7 +22,6 @@ Class Demolitionist : PlayerPawn int dashlockst; bool fullfuel; bool sendtoground; - bool key_reentrant; bool bInDefaultInventory; bool oldsinglefirst; @@ -329,9 +328,8 @@ Class Demolitionist : PlayerPawn tbox[1] = pos.y-(radius+8); tbox[2] = pos.x-(radius+8); tbox[3] = pos.x+(radius+8); - while ( bl.Next() ) + foreach( l,p,f:bl ) { - Line l = bl.CurLine; if ( !l ) continue; if ( tbox[2] > l.bbox[3] ) continue; if ( tbox[3] < l.bbox[2] ) continue; diff --git a/zscript/player/swwm_player_cheats.zsc b/zscript/player/swwm_player_cheats.zsc index 81799bed9..747c21d42 100644 --- a/zscript/player/swwm_player_cheats.zsc +++ b/zscript/player/swwm_player_cheats.zsc @@ -83,10 +83,7 @@ extend Class Demolitionist continue; let item = Inventory(Spawn(rep)); SWWMHandler.KeyTagFix(item); - if ( item is 'SWWMKey' ) SWWMKey(item).propagated = true; // no anim - key_reentrant = true; if ( !item.CallTryPickup(self) ) item.Destroy(); - key_reentrant = false; } } void CheatGive_Weapons() diff --git a/zscript/player/swwm_player_inventory.zsc b/zscript/player/swwm_player_inventory.zsc index 43ecb8114..84ebec399 100644 --- a/zscript/player/swwm_player_inventory.zsc +++ b/zscript/player/swwm_player_inventory.zsc @@ -64,6 +64,14 @@ extend Class Demolitionist Super.RemoveInventory(item); } + // skull keys, random chance of "alas poor yorick" line + private clearscope bool IsSkullKey( Inventory item ) + { + String cname = item.GetClassName(); + cname.MakeLower(); + return (cname.IndexOf("skull") != -1); + } + override void AddInventory( Inventory item ) { Super.AddInventory(item); @@ -91,7 +99,7 @@ extend Class Demolitionist facegrin = true; } } - if ( (item is 'Key') && !key_reentrant && !deathmatch && !bInDefaultInventory ) + if ( (item is 'Key') && !ingivecheat && !deathmatch && !bInDefaultInventory ) { // score int score = 100; @@ -99,29 +107,13 @@ extend Class Demolitionist else Console.Printf(StringTable.Localize("$SWWM_FINDKEYREM"),player.GetUserName(),item.GetTag(),score); SWWMCredits.Give(player,score); if ( player == players[consoleplayer] ) SWWMScoreObj.SpawnAtActorBunch(100,self); - if ( !ingivecheat ) + if ( !Random[DemoLines](0,5) && IsSkullKey(item) ) { - if ( !Random[DemoLines](0,5) && - ((item.GetClass() == 'RedSkull') || (item.GetClass() == 'YellowSkull') - || (item.GetClass() == 'BlueSkull') || (item.GetClassName() == "PurpleSkull")) ) - { - if ( !SWWMHandler.AddOneliner("skullget",2) ) - SWWMHandler.AddOneliner("keyget",2); - } - else SWWMHandler.AddOneliner("keyget",2); - facegrin = true; - } - // share all keys in mp - for ( int i=0; i 0) ) { @@ -571,10 +569,9 @@ extend Class Demolitionist double maxmass = max(mass*spd/40.,200); if ( raging ) maxmass *= 2; let bt = BlockThingsIterator.Create(self,spd+radius+1024); - while ( bt.Next() ) + foreach( a,p,f:bt ) { if ( spd <= 0 ) break; // if something stopped us, no more iteration - let a = bt.Thing; if ( !a || (a == self) || (!a.bSOLID && !a.bSHOOTABLE) || a.bTHRUACTORS || a.bCORPSE || !CanCollideWith(a,false) || !a.CanCollideWith(self,true) ) continue; if ( !SWWMUtility.ExtrudeIntersect(self,a,dir*(spd+radius),8) ) continue; if ( (a.pos.z <= a.floorz) && (a.height <= MaxStepHeight) ) continue; diff --git a/zscript/swwm_common.zsc b/zscript/swwm_common.zsc index 1743c9f7d..ac61e3578 100644 --- a/zscript/swwm_common.zsc +++ b/zscript/swwm_common.zsc @@ -263,7 +263,7 @@ Class SWWMWhoPushedMe : Inventory Destroy(); } - override void ModifyDamage( int damage, Name damageType, out int newdamage, bool passive, Actor inflictor, Actor source, int flags ) + override void ModifyDamage( int damage, Name damageType, int &newdamage, bool passive, Actor inflictor, Actor source, int flags ) { if ( !passive || (damageType != 'Falling') || (killtimer > 0) ) return; killtimer = 5; diff --git a/zscript/swwm_gesture_fx.zsc b/zscript/swwm_gesture_fx.zsc index cc88db4b3..ed4ca6dd8 100644 --- a/zscript/swwm_gesture_fx.zsc +++ b/zscript/swwm_gesture_fx.zsc @@ -168,9 +168,9 @@ Class LoveHeart : Actor override int SpecialMissileHit( Actor victim ) { - if ( !victim.bSHOOTABLE && (victim != tracer) ) return 1; - if ( tracer && (victim != tracer) ) return 1; - return -1; + if ( !victim.bSHOOTABLE && (victim != tracer) ) return MHIT_PASS; + if ( tracer && (victim != tracer) ) return MHIT_PASS; + return MHIT_DEFAULT; } void A_HeartTick() diff --git a/zscript/utility/swwm_utility.zsc b/zscript/utility/swwm_utility.zsc index 7fa10430c..b9d6e8ee2 100644 --- a/zscript/utility/swwm_utility.zsc +++ b/zscript/utility/swwm_utility.zsc @@ -3,7 +3,7 @@ Class SWWMUtility { // gets the names of all mod cvars - static void GetCVars( out Array cvarlist ) + static void GetCVars( Array &cvarlist ) { cvarlist.Clear(); let lmp = Wads.CheckNumForFullname("cvarinfo.base"); diff --git a/zscript/utility/swwm_utility_blast.zsc b/zscript/utility/swwm_utility_blast.zsc index 966dd5cc6..95c99031b 100644 --- a/zscript/utility/swwm_utility_blast.zsc +++ b/zscript/utility/swwm_utility_blast.zsc @@ -78,9 +78,8 @@ extend Class SWWMUtility { Vector2 disp = level.GetDisplacement(thisgroup,i); bt = BlockThingsIterator.CreateFromPos(Source.pos.x+disp.x,Source.pos.y+disp.y,Source.pos.z,ExplosionRadius,ExplosionRadius,false); - while ( bt.Next() ) + foreach ( a,p,f:bt ) { - let a = bt.Thing; if ( !a ) continue; // this can happen, yes // early checks for self and ignored actor (usually the instigator) if ( (a == ignoreme) || (a == Source) ) diff --git a/zscript/utility/swwm_utility_compat.zsc b/zscript/utility/swwm_utility_compat.zsc index dbfc6b4b3..df75324c9 100644 --- a/zscript/utility/swwm_utility_compat.zsc +++ b/zscript/utility/swwm_utility_compat.zsc @@ -145,8 +145,7 @@ extend Class SWWMUtility static play void SpawnVanillaBossBrain( int tid ) { let ai = Level.CreateActorIterator(tid); - Actor a; - while ( a = ai.Next() ) + foreach ( a:ai ) { let bb = a.Spawn("BossBrain",a.pos,NO_REPLACE); bb.angle = a.angle; diff --git a/zscript/utility/swwm_utility_map.zsc b/zscript/utility/swwm_utility_map.zsc index dde761a63..697db15aa 100644 --- a/zscript/utility/swwm_utility_map.zsc +++ b/zscript/utility/swwm_utility_map.zsc @@ -10,7 +10,7 @@ enum EExitType extend Class SWWMUtility { // Thanks to ZZYZX and Nash - static play void SetToSlopeSpecific( Actor a, double dang, SecPlane plane, bool flipnorm ) + static play void SetToSlopeSpecific( Actor a, double dang, readonly plane, bool flipnorm ) { Vector3 fnormal; if ( flipnorm ) fnormal = -plane.Normal; @@ -275,6 +275,7 @@ extend Class SWWMUtility } // the stupidest thing ever, it's called BlockingLine but it's not always blocking us + // note: MovementBlockingLine as an alternative seems prone to issues at the moment, needs further investigation static bool BlockingLineIsBlocking( Actor a, int blockflags = Line.ML_BLOCKEVERYTHING, Line testline = null ) { Line l = testline?testline:a.BlockingLine; @@ -408,6 +409,7 @@ extend Class SWWMUtility } if ( floorfound ) return (al+ah+bl+bh)*.25; // check for midtex + // TODO: see if GetMidTexturePosition() is useful here to simplify code if ( !l.sidedef[0].GetTexture(1).IsNull() ) { double ofs = l.sidedef[0].GetTextureYOffset(1); @@ -624,7 +626,7 @@ extend Class SWWMUtility } // iterate through polyobjects and see if this line is part of one (returning which, if any) - static bool IsPolyLine( Line l, out swwm_PolyobjectHandle o ) + static bool IsPolyLine( Line l, swwm_PolyobjectHandle &o ) { let pi = swwm_PolyobjectIterator.Create(); swwm_PolyobjectHandle p; diff --git a/zscript/utility/swwm_utility_math.zsc b/zscript/utility/swwm_utility_math.zsc index ef0dc0b78..44b25ea24 100644 --- a/zscript/utility/swwm_utility_math.zsc +++ b/zscript/utility/swwm_utility_math.zsc @@ -9,7 +9,7 @@ Struct SWWMProjectionData extend Class SWWMUtility { // gutamatics caching - static void PrepareProjData( out SWWMProjectionData d, Vector3 viewpos, double angle, double pitch, double roll, double fov ) + static void PrepareProjData( SWWMProjectionData &d, Vector3 viewpos, double angle, double pitch, double roll, double fov ) { double aspect = Screen.GetAspectRatio(); // vertical fov @@ -50,16 +50,16 @@ extend Class SWWMUtility } // less code duplication - static void AdjustClean_1( out double x, out double y ) + static void AdjustClean_1( double &x, double &y ) { x = (x-160)*CleanXFac_1+(Screen.GetWidth()*.5); y = (y-100)*CleanYFac_1+(Screen.GetHeight()*.5); } - static void AdjustClean_1x( out double x ) + static void AdjustClean_1x( double &x ) { x = (x-160)*CleanXFac_1+(Screen.GetWidth()*.5); } - static void AdjustClean_1y( out double y ) + static void AdjustClean_1y( double &y ) { y = (y-100)*CleanYFac_1+(Screen.GetHeight()*.5); } diff --git a/zscript/utility/swwm_utility_string.zsc b/zscript/utility/swwm_utility_string.zsc index efa90aedf..e386406c6 100644 --- a/zscript/utility/swwm_utility_string.zsc +++ b/zscript/utility/swwm_utility_string.zsc @@ -2,7 +2,7 @@ extend Class SWWMUtility { // bit ugly, but it works - static void ThousandsStr( out String s, int col = Font.CR_UNDEFINED, String colstr = "" ) + static void ThousandsStr( String &s, int col = Font.CR_UNDEFINED, String colstr = "" ) { if ( (col < Font.CR_UNDEFINED) || (col >= Font.NUM_TEXT_COLORS) ) ThrowAbortException("col parameter out of range, use colstr for non-standard font colors."); @@ -34,7 +34,7 @@ extend Class SWWMUtility return nstr; } - static void StripColor( out String str ) + static void StripColor( String &str ) { int len = str.CodePointCount(); for ( int i=0, pos=0; i 64000000) || !CheckSight(t,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) continue; Vector3 dirto = level.Vec3Diff(pos,t.Vec3Offset(0,0,t.height/2)).unit(); @@ -231,9 +230,8 @@ Class BigBiospark : Actor { Vector2 disp = level.GetDisplacement(CurSector.PortalGroup,i); bt = BlockThingsIterator.CreateFromPos(pos.x+disp.x,pos.y+disp.y,pos.z,120,120,false); - while ( bt.Next() ) + foreach ( t,p,f:bt ) { - let t = bt.Thing; if ( !t || !t.bSHOOTABLE || !SWWMUtility.SphereIntersect(t,pos,120) ) continue; if ( hitlist.Find(t) >= hitlist.Size() ) hitlist.Push(t); @@ -479,9 +477,8 @@ Class BiosparkBall : Actor { double closest = double.infinity; let bt = BlockThingsIterator.Create(self,8000); - while ( bt.Next() ) + foreach ( t,p,f:bt ) { - let t = bt.Thing; double dist; if ( !t || !t.bSHOOTABLE || (!t.bISMONSTER && !(t is 'BossBrain') && !t.player) || (t.Health <= 0) || (target && t.IsFriend(target)) || ((dist=Distance3DSquared(t)) > 250000) || !CheckSight(t,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) continue; Vector3 dirto = level.Vec3Diff(pos,t.Vec3Offset(0,0,t.height/2)).unit(); @@ -512,9 +509,8 @@ Class BiosparkBall : Actor } // proximity check let bt = BlockThingsIterator.Create(self,256); - while ( bt.Next() ) + foreach ( t,p,f:bt ) { - let t = bt.Thing; if ( !t || !t.bSHOOTABLE || (!t.bISMONSTER && !(t is 'BossBrain')) || (t.Health <= 0) || (target && t.IsFriend(target)) || !SWWMUtility.SphereIntersect(t,level.Vec3Offset(pos,vel),16) || !CheckSight(t,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) continue; deto++; break; @@ -1071,9 +1067,8 @@ Class BiosparkBeam : SWWMNonInteractiveActor nextpos = t.Results.HitPos; double closest = double.infinity; let bt = BlockThingsIterator.Create(self,500); - while ( bt.Next() ) + foreach ( t,p,f:bt ) { - let t = bt.Thing; double dist; if ( !t || (!(t is 'BiosparkHitbox') && (!t.bSHOOTABLE || (!t.bISMONSTER && !(t is 'BossBrain') && !t.player) || (t.Health <= 0) || (target && t.IsFriend(target)))) || ((dist=Distance3DSquared(t)) > 250000) || !CheckSight(t,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) continue; Vector3 dirto = level.Vec3Diff(nextpos,t.Vec3Offset(0,0,t.height/2)); @@ -1379,7 +1374,7 @@ Class BiosparkArc : SWWMNonInteractiveActor { double closest = double.infinity; let bt = BlockThingsIterator.Create(self,1500); - while ( bt.Next() ) + foreach ( t,p,f:bt ) { let t = bt.Thing; double dist; diff --git a/zscript/weapons/swwm_splode_fx.zsc b/zscript/weapons/swwm_splode_fx.zsc index 7676aad66..5b23c82c7 100644 --- a/zscript/weapons/swwm_splode_fx.zsc +++ b/zscript/weapons/swwm_splode_fx.zsc @@ -246,9 +246,8 @@ Class ExplodiumMagHitbox : Actor } SetOrigin(target.Vec3Offset(0,0,-height*.5),false); let bt = BlockThingsIterator.Create(self,256); - while ( bt.Next() ) + foreach ( t,p,f:bt ) { - let t = bt.Thing; if ( !t || (t == self) || !t.bSHOOTABLE || (t == target.target) || t.IsFriend(target.target) || !SWWMUtility.BoxIntersect(self,t) ) continue; target.bKILLED = true; @@ -298,8 +297,8 @@ Class ExplodiumMagAttach : ExplodiumMagProj override int SpecialMissileHit( Actor victim ) { - if ( victim is 'ExplodiumMagHitbox' ) return 1; - return -1; + if ( victim is 'ExplodiumMagHitbox' ) return MHIT_PASS; + return MHIT_DEFAULT; } override void Tick() {