Updates for GZDoom 4.12, part 1 (new functions, variables, flags, etc.).

This commit is contained in:
Mari the Deer 2024-04-22 14:34:22 +02:00
commit f38db38751
79 changed files with 349 additions and 183 deletions

View file

@ -47,6 +47,9 @@ More weapons, because we need 'em. In addition, a bunch of cleanup in base weapo
* [x] **Additional WAD Compatibility:** * [x] **Additional WAD Compatibility:**
- [x] SIGIL 2 - [x] SIGIL 2
- [x] Eviternity 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)*: ## 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)*. 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)*** * [ ] **Fix handling of conveyor physics *(if scrollers ever get exposed to ZScript)***
* [ ] **Per-weapon player models *(could be very time-consuming)*** * [ ] **Per-weapon player models *(could be very time-consuming)***
* [ ] **Model animations decoupled from actor states *(may be needed for the previous one)*** * [ ] **Model animations decoupled from actor states *(may be needed for the previous one)***

View file

@ -34,7 +34,7 @@ Hope you have fun exploding demon knees.
## Software and Hardware Requirements ## 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: 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. - **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. - **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)* *(Testers are welcome for narrowing down more precise hardware requirements)*

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 B

View file

@ -1,3 +1,3 @@
[default] [default]
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r1125 \cu(Thu Apr 18 20:02:26 CEST 2024)\c-"; SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r1127 \cu(Mon Apr 22 14:35:02 CEST 2024)\c-";
SWWM_SHORTVER="\cw1.3pre r1125 \cu(2024-04-18 20:02:26)\c-"; SWWM_SHORTVER="\cw1.3pre r1127 \cu(2024-04-22 14:35:02)\c-";

View file

@ -17,6 +17,7 @@ Model "Demolitionist"
AngleOffset -90 AngleOffset -90
Scale 40.96 40.96 40.96 Scale 40.96 40.96 40.96
IGNORETRANSLATION IGNORETRANSLATION
FORCECULLBACKFACES
// Still/Walk // Still/Walk
FrameIndex XZW1 A 0 1 FrameIndex XZW1 A 0 1

View file

@ -10,6 +10,7 @@
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -23,6 +24,7 @@ Model "SMW05Ammo2"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -36,6 +38,7 @@ Model "SMW05Ammo3"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -49,6 +52,7 @@ Model "SMW05SmallAmmo"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -62,6 +66,7 @@ Model "SMW05BigAmmo"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
}*/ }*/
@ -76,6 +81,7 @@ Model "SheenAmmo"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -87,6 +93,7 @@ Model "SheenAmmo2"
Skin 0 "SheenBullet.png" Skin 0 "SheenBullet.png"
Scale 6 6 6 Scale 6 6 6
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -98,6 +105,7 @@ Model "SheenAmmo3"
Skin 0 "SheenBullet.png" Skin 0 "SheenBullet.png"
Scale 6 6 6 Scale 6 6 6
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -122,6 +130,7 @@ Model "SheenBigAmmo"
Scale 12 12 12 Scale 12 12 12
AngleOffset -90 AngleOffset -90
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -137,6 +146,7 @@ Model "QuadravolAmmo"
RollOffset -30 RollOffset -30
AngleOffset -90 AngleOffset -90
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -149,6 +159,7 @@ Model "QuadravolAmmo2"
Scale 5 5 5 Scale 5 5 5
ZOffset 16 ZOffset 16
AngleOffset -90 AngleOffset -90
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -161,6 +172,7 @@ Model "QuadravolAmmo3"
Scale 5 5 5 Scale 5 5 5
ZOffset 16 ZOffset 16
AngleOffset -90 AngleOffset -90
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -175,6 +187,7 @@ Model "QuadravolAmmo3"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -188,6 +201,7 @@ Model "SparksterBAmmo2"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -201,6 +215,7 @@ Model "SparksterBAmmo3"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -214,6 +229,7 @@ Model "SparksterRAmmo"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -227,6 +243,7 @@ Model "SparksterRAmmo2"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -240,6 +257,7 @@ Model "SparksterRAmmo3"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -254,6 +272,7 @@ Model "RayBolt"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -267,6 +286,7 @@ Model "RayBolt2"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -280,6 +300,7 @@ Model "RayBolt5"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -293,6 +314,7 @@ Model "RayAmmo"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
}*/ }*/
@ -305,6 +327,7 @@ Model "MisterRound"
Skin 0 "MortalRound.png" Skin 0 "MortalRound.png"
Scale 8 8 8 Scale 8 8 8
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -316,6 +339,7 @@ Model "MisterRound2"
Skin 0 "MortalRound.png" Skin 0 "MortalRound.png"
Scale 8 8 8 Scale 8 8 8
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -327,6 +351,7 @@ Model "MisterRound3"
Skin 0 "MortalRound.png" Skin 0 "MortalRound.png"
Scale 8 8 8 Scale 8 8 8
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -338,6 +363,7 @@ Model "MisterRound5"
Skin 0 "MortalRound.png" Skin 0 "MortalRound.png"
Scale 8 8 8 Scale 8 8 8
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -351,6 +377,7 @@ Model "MisterAmmo"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -365,6 +392,7 @@ Model "MisterGAmmo"
AngleOffset -90 AngleOffset -90
RollOffset 30 RollOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -379,6 +407,7 @@ Model "MisterGAmmo"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -392,6 +421,7 @@ Model "UltimateAmmo"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
}*/ }*/

View file

@ -24,6 +24,7 @@ Model "ItamexHammer"
Scale 50 50 50 Scale 50 50 50
ZOffset 28 ZOffset 28
AngleOffset -90 AngleOffset -90
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -40,6 +41,7 @@ Model "ItamexHammer"
AngleOffset -90 AngleOffset -90
Scale -128 64 128 Scale -128 64 128
FORCECULLBACKFACES
// Still // Still
FrameIndex XZW2 A 1 0 FrameIndex XZW2 A 1 0

View file

@ -11,6 +11,7 @@ Model "MisterCasing"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
ZOffset 0.35 ZOffset 0.35
@ -34,6 +35,7 @@ Model "MisterGCasing"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
ZOffset 1.1 ZOffset 1.1
@ -50,6 +52,7 @@ Model "MisterMag"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
Skin 0 "MortalMag_Empty.png" Skin 0 "MortalMag_Empty.png"
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
@ -69,6 +72,7 @@ Model "MisterGrenade"
Scale 24 24 24 Scale 24 24 24
AngleOffset 90 AngleOffset 90
ZOffset 3.3 ZOffset 3.3
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -81,6 +85,7 @@ Model "MisterSubGrenade"
Scale 8 8 8 Scale 8 8 8
AngleOffset 90 AngleOffset 90
ZOffset 1.1 ZOffset 1.1
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -131,7 +136,7 @@ Model "MisterRifle"
Scale 64 64 64 Scale 64 64 64
ZOffset 20 ZOffset 20
AngleOffset -90 AngleOffset -90
DONTCULLBACKFACES FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
FrameIndex XZW1 B 0 1 FrameIndex XZW1 B 0 1
@ -194,6 +199,7 @@ Model "MisterRifle"
AngleOffset -90 AngleOffset -90
Scale -128 64 128 Scale -128 64 128
FORCECULLBACKFACES
//// UNLOCKED //// UNLOCKED
// Still / Deselect // Still / Deselect

View file

@ -9,6 +9,7 @@ Model "ModernSparkster"
Scale 50 50 50 Scale 50 50 50
ZOffset 20 ZOffset 20
AngleOffset -90 AngleOffset -90
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }

View file

@ -10,6 +10,7 @@ Model "PlasmaBlast"
Scale 120 120 120 Scale 120 120 120
ZOffset 16 ZOffset 16
AngleOffset -90 AngleOffset -90
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }

View file

@ -10,6 +10,7 @@ Model "PuntzerBeta"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }

View file

@ -10,6 +10,7 @@ Model "PuntzerGamma"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }

View file

@ -11,6 +11,7 @@ Model "QuadravolCasing"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
ZOffset 1 ZOffset 1
@ -28,6 +29,7 @@ Model "Quadravol"
Scale 100 100 100 Scale 100 100 100
ZOffset 20 ZOffset 20
AngleOffset -90 AngleOffset -90
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -40,6 +42,7 @@ Model "Quadravol"
AngleOffset -90 AngleOffset -90
Scale -128 64 128 Scale -128 64 128
FORCECULLBACKFACES
// Eject // Eject
FrameIndex XZWZ A 2 87 FrameIndex XZWZ A 2 87
@ -134,6 +137,7 @@ Model "Quadravol"
AngleOffset -90 AngleOffset -90
Scale -128 64 128 Scale -128 64 128
FORCECULLBACKFACES
//// TWO HANDED //// TWO HANDED
// Still // Still

View file

@ -10,6 +10,7 @@ Model "RafanKos"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }

View file

@ -10,6 +10,7 @@ Model "RayKhom"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }

View file

@ -57,6 +57,7 @@ Model "SheenCasing"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
ZOffset 0.75 ZOffset 0.75
@ -73,6 +74,7 @@ Model "HeavyMahSheenGun"
Scale 100 100 100 Scale 100 100 100
AngleOffset -90 AngleOffset -90
ZOffset 20 ZOffset 20
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -157,6 +159,7 @@ Model "HeavyMahSheenGun"
AngleOffset -90 AngleOffset -90
Scale -128 64 128 Scale -128 64 128
Offset 0 -1 -2 Offset 0 -1 -2
FORCECULLBACKFACES
// Still // Still
FrameIndex XZW2 A 1 0 FrameIndex XZW2 A 1 0

View file

@ -8,6 +8,7 @@ Model "SWWMGesture"
SurfaceSkin 0 2 "DemoSoft.png" SurfaceSkin 0 2 "DemoSoft.png"
AngleOffset -90 AngleOffset -90
Scale -128 64 128 Scale -128 64 128
FORCECULLBACKFACES
// Initial // Initial
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
@ -121,6 +122,7 @@ Model "SWWMGesture"
SurfaceSkin 0 3 "ExplodiumGun.png" SurfaceSkin 0 3 "ExplodiumGun.png"
AngleOffset -90 AngleOffset -90
Scale -128 64 128 Scale -128 64 128
FORCECULLBACKFACES
// Quick Grenade // Quick Grenade
FrameIndex XZW4 Q 0 0 FrameIndex XZW4 Q 0 0
@ -171,6 +173,7 @@ Model "SWWMGesture"
SurfaceSkin 0 0 "DemoTags.png" SurfaceSkin 0 0 "DemoTags.png"
SurfaceSkin 0 1 "DemoArms.png" SurfaceSkin 0 1 "DemoArms.png"
SurfaceSkin 0 2 "DemoSoft.png" SurfaceSkin 0 2 "DemoSoft.png"
FORCECULLBACKFACES
AngleOffset -90 AngleOffset -90
Scale -128 64 128 Scale -128 64 128

View file

@ -8,6 +8,7 @@ Model "RedShell"
PitchOffset 30 PitchOffset 30
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -19,6 +20,7 @@ Model "RedShell2"
Skin 0 "Shell_Normal.png" Skin 0 "Shell_Normal.png"
Scale 6 6 6 Scale 6 6 6
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -30,6 +32,7 @@ Model "RedShell4"
Skin 0 "Shell_Normal.png" Skin 0 "Shell_Normal.png"
Scale 6 6 6 Scale 6 6 6
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -56,6 +59,7 @@ Model "GoldShell"
PitchOffset 30 PitchOffset 30
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -70,6 +74,7 @@ Model "EvisceratorShell"
PitchOffset 45 PitchOffset 45
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -82,6 +87,7 @@ Model "EvisceratorShell2"
SurfaceSkin 0 1 "EvisceratorClip.png" SurfaceSkin 0 1 "EvisceratorClip.png"
Scale 45 45 45 Scale 45 45 45
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -94,6 +100,7 @@ Model "EvisceratorShell3"
SurfaceSkin 0 1 "EvisceratorClip.png" SurfaceSkin 0 1 "EvisceratorClip.png"
Scale 45 45 45 Scale 45 45 45
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -106,6 +113,7 @@ Model "EvisceratorSixPack"
SurfaceSkin 0 1 "EvisceratorShell.png" SurfaceSkin 0 1 "EvisceratorShell.png"
Scale 20 20 20 Scale 20 20 20
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -120,6 +128,7 @@ Model "HellblazerMissiles"
PitchOffset 45 PitchOffset 45
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -131,6 +140,7 @@ Model "HellblazerMissiles2"
Skin 0 "HellblazerMissile.png" Skin 0 "HellblazerMissile.png"
Scale 40 40 40 Scale 40 40 40
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -142,6 +152,7 @@ Model "HellblazerMissiles3"
Skin 0 "HellblazerMissile.png" Skin 0 "HellblazerMissile.png"
Scale 40 40 40 Scale 40 40 40
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -156,6 +167,7 @@ Model "HellblazerMissileMag"
PitchOffset -45 PitchOffset -45
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -170,6 +182,7 @@ Model "SparkUnit"
PitchOffset 30 PitchOffset 30
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -181,6 +194,7 @@ Model "SparkUnit2"
Skin 0 "SparksterAmmo.png" Skin 0 "SparksterAmmo.png"
Scale 40 40 40 Scale 40 40 40
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -195,6 +209,7 @@ Model "SilverBulletAmmo"
PitchOffset 30 PitchOffset 30
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -208,6 +223,7 @@ Model "SilverBullets"
PitchOffset 30 PitchOffset 30
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -219,6 +235,7 @@ Model "SilverBullets2"
Skin 0 "SilverbulletBullet.png" Skin 0 "SilverbulletBullet.png"
Scale 12 12 12 Scale 12 12 12
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -230,6 +247,7 @@ Model "SilverBullets3"
Skin 0 "SilverbulletBullet.png" Skin 0 "SilverbulletBullet.png"
Scale 12 12 12 Scale 12 12 12
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -244,6 +262,7 @@ Model "CandyGunAmmo"
PitchOffset 30 PitchOffset 30
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -258,6 +277,7 @@ Model "CandyGunBullets"
PitchOffset 30 PitchOffset 30
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -270,6 +290,7 @@ Model "CandyGunBullets2"
SurfaceSkin 0 1 "CandyCasing.png" SurfaceSkin 0 1 "CandyCasing.png"
Scale 5 5 5 Scale 5 5 5
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -282,6 +303,7 @@ Model "CandyGunBullets3"
SurfaceSkin 0 1 "CandyCasing.png" SurfaceSkin 0 1 "CandyCasing.png"
Scale 5 5 5 Scale 5 5 5
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -296,6 +318,7 @@ Model "YnykronAmmo"
PitchOffset 30 PitchOffset 30
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -308,6 +331,7 @@ Model "FabricatorTier1"
Skin 0 "Fabricator.png" Skin 0 "Fabricator.png"
Scale 32 32 32 Scale 32 32 32
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -319,6 +343,7 @@ Model "FabricatorTier2"
Skin 0 "Fabricator_Tier2.png" Skin 0 "Fabricator_Tier2.png"
Scale 34 34 34 Scale 34 34 34
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -330,6 +355,7 @@ Model "FabricatorTier3"
Skin 0 "Fabricator_Tier3.png" Skin 0 "Fabricator_Tier3.png"
Scale 36 36 36 Scale 36 36 36
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -341,6 +367,7 @@ Model "FabricatorTier4"
Skin 0 "Fabricator_Tier4.png" Skin 0 "Fabricator_Tier4.png"
Scale 40 40 40 Scale 40 40 40
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -356,6 +383,7 @@ Model "HammerspaceEmbiggener"
PitchOffset 20 PitchOffset 20
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -370,6 +398,7 @@ Model "BulkHammerspaceEmbiggener"
PitchOffset 20 PitchOffset 20
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
Skin 0 "Embiggener_Tier2.png" Skin 0 "Embiggener_Tier2.png"

View file

@ -6,6 +6,7 @@ Model "GenericCube"
Skin 0 "PerfectlyGeneric.png" Skin 0 "PerfectlyGeneric.png"
Scale 10 10 10 Scale 10 10 10
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -19,6 +20,7 @@ Model "AkariProject"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -32,6 +34,7 @@ Model "LoveSignalsCD"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -101,6 +104,7 @@ Model "SayasMug"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -116,6 +120,7 @@ Model "DemoPlush"
AngleOffset -90 AngleOffset -90
RollOffset 30 RollOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -141,6 +146,7 @@ Model "MilkBreads"
Skin 0 "MilkBreads.png" Skin 0 "MilkBreads.png"
Scale 4 4 4 Scale 4 4 4
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -154,6 +160,7 @@ Model "KirinManga"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }

View file

@ -6,6 +6,7 @@ Model "FroggyChair"
Skin 0 "ASmallPriceToPay.png" Skin 0 "ASmallPriceToPay.png"
Scale 40 40 50 Scale 40 40 50
AngleOffset -90 AngleOffset -90
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -92,6 +93,7 @@ Model "Chancebox"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
// deploy // deploy
@ -121,6 +123,7 @@ Model "ChanceboxTop"
Scale 24 24 24 Scale 24 24 24
AngleOffset -90 AngleOffset -90
ZOffset 2 ZOffset 2
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -132,6 +135,7 @@ Model "ChanceboxSide"
Scale 24 24 24 Scale 24 24 24
AngleOffset -90 AngleOffset -90
ZOffset 10 ZOffset 10
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }

View file

@ -6,6 +6,7 @@ Model "GenericCubeGesture"
SurfaceSkin 0 1 "DemoArms.png" SurfaceSkin 0 1 "DemoArms.png"
SurfaceSkin 0 2 "DemoSoft.png" SurfaceSkin 0 2 "DemoSoft.png"
SurfaceSkin 0 3 "PerfectlyGeneric.png" SurfaceSkin 0 3 "PerfectlyGeneric.png"
FORCECULLBACKFACES
AngleOffset -90 AngleOffset -90
Scale -128 64 128 Scale -128 64 128
@ -41,6 +42,7 @@ Model "AkariProjectGesture"
SurfaceSkin 0 1 "DemoArms.png" SurfaceSkin 0 1 "DemoArms.png"
SurfaceSkin 0 2 "DemoSoft.png" SurfaceSkin 0 2 "DemoSoft.png"
SurfaceSkin 0 3 "AkariProject.png" SurfaceSkin 0 3 "AkariProject.png"
FORCECULLBACKFACES
AngleOffset -90 AngleOffset -90
Scale -128 64 128 Scale -128 64 128
@ -76,6 +78,7 @@ Model "LoveSignalsCDGesture"
SurfaceSkin 0 1 "DemoArms.png" SurfaceSkin 0 1 "DemoArms.png"
SurfaceSkin 0 2 "DemoSoft.png" SurfaceSkin 0 2 "DemoSoft.png"
SurfaceSkin 0 3 "LoveSignals.png" SurfaceSkin 0 3 "LoveSignals.png"
FORCECULLBACKFACES
AngleOffset -90 AngleOffset -90
Scale -128 64 128 Scale -128 64 128
@ -265,6 +268,7 @@ Model "SayasMugGesture"
SurfaceSkin 0 1 "DemoArms.png" SurfaceSkin 0 1 "DemoArms.png"
SurfaceSkin 0 2 "DemoSoft.png" SurfaceSkin 0 2 "DemoSoft.png"
SurfaceSkin 0 3 "SayasMug.png" SurfaceSkin 0 3 "SayasMug.png"
FORCECULLBACKFACES
AngleOffset -90 AngleOffset -90
Scale -128 64 128 Scale -128 64 128
@ -331,6 +335,7 @@ Model "DemoPlushGesture"
SurfaceSkin 0 2 "DemoSoft.png" SurfaceSkin 0 2 "DemoSoft.png"
SurfaceSkin 0 3 "DemoPlush.png" SurfaceSkin 0 3 "DemoPlush.png"
SurfaceSkin 0 4 "DemoPlush2.png" SurfaceSkin 0 4 "DemoPlush2.png"
FORCECULLBACKFACES
AngleOffset -90 AngleOffset -90
Scale -128 64 128 Scale -128 64 128
@ -406,6 +411,7 @@ Model "MilkBreadsGesture"
SurfaceSkin 0 1 "DemoArms.png" SurfaceSkin 0 1 "DemoArms.png"
SurfaceSkin 0 2 "DemoSoft.png" SurfaceSkin 0 2 "DemoSoft.png"
SurfaceSkin 0 3 "MilkBreads.png" SurfaceSkin 0 3 "MilkBreads.png"
FORCECULLBACKFACES
AngleOffset -90 AngleOffset -90
Scale -128 64 128 Scale -128 64 128
@ -441,6 +447,7 @@ Model "KirinMangaGesture"
SurfaceSkin 0 1 "DemoArms.png" SurfaceSkin 0 1 "DemoArms.png"
SurfaceSkin 0 2 "DemoSoft.png" SurfaceSkin 0 2 "DemoSoft.png"
SurfaceSkin 0 3 "KirinManga.png" SurfaceSkin 0 3 "KirinManga.png"
FORCECULLBACKFACES
AngleOffset -90 AngleOffset -90
Scale -128 64 128 Scale -128 64 128

View file

@ -7,6 +7,7 @@ Model "SWWMRedCard"
PitchOffset 15 PitchOffset 15
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
SurfaceSkin 0 1 "DoomKeyLight2.png" SurfaceSkin 0 1 "DoomKeyLight2.png"
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
@ -22,6 +23,7 @@ Model "SWWMYellowCard"
PitchOffset 15 PitchOffset 15
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
SurfaceSkin 0 1 "DoomKeyLight2.png" SurfaceSkin 0 1 "DoomKeyLight2.png"
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
@ -37,6 +39,7 @@ Model "SWWMBlueCard"
PitchOffset 15 PitchOffset 15
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
SurfaceSkin 0 1 "DoomKeyLight2.png" SurfaceSkin 0 1 "DoomKeyLight2.png"
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
@ -52,6 +55,7 @@ Model "SWWMGreenCard"
PitchOffset 15 PitchOffset 15
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
SurfaceSkin 0 1 "DoomKeyLight2.png" SurfaceSkin 0 1 "DoomKeyLight2.png"
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
@ -67,6 +71,7 @@ Model "SWWMSilverCardKDiZD"
PitchOffset 15 PitchOffset 15
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
SurfaceSkin 0 1 "DoomKeyLight2.png" SurfaceSkin 0 1 "DoomKeyLight2.png"
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
@ -82,6 +87,7 @@ Model "SWWMGreenCardKDiZD"
PitchOffset 15 PitchOffset 15
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
SurfaceSkin 0 1 "DoomKeyLight2.png" SurfaceSkin 0 1 "DoomKeyLight2.png"
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
@ -97,6 +103,7 @@ Model "SWWMOrangeCardKDiZD"
PitchOffset 15 PitchOffset 15
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
SurfaceSkin 0 1 "DoomKeyLight2.png" SurfaceSkin 0 1 "DoomKeyLight2.png"
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
@ -114,6 +121,7 @@ Model "SWWMRedSkull"
RollOffset 15 RollOffset 15
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -127,6 +135,7 @@ Model "SWWMBlueSkull"
RollOffset 15 RollOffset 15
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -140,6 +149,7 @@ Model "SWWMYellowSkull"
RollOffset 15 RollOffset 15
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -153,6 +163,7 @@ Model "SWWMPurpleSkull"
RollOffset 15 RollOffset 15
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -167,6 +178,7 @@ Model "SWWMFakeRedSkull"
AngleOffset 244 AngleOffset 244
ZOffset 5 ZOffset 5
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -180,6 +192,7 @@ Model "SWWMFakeBlueSkull"
AngleOffset 225 AngleOffset 225
ZOffset 5 ZOffset 5
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -193,6 +206,7 @@ Model "SWWMFakeYellowSkull"
AngleOffset 135 AngleOffset 135
ZOffset 5 ZOffset 5
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -206,6 +220,7 @@ Model "SWWMFakePurpleSkull"
AngleOffset 116 AngleOffset 116
ZOffset 5 ZOffset 5
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -220,6 +235,7 @@ Model "SWWMKeyGreen"
RollOffset 15 RollOffset 15
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -233,6 +249,7 @@ Model "SWWMKeyBlue"
RollOffset 15 RollOffset 15
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -246,6 +263,7 @@ Model "SWWMKeyYellow"
RollOffset 15 RollOffset 15
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -259,6 +277,7 @@ Model "SWWMKeyRed"
RollOffset 15 RollOffset 15
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }

View file

@ -5,6 +5,7 @@ Model "ArmorNuggetItem"
Skin 0 "Nugget_Armor.png" Skin 0 "Nugget_Armor.png"
Scale 0.05 0.05 0.05 Scale 0.05 0.05 0.05
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
FrameIndex XZW1 B 0 1 FrameIndex XZW1 B 0 1
@ -22,6 +23,7 @@ Model "HealthNuggetItem"
Skin 0 "Nugget.png" Skin 0 "Nugget.png"
Scale 0.05 0.05 0.05 Scale 0.05 0.05 0.05
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
FrameIndex XZW1 B 0 1 FrameIndex XZW1 B 0 1
@ -40,6 +42,7 @@ Model "TetraHealthItem"
Skin 0 "TetraHealth.png" Skin 0 "TetraHealth.png"
Scale 8 8 8 Scale 8 8 8
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -51,6 +54,7 @@ Model "CubeHealthItem"
Skin 0 "CubeHealth.png" Skin 0 "CubeHealth.png"
Scale 8 8 8 Scale 8 8 8
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -64,6 +68,7 @@ Model "RefresherItem"
ZOffset 16 ZOffset 16
AngleOffset -90 AngleOffset -90
RollOffset 30 RollOffset 30
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -75,6 +80,7 @@ Model "BlastSuitItem"
Skin 0 "BlastSuit.png" Skin 0 "BlastSuit.png"
Scale 24 24 24 Scale 24 24 24
ZOffset 20 ZOffset 20
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -86,6 +92,7 @@ Model "WarArmorItem"
Skin 0 "WarArmor.png" Skin 0 "WarArmor.png"
Scale 18 18 18 Scale 18 18 18
ZOffset 20 ZOffset 20
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -100,6 +107,7 @@ Model "GrilledCheeseSandwich"
PitchOffset -45 PitchOffset -45
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -111,6 +119,7 @@ Model "GhostArtifact"
Skin 0 "GhostArtifact.png" Skin 0 "GhostArtifact.png"
Scale 12 12 12 Scale 12 12 12
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -132,6 +141,7 @@ Model "GravitySuppressor"
Skin 0 "Gravity.png" Skin 0 "Gravity.png"
Scale 16 16 16 Scale 16 16 16
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -142,6 +152,7 @@ Model "GravityX"
Skin 0 "envmap/watrenv.png" Skin 0 "envmap/watrenv.png"
Scale 16 16 16 Scale 16 16 16
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -153,6 +164,7 @@ Model "FuckingInvinciball"
Skin 0 "Invinciball.png" Skin 0 "Invinciball.png"
Scale 10 10 10 Scale 10 10 10
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -163,6 +175,7 @@ Model "InvinciballX"
Skin 0 "envmap/redenv.png" Skin 0 "envmap/redenv.png"
Scale 10 10 10 Scale 10 10 10
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -174,6 +187,7 @@ Model "Ragekit"
Skin 0 "Ragekit.png" Skin 0 "Ragekit.png"
Scale 12 12 12 Scale 12 12 12
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -184,6 +198,7 @@ Model "RagekitX"
Skin 0 "envmap/lavaenv.png" Skin 0 "envmap/lavaenv.png"
Scale 12 12 12 Scale 12 12 12
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -197,6 +212,7 @@ Model "Omnisight"
RollOffset 30 RollOffset 30
ZOffset 16 ZOffset 16
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -239,6 +255,7 @@ Model "CompanionLamp"
Skin 0 "Lamp_off.png" Skin 0 "Lamp_off.png"
Scale 8 8 8 Scale 8 8 8
ZOffset 8 ZOffset 8
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
Skin 0 "Lamp.png" Skin 0 "Lamp.png"
@ -252,6 +269,7 @@ Model "SWWMLamp"
Skin 0 "Lamp_off.png" Skin 0 "Lamp_off.png"
Scale 12 12 12 Scale 12 12 12
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -263,6 +281,7 @@ Model "EBarrier"
Skin 0 "Barrier.png" Skin 0 "Barrier.png"
Scale 24 24 24 Scale 24 24 24
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -302,6 +321,7 @@ Model "SafetyTether"
ZOffset 16 ZOffset 16
PitchOffset 30 PitchOffset 30
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
Skin 0 "SafetyTether.png" Skin 0 "SafetyTether.png"
@ -316,6 +336,7 @@ Model "AngerySigil"
Scale 18 18 18 Scale 18 18 18
AngleOffset -90 AngleOffset -90
ZOffset 20 ZOffset 20
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -327,6 +348,7 @@ Model "DivineSprite"
Skin 0 "DivineSprite.png" Skin 0 "DivineSprite.png"
Scale 8 8 8 Scale 8 8 8
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }

View file

@ -8,6 +8,7 @@ Model "Unknown"
Skin 0 "ERRORENV" Skin 0 "ERRORENV"
Scale 32 32 48 Scale 32 32 48
ZOffset 28 ZOffset 28
FORCECULLBACKFACES
FrameIndex UNKN A 0 0 FrameIndex UNKN A 0 0
} }
@ -77,6 +78,7 @@ Model "SWWMChip"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
Rotation-Center 0 0 0.1 Rotation-Center 0 0 0.1
ZOffset 0.2 ZOffset 0.2
@ -130,6 +132,7 @@ Model "mkFlyingGib"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
Rotation-Center 0 0 1 Rotation-Center 0 0 1
ZOffset 2 ZOffset 2
@ -148,6 +151,7 @@ Model "RadiusDebugSphere"
Path "models/extra" Path "models/extra"
Model 0 "UnitSphere.obj" Model 0 "UnitSphere.obj"
Scale 1 1 1 Scale 1 1 1
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -330,6 +334,7 @@ Model "TheBall"
Skin 0 "envmap/leadenv.png" Skin 0 "envmap/leadenv.png"
Scale 2 2 2 Scale 2 2 2
ZOffset 1 ZOffset 1
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }

View file

@ -8,6 +8,7 @@ Model "CandyCasing"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
ZOffset 0.5 ZOffset 0.5
@ -23,6 +24,7 @@ Model "CandyMag"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
Skin 0 "CandyGun_EmptyMag.png" Skin 0 "CandyGun_EmptyMag.png"
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
@ -42,6 +44,7 @@ Model "CandyMagProj"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 1 FrameIndex XZW1 A 0 1
} }
@ -56,6 +59,7 @@ Model "CandyGunProj"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -97,6 +101,7 @@ Model "CandyGun"
Scale 12 12 12 Scale 12 12 12
ZOffset 16 ZOffset 16
AngleOffset 180 AngleOffset 180
FORCECULLBACKFACES
SurfaceSkin 0 1 "CandyGun.png" SurfaceSkin 0 1 "CandyGun.png"
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
@ -147,6 +152,7 @@ Model "CandyGun"
Scale -128 64 128 Scale -128 64 128
AngleOffset -90 AngleOffset -90
Offset 0 0 -2 Offset 0 0 -2
FORCECULLBACKFACES
// Casing Drop // Casing Drop
FrameIndex XZWC A 3 14 FrameIndex XZWC A 3 14
@ -196,6 +202,7 @@ Model "CandyGun"
Scale -128 64 128 Scale -128 64 128
AngleOffset -90 AngleOffset -90
Offset 0 0 -2 Offset 0 0 -2
FORCECULLBACKFACES
// Still // Still
FrameIndex XZW2 A 1 0 FrameIndex XZW2 A 1 0

View file

@ -6,6 +6,7 @@ Model "DeepImpact"
Skin 0 "DeepImpact.png" Skin 0 "DeepImpact.png"
Scale 25 25 25 Scale 25 25 25
ZOffset 20 ZOffset 20
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -23,6 +24,7 @@ Model "DeepImpact"
Scale -128 64 128 Scale -128 64 128
AngleOffset -90 AngleOffset -90
Offset 0 0 -2 Offset 0 0 -2
FORCECULLBACKFACES
// Still / Down / Select // Still / Down / Select
FrameIndex XZW2 A 1 0 // still / down FrameIndex XZW2 A 1 0 // still / down

View file

@ -8,6 +8,7 @@ Model "EvisceratorCasing"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
ZOffset 1 ZOffset 1
@ -62,6 +63,7 @@ Model "EvisceratorChunk"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
Rotation-Center 0 0 0.1 Rotation-Center 0 0 0.1
ZOffset 0.2 ZOffset 0.2
@ -85,6 +87,7 @@ Model "EvisceratorProj"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -97,6 +100,7 @@ Model "Eviscerator"
Skin 0 "Eviscerator.png" Skin 0 "Eviscerator.png"
Scale 24 24 24 Scale 24 24 24
ZOffset 20 ZOffset 20
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
FrameIndex XZW1 B 0 1 FrameIndex XZW1 B 0 1
@ -139,6 +143,7 @@ Model "Eviscerator"
Scale -128 64 128 Scale -128 64 128
AngleOffset -90 AngleOffset -90
Offset 0 2 0 Offset 0 2 0
FORCECULLBACKFACES
// Casing Ejected // Casing Ejected
FrameIndex XZWB D 3 51 FrameIndex XZWB D 3 51
@ -165,6 +170,7 @@ Model "Eviscerator"
Scale -128 64 128 Scale -128 64 128
AngleOffset -90 AngleOffset -90
Offset 0 2 0 Offset 0 2 0
FORCECULLBACKFACES
////// WIDE SPREAD BARREL ////// WIDE SPREAD BARREL
// Still / Deselect // Still / Deselect

View file

@ -8,6 +8,7 @@ Model "ExplodiumCasing"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
ZOffset 0.5 ZOffset 0.5
@ -23,6 +24,7 @@ Model "ExplodiumMag"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
Skin 0 "ExplodiumGun_EmptyMag.png" Skin 0 "ExplodiumGun_EmptyMag.png"
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
@ -43,6 +45,7 @@ Model "ExplodiumMagProj"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 1 FrameIndex XZW1 A 0 1
} }
@ -56,6 +59,7 @@ Model "ExplodiumMagAttach"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
AngleOffset 90 AngleOffset 90
FrameIndex XZW1 A 0 1 FrameIndex XZW1 A 0 1
@ -74,6 +78,7 @@ Model "ExplodiumGun"
Scale 12 12 12 Scale 12 12 12
ZOffset 16 ZOffset 16
AngleOffset 180 AngleOffset 180
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -118,6 +123,7 @@ Model "ExplodiumGun"
Scale -128 64 128 Scale -128 64 128
AngleOffset -90 AngleOffset -90
Offset 0 0 -2 Offset 0 0 -2
FORCECULLBACKFACES
// Casing Drop // Casing Drop
SurfaceSkin 3 0 "ExplodiumCasing_Used.png" SurfaceSkin 3 0 "ExplodiumCasing_Used.png"
@ -168,6 +174,7 @@ Model "ExplodiumGun"
Scale -128 64 128 Scale -128 64 128
AngleOffset -90 AngleOffset -90
Offset 0 0 -2 Offset 0 0 -2
FORCECULLBACKFACES
// Still // Still
FrameIndex XZW2 A 1 0 FrameIndex XZW2 A 1 0
@ -534,6 +541,9 @@ Model "DualExplodiumGun"
Scale -128 64 128 Scale -128 64 128
AngleOffset -90 AngleOffset -90
Offset -3 0 -2 Offset -3 0 -2
// normals are currently screwed up, keep this commented out until I
// re-do the model in 1.4
//FORCECULLBACKFACES
// Casings // Casings
// LEFT // LEFT
@ -559,6 +569,7 @@ Model "DualExplodiumGun"
Scale -128 64 128 Scale -128 64 128
AngleOffset -90 AngleOffset -90
Offset 3 0 -2 Offset 3 0 -2
FORCECULLBACKFACES
// Casings // Casings
// RIGHT // RIGHT
@ -588,6 +599,9 @@ Model "DualExplodiumGun"
Scale -128 64 128 Scale -128 64 128
AngleOffset -90 AngleOffset -90
Offset -3 0 -2 Offset -3 0 -2
// normals are currently screwed up, keep this commented out until I
// re-do the model in 1.4
//FORCECULLBACKFACES
//// LEFT //// LEFT
// Still // Still
@ -795,6 +809,7 @@ Model "DualExplodiumGun"
Scale -128 64 128 Scale -128 64 128
AngleOffset -90 AngleOffset -90
Offset 3 0 -2 Offset 3 0 -2
FORCECULLBACKFACES
//// RIGHT //// RIGHT
// Still // Still
@ -997,6 +1012,7 @@ Model "SWWMDualWeaponGiver"
Skin 0 "ExplodiumGun.png" Skin 0 "ExplodiumGun.png"
Scale 12 12 12 Scale 12 12 12
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }

View file

@ -7,6 +7,7 @@ Model "HellblazerMissile"
Scale 25 25 25 Scale 25 25 25
USEACTORPITCH USEACTORPITCH
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -20,6 +21,7 @@ Model "HellblazerMissile2"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -33,6 +35,7 @@ Model "Hellblazer"
SurfaceSkin 0 1 "HellblazerAmmo.png" SurfaceSkin 0 1 "HellblazerAmmo.png"
Scale 28 28 28 Scale 28 28 28
ZOffset 20 ZOffset 20
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -218,6 +221,7 @@ Model "Hellblazer"
AngleOffset -90 AngleOffset -90
Scale -128 64 128 Scale -128 64 128
Offset -2 2 1 Offset -2 2 1
FORCECULLBACKFACES
// Still / Deselect // Still / Deselect
FrameIndex XZW2 A 1 0 FrameIndex XZW2 A 1 0

View file

@ -9,6 +9,7 @@ Model "SilverBulletCasing"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
ZOffset 1 ZOffset 1
@ -24,6 +25,7 @@ Model "SilverBulletMag"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
RollOffset 90 RollOffset 90
@ -42,6 +44,7 @@ Model "SilverBullet"
SurfaceSkin 0 1 "SilverbulletAmmo.png" SurfaceSkin 0 1 "SilverbulletAmmo.png"
Scale 64 64 64 Scale 64 64 64
ZOffset 24 ZOffset 24
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -67,6 +70,7 @@ Model "SilverBullet"
AngleOffset -90 AngleOffset -90
Scale -128 64 128 Scale -128 64 128
DONTCULLBACKFACES DONTCULLBACKFACES
FORCECULLBACKFACES
// Casing // Casing
SurfaceSkin 2 0 "SilverbulletBullet_Used.png" SurfaceSkin 2 0 "SilverbulletBullet_Used.png"
@ -133,6 +137,7 @@ Model "SilverBullet"
SurfaceSkin 1 4 "SilverbulletAmmo.png" SurfaceSkin 1 4 "SilverbulletAmmo.png"
AngleOffset -90 AngleOffset -90
Scale -128 64 128 Scale -128 64 128
FORCECULLBACKFACES
// Still / Deselect // Still / Deselect
FrameIndex XZW2 A 1 0 FrameIndex XZW2 A 1 0

View file

@ -8,6 +8,7 @@ Model "SparksterMag"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
ZOffset 1.5 ZOffset 1.5
@ -159,6 +160,7 @@ Model "BiosparkCore"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -172,6 +174,7 @@ Model "Sparkster"
SurfaceSkin 0 1 "SparksterAmmo.png" SurfaceSkin 0 1 "SparksterAmmo.png"
Scale 30 30 30 Scale 30 30 30
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
SurfaceSkin 0 2 "SparksterAmmo.png" SurfaceSkin 0 2 "SparksterAmmo.png"
@ -264,6 +267,7 @@ Model "Sparkster"
AngleOffset -90 AngleOffset -90
Scale -128 64 128 Scale -128 64 128
FORCECULLBACKFACES
// Still / Deselect // Still / Deselect
FrameIndex XZW2 A 1 0 FrameIndex XZW2 A 1 0

View file

@ -8,6 +8,7 @@ Model "RedShellCasing"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
ZOffset 1 ZOffset 1
@ -23,6 +24,7 @@ Model "GoldShellCasing"
USEACTORPITCH USEACTORPITCH
USEACTORROLL USEACTORROLL
CORRECTPIXELSTRETCH CORRECTPIXELSTRETCH
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
ZOffset 1 ZOffset 1
@ -37,6 +39,7 @@ Model "Spreadgun"
Skin 0 "Spreadgun.png" Skin 0 "Spreadgun.png"
Scale 10 10 10 Scale 10 10 10
ZOffset 16 ZOffset 16
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
FrameIndex XZW1 B 0 1 FrameIndex XZW1 B 0 1
@ -72,6 +75,7 @@ Model "Spreadgun"
AngleOffset -90 AngleOffset -90
Offset -4 0 -2 Offset -4 0 -2
Scale -128 64 128 Scale -128 64 128
FORCECULLBACKFACES
///// PRIMED ///// PRIMED
// Idle / Deselect // Idle / Deselect

View file

@ -6,6 +6,7 @@ Model "Wallbuster"
Skin 0 "Wallbuster.png" Skin 0 "Wallbuster.png"
Scale 45 45 45 Scale 45 45 45
ZOffset 28 ZOffset 28
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -91,6 +92,7 @@ Model "Wallbuster"
PitchOffset 0.4 PitchOffset 0.4
Offset 0 2 0 Offset 0 2 0
Scale -128 64 128 Scale -128 64 128
FORCECULLBACKFACES
// Still/Deselect // Still/Deselect
FrameIndex XZW2 A 1 0 FrameIndex XZW2 A 1 0

View file

@ -297,6 +297,7 @@ Model "Ynykron"
SurfaceSkin 0 1 "YnykronAmmo.png" SurfaceSkin 0 1 "YnykronAmmo.png"
Scale 45 45 45 Scale 45 45 45
ZOffset 24 ZOffset 24
FORCECULLBACKFACES
FrameIndex XZW1 A 0 0 FrameIndex XZW1 A 0 0
} }
@ -371,6 +372,7 @@ Model "Ynykron"
SurfaceSkin 1 4 "YnykronAmmo.png" SurfaceSkin 1 4 "YnykronAmmo.png"
AngleOffset -90 AngleOffset -90
Scale -128 64 128 Scale -128 64 128
FORCECULLBACKFACES
// Still / Deselect // Still / Deselect
FrameIndex XZW2 A 1 0 FrameIndex XZW2 A 1 0

View file

@ -1,4 +1,4 @@
version "4.11" version "4.12"
/* /*
DEMOLITIONIST Main Codebase DEMOLITIONIST Main Codebase

View file

@ -1040,9 +1040,8 @@ Class MisterGrenade : Actor
// "safe delay" for main grenade // "safe delay" for main grenade
if ( !bAMBUSH && (ReactionTime > default.ReactionTime-20) ) return; if ( !bAMBUSH && (ReactionTime > default.ReactionTime-20) ) return;
let bt = BlockThingsIterator.Create(self,bAMBUSH?80:120); 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; 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++; special1++;
tracer = t; tracer = t;

View file

@ -105,7 +105,7 @@ extend Class SWWMHandler
double frametime = (curframe-prevframe)/1000.; double frametime = (curframe-prevframe)/1000.;
double theta = clamp(15.*frametime,0.,.5); // naive, but whatever double theta = clamp(15.*frametime,0.,.5); // naive, but whatever
// draw precise crosshair(s) // 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); let sw = SWWMWeapon(players[consoleplayer].ReadyWeapon);
if ( sw && !sw.ShouldDrawCrosshair() ) return; if ( sw && !sw.ShouldDrawCrosshair() ) return;
if ( !swwm_precisecrosshair ) return; if ( !swwm_precisecrosshair ) return;

View file

@ -650,7 +650,7 @@ extend Class SWWMHandler
else if ( WeapSel && swwm_useweaponbar && !paused && (players[consoleplayer].playerstate == PST_LIVE) && players[consoleplayer].mo && (gamestate == GS_LEVEL) ) 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 // 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; return false;
// only if player owns any selectable weapons // only if player owns any selectable weapons
if ( !wsel && SWWMWeaponSelect.PlayerHasWeapons(players[consoleplayer].mo) ) if ( !wsel && SWWMWeaponSelect.PlayerHasWeapons(players[consoleplayer].mo) )

View file

@ -133,8 +133,7 @@ extend Class SWWMHandler
hnd.bossactors.Clear(); hnd.bossactors.Clear();
hnd.initialized = false; hnd.initialized = false;
let ai = level.CreateActorIterator(tid); let ai = level.CreateActorIterator(tid);
Actor a; foreach ( a:ai )
while ( a = ai.Next() )
{ {
hnd.bossactors.Push(a); hnd.bossactors.Push(a);
a.GiveInventory('BossMarker',1); a.GiveInventory('BossMarker',1);

View file

@ -446,8 +446,7 @@ extend Class SWWMHandler
if ( cls.GetClassName() != 'KdikdizdCompatEventHandler' ) if ( cls.GetClassName() != 'KdikdizdCompatEventHandler' )
continue; continue;
ti = ThinkerIterator.Create("Thinker"); ti = ThinkerIterator.Create("Thinker");
Thinker t; foreach ( t:ti )
while ( t = ti.Next() )
{ {
if ( t.GetClassName() != 'VoodooPusher' ) if ( t.GetClassName() != 'VoodooPusher' )
continue; continue;

View file

@ -72,8 +72,7 @@ Class SWWMStaticHandler : StaticEventHandler
Array<Thinker> stinkers; Array<Thinker> stinkers;
if ( !sti ) sti = ThinkerIterator.Create("SWWMStaticThinker"); if ( !sti ) sti = ThinkerIterator.Create("SWWMStaticThinker");
else sti.Reinit(); else sti.Reinit();
Thinker t; foreach ( t:sti ) stinkers.Push(t);
while ( t = sti.Next() ) stinkers.Push(t);
if ( stinkers.Size() > 0 ) if ( stinkers.Size() > 0 )
{ {
foreach ( s:stinkers ) Console.PrintfEx(PRINT_HIGH|PRINT_NONOTIFY,"%s is not STAT_STATIC!",s.GetClassName()); 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<Thinker.MAX_STATNUM; i++ ) for ( int i=Thinker.STAT_INFO; i<Thinker.MAX_STATNUM; i++ )
{ {
let ti = ThinkerIterator.Create("Thinker",i); let ti = ThinkerIterator.Create("Thinker",i);
Thinker t; foreach ( t:ti )
while ( t = ti.Next() )
{ {
if ( t is 'Actor' ) continue; if ( t is 'Actor' ) continue;
let cls = t.GetClass(); let cls = t.GetClass();

View file

@ -104,7 +104,7 @@ extend Class SWWMStaticHandler
} }
// parses achievements.lst file(s) // parses achievements.lst file(s)
private void ParseAchievementList( out Array<SWWMAchievementInfo> achievements ) private void ParseAchievementList( Array<SWWMAchievementInfo> &achievements )
{ {
achievements.Clear(); achievements.Clear();
let lmp = Wads.FindLumpFullName("achievements.lst"); let lmp = Wads.FindLumpFullName("achievements.lst");
@ -241,36 +241,38 @@ extend Class SWWMStaticHandler
let di = DictionaryIterator.Create(achievementstate); let di = DictionaryIterator.Create(achievementstate);
while ( di.Next() ) while ( di.Next() )
{ {
String key = di.Key(); let k = di.Key();
let v = di.Value();
bool deleteme = true; bool deleteme = true;
foreach ( inf:achievementinfo ) foreach ( inf:achievementinfo )
{ {
if ( inf.basename != key ) continue; if ( inf.basename != k ) continue;
deleteme = false; deleteme = false;
break; break;
} }
if ( deleteme ) if ( deleteme )
{ {
if ( developer >= 2 ) Console.Printf("Deleting bogus achievement state %s = %s",key,di.Value()); if ( developer >= 2 ) Console.Printf("Deleting bogus achievement state %s = %s",k,v);
achievementstate.Remove(key); achievementstate.Remove(k);
} }
} }
di = DictionaryIterator.Create(achievementprogress); di = DictionaryIterator.Create(achievementprogress);
while ( di.Next() ) while ( di.Next() )
{ {
String key = di.Key(); let k = di.Key();
let v = di.Value();
bool deleteme = true; bool deleteme = true;
foreach ( inf:achievementinfo ) foreach ( inf:achievementinfo )
{ {
if ( inf.basename != key ) continue; if ( inf.basename != k ) continue;
if ( !inf.maxval ) continue; if ( !inf.maxval ) continue;
deleteme = false; deleteme = false;
break; break;
} }
if ( deleteme ) if ( deleteme )
{ {
if ( developer >= 2 ) Console.Printf("Deleting bogus achievement progress %s = %s",key,di.Value()); if ( developer >= 2 ) Console.Printf("Deleting bogus achievement progress %s = %s",k,v);
achievementprogress.Remove(key); achievementprogress.Remove(k);
} }
} }
foreach ( inf:achievementinfo ) foreach ( inf:achievementinfo )

View file

@ -9,7 +9,7 @@ extend Class SWWMStatusBar
return String.Format("\cj%d\cc%s",int(meters),StringTable.Localize("$SWWM_UNIT_METER")); 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; String tag;
SWWMInterest poi = hnd.intpoints; SWWMInterest poi = hnd.intpoints;
@ -84,7 +84,7 @@ extend Class SWWMStatusBar
return col; return col;
} }
private void DrawItemSense( Vector3 viewvec, out bool projinit ) private void DrawItemSense( Vector3 viewvec, bool &projinit )
{ {
let demo = Demolitionist(CPlayer.mo); let demo = Demolitionist(CPlayer.mo);
if ( !demo ) return; if ( !demo ) return;
@ -124,7 +124,7 @@ extend Class SWWMStatusBar
return false; return false;
} }
private void DrawTrackers( Vector3 viewvec, out bool projinit ) private void DrawTrackers( Vector3 viewvec, bool &projinit )
{ {
let cam = players[consoleplayer].camera; let cam = players[consoleplayer].camera;
if ( !cti ) cti = ThinkerIterator.Create("SWWMQuickCombatTracker",Thinker.STAT_INVENTORY); 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; SWWMDamNum snum = hnd.damnums;
if ( !snum ) return; if ( !snum ) return;
@ -366,7 +366,7 @@ extend Class SWWMStatusBar
while ( snum = snum.next ); while ( snum = snum.next );
} }
private void DrawScores( Vector3 viewvec, out bool projinit ) private void DrawScores( Vector3 viewvec, bool &projinit )
{ {
SWWMScoreObj snum = hnd.scorenums; SWWMScoreObj snum = hnd.scorenums;
if ( !snum ) return; if ( !snum ) return;
@ -406,7 +406,7 @@ extend Class SWWMStatusBar
private void DrawTarget() private void DrawTarget()
{ {
// don't draw when dead or with automap open // 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; bool projinit = false;
Vector3 viewvec = SWWMUtility.Vec3FromAngles(viewrot.x,viewrot.y); Vector3 viewvec = SWWMUtility.Vec3FromAngles(viewrot.x,viewrot.y);
// points of interest // points of interest

View file

@ -510,8 +510,7 @@ extend Class SWWMStatusBar
{ {
// oh bother, this will be dicks // oh bother, this will be dicks
let ai = level.CreateActorIterator(m.args[0]); let ai = level.CreateActorIterator(m.args[0]);
Actor a; foreach ( a:ai )
while ( a = ai.Next() )
{ {
Vector2 rv = a.pos.xy-cpos; Vector2 rv = a.pos.xy-cpos;
bool isportal = false; bool isportal = false;
@ -829,7 +828,7 @@ extend Class SWWMStatusBar
{ {
int xx = xmargin, yy = ymargin; int xx = xmargin, yy = ymargin;
// obviously, don't draw the minimap if the automap is open // 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); bool smol = (min(ss.x,ss.y/.5625)<480);
int hsz = smol?HALFMAPSIZE_SMALL:HALFMAPSIZE; int hsz = smol?HALFMAPSIZE_SMALL:HALFMAPSIZE;
@ -841,11 +840,11 @@ extend Class SWWMStatusBar
// draw stats and timer when automap is open // draw stats and timer when automap is open
int fstats = swwm_forcestats; int fstats = swwm_forcestats;
bool pstats = swwm_percentstats; bool pstats = swwm_percentstats;
if ( automapactive || (fstats > 0) ) if ( (automapactive && !viewactive) || (fstats > 0) )
{ {
xx = int(ss.x-(xmargin+2)); xx = int(ss.x-(xmargin+2));
String str; String str;
if ( automapactive || (fstats > 1) ) if ( (automapactive && !viewactive) || (fstats > 1) )
{ {
int label = am_showmaplabel; int label = am_showmaplabel;
String ln = level.levelname; String ln = level.levelname;

View file

@ -151,7 +151,7 @@ Class GenericFlash : HUDMessageBase
} }
override void Draw( int bottom, int visibility ) 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; if ( cam && (players[consoleplayer].camera != cam) ) return;
double fractic = System.GetTimeFrac(); double fractic = System.GetTimeFrac();
double falpha = alpha-fractic*(1./duration); double falpha = alpha-fractic*(1./duration);

View file

@ -51,7 +51,7 @@ Class SWWMAmmoSpawner : Inventory abstract
return false; return false;
} }
override bool TryPickup( in out Actor toucher ) override bool TryPickup( Actor &toucher )
{ {
return false; return false;
} }

View file

@ -75,7 +75,7 @@ Class SWWMArmor : Armor abstract
{ {
return damage; 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; int saved;
if ( (amount <= 0) || DamageTypeDefinition.IgnoreArmor(damageType) || (damage <= 0) ) if ( (amount <= 0) || DamageTypeDefinition.IgnoreArmor(damageType) || (damage <= 0) )

View file

@ -113,7 +113,7 @@ Class SWWMHealth : Inventory abstract
if ( Amount <= 0 ) DepleteOrDestroy(); 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 ) if ( Owner.ApplyDamageFactor(damageType,damage) <= 0 )
return; // this damage type is ignored by the player, so it does not affect us return; // this damage type is ignored by the player, so it does not affect us

View file

@ -31,7 +31,7 @@ Mixin Class SWWMAutoUseFix
} }
return Super.HandlePickup(item); return Super.HandlePickup(item);
} }
override bool TryPickup( in out Actor toucher ) override bool TryPickup( Actor &toucher )
{ {
if ( !deathmatch ) return Super.TryPickup(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 // pretend to have a max amount of 0 so we can only be picked up if we can be used

View file

@ -123,39 +123,37 @@ Class FroggyChair : Actor
override bool CanCollideWith( Actor other, bool passive ) override bool CanCollideWith( Actor other, bool passive )
{ {
if ( !other.bSHOOTABLE && !other.bSOLID ) return false; 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; Vector3 dir = vel;
double vsize = dir.length(); double vsize = dir.length();
// we need to compare Z height because wow thanks // we need to compare Z height because wow thanks
Vector3 diff = level.Vec3Diff(pos,other.pos); Vector3 diff = level.Vec3Diff(pos,other.pos);
if ( (diff.z > height) || (diff.z < -other.height) ) return false; if ( (diff.z > height) || (diff.z < -other.height) ) return;
if ( vsize > 1 ) if ( vsize <= 1 ) return;
if ( other == lasthit ) return;
dir /= vsize;
if ( !passive && other.bSHOOTABLE && (!tracer || !other.IsFriend(tracer)) )
{ {
if ( other == lasthit ) lasthit = other;
return false; SWWMUtility.DoKnockback(other,dir,5000*vsize);
dir /= vsize; Vector3 dirto = level.Vec3Diff(other.Vec3Offset(0,0,other.height/2),Vec3Offset(0,0,height));
if ( !passive && other.bSHOOTABLE && (!tracer || !other.IsFriend(tracer)) ) double lento = dirto.length();
if ( lento <= double.epsilon )
{ {
lasthit = other; double ang = FRandom[DoBlast](0,360);
SWWMUtility.DoKnockback(other,dir,5000*vsize); double pt = FRandom[DoBlast](-90,90);
Vector3 dirto = level.Vec3Diff(other.Vec3Offset(0,0,other.height/2),Vec3Offset(0,0,height)); dirto = SWWMUtility.Vec3FromAngles(ang,pt);
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;
} }
if ( other == tracer ) else dirto /= lento;
return false; 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 States
{ {
@ -696,9 +694,8 @@ Class ChanceboxSpawner : Actor
tbox[1] = pos.y-32; tbox[1] = pos.y-32;
tbox[2] = pos.x-32; tbox[2] = pos.x-32;
tbox[3] = pos.x+32; tbox[3] = pos.x+32;
while ( bl.Next() ) foreach ( l,p,f:bl )
{ {
Line l = bl.CurLine;
if ( !l ) continue; if ( !l ) continue;
if ( tbox[2] > l.bbox[3] ) continue; if ( tbox[2] > l.bbox[3] ) continue;
if ( tbox[3] < l.bbox[2] ) continue; if ( tbox[3] < l.bbox[2] ) continue;
@ -1065,9 +1062,8 @@ Class Chancebox : Actor
tbox[1] = testpos.y-32; tbox[1] = testpos.y-32;
tbox[2] = testpos.x-32; tbox[2] = testpos.x-32;
tbox[3] = testpos.x+32; tbox[3] = testpos.x+32;
while ( bl.Next() ) foreach ( l,p,f:bl )
{ {
Line l = bl.CurLine;
if ( !l ) continue; if ( !l ) continue;
if ( tbox[2] > l.bbox[3] ) continue; if ( tbox[2] > l.bbox[3] ) continue;
if ( tbox[3] < l.bbox[2] ) continue; if ( tbox[3] < l.bbox[2] ) continue;
@ -1098,11 +1094,11 @@ Class Chancebox : Actor
if ( cz-fz < 60 ) continue; // too short if ( cz-fz < 60 ) continue; // too short
bool blockedff = false; bool blockedff = false;
BlockThingsIterator bt = BlockThingsIterator.CreateFromPos(testpos.x,testpos.y,fz,60,256,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 ( !t ) continue;
if ( abs(bt.Thing.pos.x-testpos.x) > 32+bt.Thing.Radius ) continue; if ( abs(t.pos.x-testpos.x) > 32+t.Radius ) continue;
if ( abs(bt.Thing.pos.y-testpos.y) > 32+bt.Thing.Radius ) continue; if ( abs(t.pos.y-testpos.y) > 32+t.Radius ) continue;
blockedff = true; blockedff = true;
break; break;
} }
@ -1117,11 +1113,10 @@ Class Chancebox : Actor
// don't spawn on sky or hurtfloors if there are 3D floors // don't spawn on sky or hurtfloors if there are 3D floors
if ( (nffloor > 0) && ((s.GetTexture(0) == skyflatnum) || (s.damageamount > 0)) ) continue; if ( (nffloor > 0) && ((s.GetTexture(0) == skyflatnum) || (s.damageamount > 0)) ) continue;
BlockThingsIterator bt = BlockThingsIterator.CreateFromPos(testpos.x,testpos.y,testpos.z,60,256,false); 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(t.pos.x-testpos.x) > 32+t.Radius ) continue;
if ( abs(bt.Thing.pos.x-testpos.x) > 32+bt.Thing.Radius ) continue; if ( abs(t.pos.y-testpos.y) > 32+t.Radius ) continue;
if ( abs(bt.Thing.pos.y-testpos.y) > 32+bt.Thing.Radius ) continue;
blocked = true; blocked = true;
break; break;
} }

View file

@ -7,9 +7,7 @@ Class SWWMKey : Key abstract
Mixin SWWMRotatingPickup; Mixin SWWMRotatingPickup;
Mixin SWWMUnrealStyleDrop; Mixin SWWMUnrealStyleDrop;
bool propagated; override bool TryPickup( Actor &toucher )
override bool TryPickup( in out Actor toucher )
{ {
// attach the vanilla key that we replace // attach the vanilla key that we replace
let rt = toucher; let rt = toucher;
@ -21,8 +19,6 @@ Class SWWMKey : Key abstract
SWWMHandler.KeyTagFix(p); SWWMHandler.KeyTagFix(p);
p.AttachToOwner(rt); p.AttachToOwner(rt);
} }
// clean up the flag
propagated = false;
GoAwayAndDie(); GoAwayAndDie();
return true; return true;
} }

View file

@ -8,7 +8,7 @@ Class Omnisight : Inventory
Mixin SWWMRotatingPickup; Mixin SWWMRotatingPickup;
Mixin SWWMUnrealStyleDrop; Mixin SWWMUnrealStyleDrop;
override bool TryPickup( in out Actor toucher ) override bool TryPickup( Actor &toucher )
{ {
if ( !level.allmap ) if ( !level.allmap )
{ {
@ -267,7 +267,7 @@ Class TheBall : Actor
override int SpecialMissileHit( Actor victim ) override int SpecialMissileHit( Actor victim )
{ {
if ( (vel.length() <= 5) || ((victim == target) && !bHITOWNER) || (victim == lasthit) || (!victim.bSHOOTABLE && !victim.bSOLID) ) 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 // check if we should rip or bounce
// girthitude // girthitude
double girth = (victim.radius+victim.height)/2.*max(50,victim.mass)*(victim.health/double(victim.GetSpawnHealth())); 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 ) if ( (slamforce > girth) && is_schutt )
{ {
vel *= .7; vel *= .7;
return 1; return MHIT_PASS;
} }
// force bounce // force bounce
BlockingMobj = victim; BlockingMobj = victim;
A_HandleBounce(); A_HandleBounce();
lasthit = victim; lasthit = victim;
// pretend to pass through // pretend to pass through
return 1; return MHIT_PASS;
} }
override void PostBeginPlay() override void PostBeginPlay()
{ {

View file

@ -7,7 +7,7 @@ Class GrilledCheeseSafeguard : Powerup
Powerup.Duration -3; 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; if ( passive ) newdamage = 0;
} }
@ -96,7 +96,7 @@ Class GrilledCheeseSandwich : Inventory
DoTheThing(); DoTheThing();
return true; 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") ) if ( Owner.FindInventory("GrilledCheeseSafeguard") )
return; // the safeguard absorbs all return; // the safeguard absorbs all
@ -328,9 +328,8 @@ Class GhostTarget : Actor
if ( isFrozen() ) return; if ( isFrozen() ) return;
if ( diedie ) A_FadeOut(.05); if ( diedie ) A_FadeOut(.05);
let bt = BlockThingsIterator.Create(self,256); 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 ( !t || !t.bIsMonster || t.player || !t.IsHostile(master) || (t.target != self) ) continue;
if ( SWWMUtility.BoxIntersect(self,t,pad:16) || t.CheckMeleeRange() ) if ( SWWMUtility.BoxIntersect(self,t,pad:16) || t.CheckMeleeRange() )
{ {
@ -1111,7 +1110,7 @@ Class RagekitPower : Powerup
Demolitionist(Owner).lastbump *= .9; 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 ( passive ) return;
if ( (damageType == 'Melee') || (damageType == 'Jump') || (damageType == 'Dash') || (damageType == 'Buttslam') || (damageType == 'GroundPound') || (damageType == 'HammerShockwave') ) if ( (damageType == 'Melee') || (damageType == 'Jump') || (damageType == 'Dash') || (damageType == 'Buttslam') || (damageType == 'GroundPound') || (damageType == 'HammerShockwave') )

View file

@ -515,9 +515,8 @@ Class Mykradvo : Inventory
{ {
Vector2 disp = level.GetDisplacement(t.CurSector.PortalGroup,i); 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); 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 // must be an active, shootable live monster
if ( !a || !a.bISMONSTER || !a.bSHOOTABLE || a.bDORMANT || (a.Health <= 0) ) continue; if ( !a || !a.bISMONSTER || !a.bSHOOTABLE || a.bDORMANT || (a.Health <= 0) ) continue;
// skip non-hostiles // skip non-hostiles
@ -880,7 +879,7 @@ Class AngeryPower : Powerup
Demolitionist(Owner).lastbump *= .9; 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 ( passive || (damage <= 0) ) return;
if ( damageType == 'CoAb44' ) // can only be in 4s if ( damageType == 'CoAb44' ) // can only be in 4s

View file

@ -3,7 +3,7 @@
extend Class DemolitionistMenu extend Class DemolitionistMenu
{ {
// initialize the crime clock // 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 // use mission log clock if available
let mlog = SWWMMissionLog.Get(); let mlog = SWWMMissionLog.Get();

View file

@ -576,7 +576,7 @@ Class DemolitionistMenuMapStatItem : DemolitionistMenuListItem
return width; 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; int time, par, suck, stotal, scount, itotal, icount, ktotal, kcount;
if ( selected ) if ( selected )

View file

@ -95,6 +95,9 @@ Class SWWMTitleStuff : EventHandler
if ( swwm_nointroex && (titletimer >= -300) && (titletimer < 0) ) titletimer = 0; if ( swwm_nointroex && (titletimer >= -300) && (titletimer < 0) ) titletimer = 0;
if ( titletimer == -250 ) 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"); if ( gameinfo.gametype&GAME_Hexen ) S_ChangeMusic("HEXEN");
else if ( gameinfo.gametype&GAME_Heretic ) S_ChangeMusic("MUS_TITL"); else if ( gameinfo.gametype&GAME_Heretic ) S_ChangeMusic("MUS_TITL");
else else

View file

@ -22,7 +22,6 @@ Class Demolitionist : PlayerPawn
int dashlockst; int dashlockst;
bool fullfuel; bool fullfuel;
bool sendtoground; bool sendtoground;
bool key_reentrant;
bool bInDefaultInventory; bool bInDefaultInventory;
bool oldsinglefirst; bool oldsinglefirst;
@ -329,9 +328,8 @@ Class Demolitionist : PlayerPawn
tbox[1] = pos.y-(radius+8); tbox[1] = pos.y-(radius+8);
tbox[2] = pos.x-(radius+8); tbox[2] = pos.x-(radius+8);
tbox[3] = 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 ( !l ) continue;
if ( tbox[2] > l.bbox[3] ) continue; if ( tbox[2] > l.bbox[3] ) continue;
if ( tbox[3] < l.bbox[2] ) continue; if ( tbox[3] < l.bbox[2] ) continue;

View file

@ -83,10 +83,7 @@ extend Class Demolitionist
continue; continue;
let item = Inventory(Spawn(rep)); let item = Inventory(Spawn(rep));
SWWMHandler.KeyTagFix(item); SWWMHandler.KeyTagFix(item);
if ( item is 'SWWMKey' ) SWWMKey(item).propagated = true; // no anim
key_reentrant = true;
if ( !item.CallTryPickup(self) ) item.Destroy(); if ( !item.CallTryPickup(self) ) item.Destroy();
key_reentrant = false;
} }
} }
void CheatGive_Weapons() void CheatGive_Weapons()

View file

@ -64,6 +64,14 @@ extend Class Demolitionist
Super.RemoveInventory(item); 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 ) override void AddInventory( Inventory item )
{ {
Super.AddInventory(item); Super.AddInventory(item);
@ -91,7 +99,7 @@ extend Class Demolitionist
facegrin = true; facegrin = true;
} }
} }
if ( (item is 'Key') && !key_reentrant && !deathmatch && !bInDefaultInventory ) if ( (item is 'Key') && !ingivecheat && !deathmatch && !bInDefaultInventory )
{ {
// score // score
int score = 100; int score = 100;
@ -99,29 +107,13 @@ extend Class Demolitionist
else Console.Printf(StringTable.Localize("$SWWM_FINDKEYREM"),player.GetUserName(),item.GetTag(),score); else Console.Printf(StringTable.Localize("$SWWM_FINDKEYREM"),player.GetUserName(),item.GetTag(),score);
SWWMCredits.Give(player,score); SWWMCredits.Give(player,score);
if ( player == players[consoleplayer] ) SWWMScoreObj.SpawnAtActorBunch(100,self); if ( player == players[consoleplayer] ) SWWMScoreObj.SpawnAtActorBunch(100,self);
if ( !ingivecheat ) if ( !Random[DemoLines](0,5) && IsSkullKey(item) )
{ {
if ( !Random[DemoLines](0,5) && if ( !SWWMHandler.AddOneliner("skullget",2) )
((item.GetClass() == 'RedSkull') || (item.GetClass() == 'YellowSkull') SWWMHandler.AddOneliner("keyget",2);
|| (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<MAXPLAYERS; i++ )
{
if ( !playeringame[i] || !players[i].mo || (i == PlayerNumber()) )
continue;
if ( players[i].mo is 'Demolitionist' ) Demolitionist(players[i].mo).key_reentrant = true;
let tkey = Inventory(Spawn(item.GetClass()));
SWWMHandler.KeyTagFix(tkey);
if ( !tkey.CallTryPickup(players[i].mo) ) tkey.Destroy();
if ( players[i].mo is 'Demolitionist' ) Demolitionist(players[i].mo).key_reentrant = false;
} }
else SWWMHandler.AddOneliner("keyget",2);
facegrin = true;
} }
// add collectible to stats // add collectible to stats
if ( item is 'SWWMCollectible' ) if ( item is 'SWWMCollectible' )

View file

@ -13,7 +13,7 @@ Class SayaCollar : SWWMArmor
+INVENTORY.UNCLEARABLE; +INVENTORY.UNCLEARABLE;
// SWWMArmor flags are not needed as this overrides AbsorbDamage directly // SWWMArmor flags are not needed as this overrides AbsorbDamage directly
} }
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 ( (damage <= 0) || (flags&(DMG_FORCED|DMG_NO_ARMOR)) ) return; if ( (damage <= 0) || (flags&(DMG_FORCED|DMG_NO_ARMOR)) ) return;
newdamage = damage; newdamage = damage;
@ -30,7 +30,7 @@ Class SayaCollar : SWWMArmor
} }
// for friendly fire handling, jammed into here // for friendly fire handling, jammed into here
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 )
{ {
int ff = swwm_friendlyfire; int ff = swwm_friendlyfire;
if ( !source || (source == Owner) || (source.player == Owner.player) || !source.IsFriend(Owner) || !ff ) return; if ( !source || (source == Owner) || (source.player == Owner.player) || !source.IsFriend(Owner) || !ff ) return;

View file

@ -6,9 +6,8 @@ extend Class Demolitionist
if ( player.cmd.buttons&BT_USER3 ) if ( player.cmd.buttons&BT_USER3 )
{ {
let bt = BlockThingsIterator.Create(self,800); let bt = BlockThingsIterator.Create(self,800);
while ( bt.Next() ) foreach ( i,p,f:bt )
{ {
let i = bt.Thing;
if ( !i ) continue; if ( !i ) continue;
if ( !(i is 'Inventory') && !(i is 'Chancebox') && !(i is 'SWWMRespawnTimer') ) continue; if ( !(i is 'Inventory') && !(i is 'Chancebox') && !(i is 'SWWMRespawnTimer') ) continue;
if ( (i is 'Inventory') && (i.bINVISIBLE || !i.bSPECIAL || Inventory(i).Owner) ) continue; if ( (i is 'Inventory') && (i.bINVISIBLE || !i.bSPECIAL || Inventory(i).Owner) ) continue;
@ -55,9 +54,8 @@ extend Class Demolitionist
if ( (magitem_cnt < 8) && !swwm_usetopickup ) if ( (magitem_cnt < 8) && !swwm_usetopickup )
{ {
let bt = BlockThingsIterator.Create(self,500); let bt = BlockThingsIterator.Create(self,500);
while ( bt.Next() ) foreach ( t,p,f:bt )
{ {
let t = bt.Thing;
if ( !t ) continue; if ( !t ) continue;
if ( !(t is 'Inventory') || !t.bSPECIAL || !t.bDROPPED || t.bINVISIBLE || Inventory(t).Owner || !SWWMUtility.SphereIntersect(t,pos,500) || !CheckSight(t,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) if ( !(t is 'Inventory') || !t.bSPECIAL || !t.bDROPPED || t.bINVISIBLE || Inventory(t).Owner || !SWWMUtility.SphereIntersect(t,pos,500) || !CheckSight(t,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) )
continue; continue;
@ -366,7 +364,7 @@ extend Class Demolitionist
if ( isdashing ) dashboost = 0.; if ( isdashing ) dashboost = 0.;
mystats.stompcount++; mystats.stompcount++;
} }
if ( lastvelz < -10 ) if ( lastvelz < landingspeed )
A_StartSound("demolitionist/runstop",CHAN_FOOTSTEP,CHANF_OVERLAP); A_StartSound("demolitionist/runstop",CHAN_FOOTSTEP,CHANF_OVERLAP);
if ( (lastvelz < -gruntspeed) && (swwm_mutevoice < 4) && (health > 0) ) if ( (lastvelz < -gruntspeed) && (swwm_mutevoice < 4) && (health > 0) )
{ {
@ -571,10 +569,9 @@ extend Class Demolitionist
double maxmass = max(mass*spd/40.,200); double maxmass = max(mass*spd/40.,200);
if ( raging ) maxmass *= 2; if ( raging ) maxmass *= 2;
let bt = BlockThingsIterator.Create(self,spd+radius+1024); 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 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 ( !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 ( !SWWMUtility.ExtrudeIntersect(self,a,dir*(spd+radius),8) ) continue;
if ( (a.pos.z <= a.floorz) && (a.height <= MaxStepHeight) ) continue; if ( (a.pos.z <= a.floorz) && (a.height <= MaxStepHeight) ) continue;

View file

@ -263,7 +263,7 @@ Class SWWMWhoPushedMe : Inventory
Destroy(); 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; if ( !passive || (damageType != 'Falling') || (killtimer > 0) ) return;
killtimer = 5; killtimer = 5;

View file

@ -168,9 +168,9 @@ Class LoveHeart : Actor
override int SpecialMissileHit( Actor victim ) override int SpecialMissileHit( Actor victim )
{ {
if ( !victim.bSHOOTABLE && (victim != tracer) ) return 1; if ( !victim.bSHOOTABLE && (victim != tracer) ) return MHIT_PASS;
if ( tracer && (victim != tracer) ) return 1; if ( tracer && (victim != tracer) ) return MHIT_PASS;
return -1; return MHIT_DEFAULT;
} }
void A_HeartTick() void A_HeartTick()

View file

@ -3,7 +3,7 @@
Class SWWMUtility Class SWWMUtility
{ {
// gets the names of all mod cvars // gets the names of all mod cvars
static void GetCVars( out Array<String> cvarlist ) static void GetCVars( Array<String> &cvarlist )
{ {
cvarlist.Clear(); cvarlist.Clear();
let lmp = Wads.CheckNumForFullname("cvarinfo.base"); let lmp = Wads.CheckNumForFullname("cvarinfo.base");

View file

@ -78,9 +78,8 @@ extend Class SWWMUtility
{ {
Vector2 disp = level.GetDisplacement(thisgroup,i); 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); 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 if ( !a ) continue; // this can happen, yes
// early checks for self and ignored actor (usually the instigator) // early checks for self and ignored actor (usually the instigator)
if ( (a == ignoreme) || (a == Source) ) if ( (a == ignoreme) || (a == Source) )

View file

@ -145,8 +145,7 @@ extend Class SWWMUtility
static play void SpawnVanillaBossBrain( int tid ) static play void SpawnVanillaBossBrain( int tid )
{ {
let ai = Level.CreateActorIterator(tid); let ai = Level.CreateActorIterator(tid);
Actor a; foreach ( a:ai )
while ( a = ai.Next() )
{ {
let bb = a.Spawn("BossBrain",a.pos,NO_REPLACE); let bb = a.Spawn("BossBrain",a.pos,NO_REPLACE);
bb.angle = a.angle; bb.angle = a.angle;

View file

@ -10,7 +10,7 @@ enum EExitType
extend Class SWWMUtility extend Class SWWMUtility
{ {
// Thanks to ZZYZX and Nash // 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<SecPlane> plane, bool flipnorm )
{ {
Vector3 fnormal; Vector3 fnormal;
if ( flipnorm ) fnormal = -plane.Normal; 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 // 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 ) static bool BlockingLineIsBlocking( Actor a, int blockflags = Line.ML_BLOCKEVERYTHING, Line testline = null )
{ {
Line l = testline?testline:a.BlockingLine; Line l = testline?testline:a.BlockingLine;
@ -408,6 +409,7 @@ extend Class SWWMUtility
} }
if ( floorfound ) return (al+ah+bl+bh)*.25; if ( floorfound ) return (al+ah+bl+bh)*.25;
// check for midtex // check for midtex
// TODO: see if GetMidTexturePosition() is useful here to simplify code
if ( !l.sidedef[0].GetTexture(1).IsNull() ) if ( !l.sidedef[0].GetTexture(1).IsNull() )
{ {
double ofs = l.sidedef[0].GetTextureYOffset(1); 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) // 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(); let pi = swwm_PolyobjectIterator.Create();
swwm_PolyobjectHandle p; swwm_PolyobjectHandle p;

View file

@ -9,7 +9,7 @@ Struct SWWMProjectionData
extend Class SWWMUtility extend Class SWWMUtility
{ {
// gutamatics caching // 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(); double aspect = Screen.GetAspectRatio();
// vertical fov // vertical fov
@ -50,16 +50,16 @@ extend Class SWWMUtility
} }
// less code duplication // 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); x = (x-160)*CleanXFac_1+(Screen.GetWidth()*.5);
y = (y-100)*CleanYFac_1+(Screen.GetHeight()*.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); 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); y = (y-100)*CleanYFac_1+(Screen.GetHeight()*.5);
} }

View file

@ -2,7 +2,7 @@
extend Class SWWMUtility extend Class SWWMUtility
{ {
// bit ugly, but it works // 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) ) if ( (col < Font.CR_UNDEFINED) || (col >= Font.NUM_TEXT_COLORS) )
ThrowAbortException("col parameter out of range, use colstr for non-standard font colors."); ThrowAbortException("col parameter out of range, use colstr for non-standard font colors.");
@ -34,7 +34,7 @@ extend Class SWWMUtility
return nstr; return nstr;
} }
static void StripColor( out String str ) static void StripColor( String &str )
{ {
int len = str.CodePointCount(); int len = str.CodePointCount();
for ( int i=0, pos=0; i<len; i++ ) for ( int i=0, pos=0; i<len; i++ )
@ -83,7 +83,7 @@ extend Class SWWMUtility
return str; return str;
} }
static void ObscureText( out String str, int seed, bool alnum = false, bool minihud = false ) static void ObscureText( String &str, int seed, bool alnum = false, bool minihud = false )
{ {
int len = str.CodePointCount(); int len = str.CodePointCount();
String newstr = ""; String newstr = "";
@ -114,7 +114,7 @@ extend Class SWWMUtility
str = newstr; str = newstr;
} }
static void BeautifyClassName( out String str ) static void BeautifyClassName( String &str )
{ {
String workstr = str; String workstr = str;
str.Truncate(0); str.Truncate(0);

View file

@ -885,7 +885,7 @@ Class SWWMDualWeaponGiver : Inventory
return false; return false;
} }
override bool TryPickup( in out Actor toucher ) override bool TryPickup( Actor &toucher )
{ {
if ( giveme[0].HasSwapWeapon(toucher) ) if ( giveme[0].HasSwapWeapon(toucher) )
return false; return false;

View file

@ -42,7 +42,7 @@ Class ParriedBuff : Inventory
s.SetShade(Color(4,2,1)*Random[Ponch](32,63)); s.SetShade(Color(4,2,1)*Random[Ponch](32,63));
} }
} }
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 )
{ {
// increase blast damage (way too tiny normally for lost souls) // increase blast damage (way too tiny normally for lost souls)
if ( Owner.bBLASTED && (damageType == 'Melee') && !inflictor && !source ) if ( Owner.bBLASTED && (damageType == 'Melee') && !inflictor && !source )
@ -66,7 +66,7 @@ Class ParryDamageChecker : Inventory
Inventory.MaxAmount 1; Inventory.MaxAmount 1;
} }
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 )
{ {
Inventory buff; Inventory buff;
if ( inflictor && (buff=inflictor.FindInventory("ParriedBuff")) ) if ( inflictor && (buff=inflictor.FindInventory("ParriedBuff")) )

View file

@ -16,8 +16,8 @@ extend Class SWWMWeapon
Super.DoEffect(); Super.DoEffect();
// force custom crosshair // force custom crosshair
if ( swwm_precisecrosshair && (players[consoleplayer].Camera == players[consoleplayer].mo) && !(players[consoleplayer].cheats&CF_CHASECAM) ) if ( swwm_precisecrosshair && (players[consoleplayer].Camera == players[consoleplayer].mo) && !(players[consoleplayer].cheats&CF_CHASECAM) )
crosshair = 99; crosshair = -1;
else crosshair = ShouldDrawCrosshair()?0:99; else crosshair = ShouldDrawCrosshair()?0:-1;
} }
// where the trace is coming from relative to eyes // where the trace is coming from relative to eyes

View file

@ -267,9 +267,8 @@ Class HellblazerMissile : Actor
} }
// proximity check // proximity check
let bt = BlockThingsIterator.Create(self,256); let bt = BlockThingsIterator.Create(self,256);
while ( bt.Next() ) foreach ( t,p,v: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),bNOGRAVITY?50:90) || !CheckSight(t,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) continue; 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),bNOGRAVITY?50:90) || !CheckSight(t,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) continue;
deto++; deto++;
tracer = t; tracer = t;

View file

@ -273,7 +273,7 @@ Class EvisceratorChunk : Actor
A_HandleBounce(); A_HandleBounce();
lasthit = victim; lasthit = victim;
} }
return 1; return MHIT_PASS;
} }
// with this we can guarantee that the chunk won't just keep on dealing damage // with this we can guarantee that the chunk won't just keep on dealing damage
// this is something I wish Unreal's boulders did // this is something I wish Unreal's boulders did
@ -306,7 +306,7 @@ Class EvisceratorChunk : Actor
vel *= FRandom[Eviscerator](.8,.9); // reduce velocity as it rips vel *= FRandom[Eviscerator](.8,.9); // reduce velocity as it rips
A_Gravity(); A_Gravity();
gravity = clamp(.35-vel.length()/200.,.15,.35); gravity = clamp(.35-vel.length()/200.,.15,.35);
return 1; return MHIT_PASS;
} }
// HACK // HACK
if ( !victim.bNOBLOOD && !victim.bDORMANT && !victim.bINVULNERABLE ) if ( !victim.bNOBLOOD && !victim.bDORMANT && !victim.bINVULNERABLE )
@ -321,7 +321,7 @@ Class EvisceratorChunk : Actor
A_HandleBounce(); A_HandleBounce();
lasthit = victim; lasthit = victim;
} }
return 1; return MHIT_PASS;
} }
States States
{ {

View file

@ -473,9 +473,8 @@ Class YnykronImpact : SWWMNonInteractiveActor
{ {
Vector2 disp = level.GetDisplacement(CurSector.PortalGroup,i); Vector2 disp = level.GetDisplacement(CurSector.PortalGroup,i);
bt = BlockThingsIterator.CreateFromPos(pos.x+disp.x,pos.y+disp.y,pos.z,rad,rad,false); bt = BlockThingsIterator.CreateFromPos(pos.x+disp.x,pos.y+disp.y,pos.z,rad,rad,false);
while ( bt.Next() ) foreach ( t,p,f:bt )
{ {
let t = bt.Thing;
if ( !t || !t.bSHOOTABLE || !SWWMUtility.SphereIntersect(t,pos,rad) || (!SWWMUtility.SphereIntersect(t,pos,100) && !CheckSight(t,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY)) ) continue; if ( !t || !t.bSHOOTABLE || !SWWMUtility.SphereIntersect(t,pos,rad) || (!SWWMUtility.SphereIntersect(t,pos,100) && !CheckSight(t,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY)) ) continue;
if ( YnykronShot(master) && (YnykronShot(master).hitlist.Find(t) < YnykronShot(master).hitlist.Size()) ) if ( YnykronShot(master) && (YnykronShot(master).hitlist.Find(t) < YnykronShot(master).hitlist.Size()) )
continue; continue;

View file

@ -193,9 +193,8 @@ Class BigBiospark : Actor
{ {
double closest = double.infinity; double closest = double.infinity;
let bt = BlockThingsIterator.Create(self,8000); let bt = BlockThingsIterator.Create(self,8000);
while ( bt.Next() ) foreach ( t,p,f:bt )
{ {
let t = bt.Thing;
double dist; double dist;
if ( !t || !t.bSHOOTABLE || (!t.bISMONSTER && !(t is 'BossBrain') && !t.player) || (t.Health <= 0) || (target && t.IsFriend(target)) || ((dist=Distance3DSquared(t)) > 64000000) || !CheckSight(t,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) continue; if ( !t || !t.bSHOOTABLE || (!t.bISMONSTER && !(t is 'BossBrain') && !t.player) || (t.Health <= 0) || (target && t.IsFriend(target)) || ((dist=Distance3DSquared(t)) > 64000000) || !CheckSight(t,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) continue;
Vector3 dirto = level.Vec3Diff(pos,t.Vec3Offset(0,0,t.height/2)).unit(); 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); Vector2 disp = level.GetDisplacement(CurSector.PortalGroup,i);
bt = BlockThingsIterator.CreateFromPos(pos.x+disp.x,pos.y+disp.y,pos.z,120,120,false); 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 ( !t || !t.bSHOOTABLE || !SWWMUtility.SphereIntersect(t,pos,120) ) continue;
if ( hitlist.Find(t) >= hitlist.Size() ) if ( hitlist.Find(t) >= hitlist.Size() )
hitlist.Push(t); hitlist.Push(t);
@ -479,9 +477,8 @@ Class BiosparkBall : Actor
{ {
double closest = double.infinity; double closest = double.infinity;
let bt = BlockThingsIterator.Create(self,8000); let bt = BlockThingsIterator.Create(self,8000);
while ( bt.Next() ) foreach ( t,p,f:bt )
{ {
let t = bt.Thing;
double dist; 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; 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(); Vector3 dirto = level.Vec3Diff(pos,t.Vec3Offset(0,0,t.height/2)).unit();
@ -512,9 +509,8 @@ Class BiosparkBall : Actor
} }
// proximity check // proximity check
let bt = BlockThingsIterator.Create(self,256); 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; 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++; deto++;
break; break;
@ -1071,9 +1067,8 @@ Class BiosparkBeam : SWWMNonInteractiveActor
nextpos = t.Results.HitPos; nextpos = t.Results.HitPos;
double closest = double.infinity; double closest = double.infinity;
let bt = BlockThingsIterator.Create(self,500); let bt = BlockThingsIterator.Create(self,500);
while ( bt.Next() ) foreach ( t,p,f:bt )
{ {
let t = bt.Thing;
double dist; 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; 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)); Vector3 dirto = level.Vec3Diff(nextpos,t.Vec3Offset(0,0,t.height/2));
@ -1379,7 +1374,7 @@ Class BiosparkArc : SWWMNonInteractiveActor
{ {
double closest = double.infinity; double closest = double.infinity;
let bt = BlockThingsIterator.Create(self,1500); let bt = BlockThingsIterator.Create(self,1500);
while ( bt.Next() ) foreach ( t,p,f:bt )
{ {
let t = bt.Thing; let t = bt.Thing;
double dist; double dist;

View file

@ -246,9 +246,8 @@ Class ExplodiumMagHitbox : Actor
} }
SetOrigin(target.Vec3Offset(0,0,-height*.5),false); SetOrigin(target.Vec3Offset(0,0,-height*.5),false);
let bt = BlockThingsIterator.Create(self,256); 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) ) if ( !t || (t == self) || !t.bSHOOTABLE || (t == target.target) || t.IsFriend(target.target) || !SWWMUtility.BoxIntersect(self,t) )
continue; continue;
target.bKILLED = true; target.bKILLED = true;
@ -298,8 +297,8 @@ Class ExplodiumMagAttach : ExplodiumMagProj
override int SpecialMissileHit( Actor victim ) override int SpecialMissileHit( Actor victim )
{ {
if ( victim is 'ExplodiumMagHitbox' ) return 1; if ( victim is 'ExplodiumMagHitbox' ) return MHIT_PASS;
return -1; return MHIT_DEFAULT;
} }
override void Tick() override void Tick()
{ {