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

This commit is contained in:
Marisa the Magician 2024-04-22 14:34:22 +02:00
parent 1fb4c27383
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] SIGIL 2
- [x] Eviternity 2
* [ ] **GZDoom 4.12.x Features:**
- [x] Lesser code cleanup/refactor *(new variables, functions, flags, etc.)*
- [ ] Visual Thinker migration where needed *(more lightweight sprite explosions and the like)*
## 1.4 update *(Fine Refinements)*:
@ -114,7 +117,6 @@ Re-animation of old FK models. Plus extra score incentives and achievements.
Things that I'm unsure when will be added *(or if they can be added)*.
* [ ] **Switch various actor-based sprite effects to use more lightweight visual thinkers *(not yet in stable GZDoom)***
* [ ] **Fix handling of conveyor physics *(if scrollers ever get exposed to ZScript)***
* [ ] **Per-weapon player models *(could be very time-consuming)***
* [ ] **Model animations decoupled from actor states *(may be needed for the previous one)***

View File

@ -34,7 +34,7 @@ Hope you have fun exploding demon knees.
## Software and Hardware Requirements
**Codename: Demolitionist** requires **GZDoom 4.11** or later. For mobile platforms, this is available on **Delta Touch** as of version 5.1.
**Codename: Demolitionist** requires **GZDoom 4.12** or later. As of writing this, **Delta Touch** has not yet been updated and still offers 4.11.3 instead. Sorry, mobile players.
Recommended desktop hardware specs are as follows:
@ -62,7 +62,7 @@ Recommended GZDoom settings are as follows:
- **Lighting:** Dynamic lights should be enabled. It's also advised to use `Classic` sector lighting, as other modes may over-brighten weapon models.
- **Audio:** Increasing sound channels to their maximum limit is advised.
This mod has also been verified to run smoothly on the Steam Deck *(in desktop mode)*. Although it is not really possible to bind *ALL* controls beyond the bare essentials, this might be addressed in the future.
This mod has also been verified to run smoothly on the Steam Deck *(in desktop mode)*. Although it is not really possible to bind *ALL* controls beyond the bare essentials, this might be addressed in the future *(note that as of writing this, the flatpak version is still at 4.11.3)*.
*(Testers are welcome for narrowing down more precise hardware requirements)*

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]
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r1125 \cu(Thu Apr 18 20:02:26 CEST 2024)\c-";
SWWM_SHORTVER="\cw1.3pre r1125 \cu(2024-04-18 20:02:26)\c-";
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r1127 \cu(Mon Apr 22 14:35:02 CEST 2024)\c-";
SWWM_SHORTVER="\cw1.3pre r1127 \cu(2024-04-22 14:35:02)\c-";

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1040,9 +1040,8 @@ Class MisterGrenade : Actor
// "safe delay" for main grenade
if ( !bAMBUSH && (ReactionTime > default.ReactionTime-20) ) return;
let bt = BlockThingsIterator.Create(self,bAMBUSH?80:120);
while ( bt.Next() )
foreach ( t,p,f:bt )
{
let t = bt.Thing;
if ( !t || !t.bSHOOTABLE || (!t.bISMONSTER && !(t is 'BossBrain') && !t.player) || (t.Health <= 0) || (target && t.IsFriend(target)) || !SWWMUtility.SphereIntersect(t,level.Vec3Offset(pos,vel),bAMBUSH?80:120) || !CheckSight(t,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) continue;
special1++;
tracer = t;

View File

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

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) )
{
// special case: ignore if we used the mousewheel and the automap is active
if ( automapactive && ((e.KeyScan == InputEvent.Key_MWheelUp) || (e.KeyScan == InputEvent.Key_MWheelDown)) )
if ( (automapactive && !viewactive) && ((e.KeyScan == InputEvent.Key_MWheelUp) || (e.KeyScan == InputEvent.Key_MWheelDown)) )
return false;
// only if player owns any selectable weapons
if ( !wsel && SWWMWeaponSelect.PlayerHasWeapons(players[consoleplayer].mo) )

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -75,7 +75,7 @@ Class SWWMArmor : Armor abstract
{
return damage;
}
override void AbsorbDamage( int damage, Name damageType, out int newdamage, Actor inflictor, Actor source, int flags )
override void AbsorbDamage( int damage, Name damageType, int &newdamage, Actor inflictor, Actor source, int flags )
{
int saved;
if ( (amount <= 0) || DamageTypeDefinition.IgnoreArmor(damageType) || (damage <= 0) )

View File

@ -113,7 +113,7 @@ Class SWWMHealth : Inventory abstract
if ( Amount <= 0 ) DepleteOrDestroy();
}
override void AbsorbDamage( int damage, Name damageType, out int newdamage, Actor inflictor, Actor source, int flags )
override void AbsorbDamage( int damage, Name damageType, int &newdamage, Actor inflictor, Actor source, int flags )
{
if ( Owner.ApplyDamageFactor(damageType,damage) <= 0 )
return; // this damage type is ignored by the player, so it does not affect us

View File

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

View File

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

View File

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

View File

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

View File

@ -7,7 +7,7 @@ Class GrilledCheeseSafeguard : Powerup
Powerup.Duration -3;
}
override void ModifyDamage( int damage, Name damageType, out int newdamage, bool passive, Actor inflictor, Actor source, int flags )
override void ModifyDamage( int damage, Name damageType, int &newdamage, bool passive, Actor inflictor, Actor source, int flags )
{
if ( passive ) newdamage = 0;
}
@ -96,7 +96,7 @@ Class GrilledCheeseSandwich : Inventory
DoTheThing();
return true;
}
override void AbsorbDamage( int damage, Name damageType, out int newdamage, Actor inflictor, Actor source, int flags )
override void AbsorbDamage( int damage, Name damageType, int &newdamage, Actor inflictor, Actor source, int flags )
{
if ( Owner.FindInventory("GrilledCheeseSafeguard") )
return; // the safeguard absorbs all
@ -328,9 +328,8 @@ Class GhostTarget : Actor
if ( isFrozen() ) return;
if ( diedie ) A_FadeOut(.05);
let bt = BlockThingsIterator.Create(self,256);
while ( bt.Next() )
foreach ( t,p,f:bt )
{
let t = bt.Thing;
if ( !t || !t.bIsMonster || t.player || !t.IsHostile(master) || (t.target != self) ) continue;
if ( SWWMUtility.BoxIntersect(self,t,pad:16) || t.CheckMeleeRange() )
{
@ -1111,7 +1110,7 @@ Class RagekitPower : Powerup
Demolitionist(Owner).lastbump *= .9;
}
override void ModifyDamage( int damage, Name damageType, out int newdamage, bool passive, Actor inflictor, Actor source, int flags )
override void ModifyDamage( int damage, Name damageType, int &newdamage, bool passive, Actor inflictor, Actor source, int flags )
{
if ( passive ) return;
if ( (damageType == 'Melee') || (damageType == 'Jump') || (damageType == 'Dash') || (damageType == 'Buttslam') || (damageType == 'GroundPound') || (damageType == 'HammerShockwave') )

View File

@ -515,9 +515,8 @@ Class Mykradvo : Inventory
{
Vector2 disp = level.GetDisplacement(t.CurSector.PortalGroup,i);
bt = BlockThingsIterator.CreateFromPos(t.pos.x+disp.x,t.pos.y+disp.y,t.pos.z,3200,3200,false);
while ( bt.Next() )
foreach ( a,p,f:bt )
{
let a = bt.Thing;
// must be an active, shootable live monster
if ( !a || !a.bISMONSTER || !a.bSHOOTABLE || a.bDORMANT || (a.Health <= 0) ) continue;
// skip non-hostiles
@ -880,7 +879,7 @@ Class AngeryPower : Powerup
Demolitionist(Owner).lastbump *= .9;
}
override void ModifyDamage( int damage, Name damageType, out int newdamage, bool passive, Actor inflictor, Actor source, int flags )
override void ModifyDamage( int damage, Name damageType, int &newdamage, bool passive, Actor inflictor, Actor source, int flags )
{
if ( passive || (damage <= 0) ) return;
if ( damageType == 'CoAb44' ) // can only be in 4s

View File

@ -3,7 +3,7 @@
extend Class DemolitionistMenu
{
// initialize the crime clock
static void SetClock( out int c_year, out int c_month, out int c_day, out int c_hour, out int c_minute, out String c_tz )
static void SetClock( int &c_year, int &c_month, int &c_day, int &c_hour, int &c_minute, String &c_tz )
{
// use mission log clock if available
let mlog = SWWMMissionLog.Get();

View File

@ -576,7 +576,7 @@ Class DemolitionistMenuMapStatItem : DemolitionistMenuListItem
return width;
}
void GetLengths( bool selected, out int tlen, out int slen, out int ilen, out int klen )
void GetLengths( bool selected, int &tlen, int &slen, int &ilen, int &klen )
{
int time, par, suck, stotal, scount, itotal, icount, ktotal, kcount;
if ( selected )

View File

@ -95,6 +95,9 @@ Class SWWMTitleStuff : EventHandler
if ( swwm_nointroex && (titletimer >= -300) && (titletimer < 0) ) titletimer = 0;
if ( titletimer == -250 )
{
// this would be much simpler if we had a way to access the mapinfo variable
// (obviously, with this naive method, any custom music that doesn't use the
// vanilla filename won't be used)
if ( gameinfo.gametype&GAME_Hexen ) S_ChangeMusic("HEXEN");
else if ( gameinfo.gametype&GAME_Heretic ) S_ChangeMusic("MUS_TITL");
else

View File

@ -22,7 +22,6 @@ Class Demolitionist : PlayerPawn
int dashlockst;
bool fullfuel;
bool sendtoground;
bool key_reentrant;
bool bInDefaultInventory;
bool oldsinglefirst;
@ -329,9 +328,8 @@ Class Demolitionist : PlayerPawn
tbox[1] = pos.y-(radius+8);
tbox[2] = pos.x-(radius+8);
tbox[3] = pos.x+(radius+8);
while ( bl.Next() )
foreach( l,p,f:bl )
{
Line l = bl.CurLine;
if ( !l ) continue;
if ( tbox[2] > l.bbox[3] ) continue;
if ( tbox[3] < l.bbox[2] ) continue;

View File

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

View File

@ -64,6 +64,14 @@ extend Class Demolitionist
Super.RemoveInventory(item);
}
// skull keys, random chance of "alas poor yorick" line
private clearscope bool IsSkullKey( Inventory item )
{
String cname = item.GetClassName();
cname.MakeLower();
return (cname.IndexOf("skull") != -1);
}
override void AddInventory( Inventory item )
{
Super.AddInventory(item);
@ -91,7 +99,7 @@ extend Class Demolitionist
facegrin = true;
}
}
if ( (item is 'Key') && !key_reentrant && !deathmatch && !bInDefaultInventory )
if ( (item is 'Key') && !ingivecheat && !deathmatch && !bInDefaultInventory )
{
// score
int score = 100;
@ -99,29 +107,13 @@ extend Class Demolitionist
else Console.Printf(StringTable.Localize("$SWWM_FINDKEYREM"),player.GetUserName(),item.GetTag(),score);
SWWMCredits.Give(player,score);
if ( player == players[consoleplayer] ) SWWMScoreObj.SpawnAtActorBunch(100,self);
if ( !ingivecheat )
if ( !Random[DemoLines](0,5) && IsSkullKey(item) )
{
if ( !Random[DemoLines](0,5) &&
((item.GetClass() == 'RedSkull') || (item.GetClass() == 'YellowSkull')
|| (item.GetClass() == 'BlueSkull') || (item.GetClassName() == "PurpleSkull")) )
{
if ( !SWWMHandler.AddOneliner("skullget",2) )
SWWMHandler.AddOneliner("keyget",2);
}
else SWWMHandler.AddOneliner("keyget",2);
facegrin = true;
}
// share all keys in mp
for ( int i=0; i<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;
if ( !SWWMHandler.AddOneliner("skullget",2) )
SWWMHandler.AddOneliner("keyget",2);
}
else SWWMHandler.AddOneliner("keyget",2);
facegrin = true;
}
// add collectible to stats
if ( item is 'SWWMCollectible' )

View File

@ -13,7 +13,7 @@ Class SayaCollar : SWWMArmor
+INVENTORY.UNCLEARABLE;
// 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;
newdamage = damage;
@ -30,7 +30,7 @@ Class SayaCollar : SWWMArmor
}
// 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;
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 )
{
let bt = BlockThingsIterator.Create(self,800);
while ( bt.Next() )
foreach ( i,p,f:bt )
{
let i = bt.Thing;
if ( !i ) continue;
if ( !(i is 'Inventory') && !(i is 'Chancebox') && !(i is 'SWWMRespawnTimer') ) 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 )
{
let bt = BlockThingsIterator.Create(self,500);
while ( bt.Next() )
foreach ( t,p,f:bt )
{
let t = bt.Thing;
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) )
continue;
@ -366,7 +364,7 @@ extend Class Demolitionist
if ( isdashing ) dashboost = 0.;
mystats.stompcount++;
}
if ( lastvelz < -10 )
if ( lastvelz < landingspeed )
A_StartSound("demolitionist/runstop",CHAN_FOOTSTEP,CHANF_OVERLAP);
if ( (lastvelz < -gruntspeed) && (swwm_mutevoice < 4) && (health > 0) )
{
@ -571,10 +569,9 @@ extend Class Demolitionist
double maxmass = max(mass*spd/40.,200);
if ( raging ) maxmass *= 2;
let bt = BlockThingsIterator.Create(self,spd+radius+1024);
while ( bt.Next() )
foreach( a,p,f:bt )
{
if ( spd <= 0 ) break; // if something stopped us, no more iteration
let a = bt.Thing;
if ( !a || (a == self) || (!a.bSOLID && !a.bSHOOTABLE) || a.bTHRUACTORS || a.bCORPSE || !CanCollideWith(a,false) || !a.CanCollideWith(self,true) ) continue;
if ( !SWWMUtility.ExtrudeIntersect(self,a,dir*(spd+radius),8) ) continue;
if ( (a.pos.z <= a.floorz) && (a.height <= MaxStepHeight) ) continue;

View File

@ -263,7 +263,7 @@ Class SWWMWhoPushedMe : Inventory
Destroy();
}
override void ModifyDamage( int damage, Name damageType, out int newdamage, bool passive, Actor inflictor, Actor source, int flags )
override void ModifyDamage( int damage, Name damageType, int &newdamage, bool passive, Actor inflictor, Actor source, int flags )
{
if ( !passive || (damageType != 'Falling') || (killtimer > 0) ) return;
killtimer = 5;

View File

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

View File

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

View File

@ -78,9 +78,8 @@ extend Class SWWMUtility
{
Vector2 disp = level.GetDisplacement(thisgroup,i);
bt = BlockThingsIterator.CreateFromPos(Source.pos.x+disp.x,Source.pos.y+disp.y,Source.pos.z,ExplosionRadius,ExplosionRadius,false);
while ( bt.Next() )
foreach ( a,p,f:bt )
{
let a = bt.Thing;
if ( !a ) continue; // this can happen, yes
// early checks for self and ignored actor (usually the instigator)
if ( (a == ignoreme) || (a == Source) )

View File

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

View File

@ -10,7 +10,7 @@ enum EExitType
extend Class SWWMUtility
{
// Thanks to ZZYZX and Nash
static play void SetToSlopeSpecific( Actor a, double dang, SecPlane plane, bool flipnorm )
static play void SetToSlopeSpecific( Actor a, double dang, readonly<SecPlane> plane, bool flipnorm )
{
Vector3 fnormal;
if ( flipnorm ) fnormal = -plane.Normal;
@ -275,6 +275,7 @@ extend Class SWWMUtility
}
// the stupidest thing ever, it's called BlockingLine but it's not always blocking us
// note: MovementBlockingLine as an alternative seems prone to issues at the moment, needs further investigation
static bool BlockingLineIsBlocking( Actor a, int blockflags = Line.ML_BLOCKEVERYTHING, Line testline = null )
{
Line l = testline?testline:a.BlockingLine;
@ -408,6 +409,7 @@ extend Class SWWMUtility
}
if ( floorfound ) return (al+ah+bl+bh)*.25;
// check for midtex
// TODO: see if GetMidTexturePosition() is useful here to simplify code
if ( !l.sidedef[0].GetTexture(1).IsNull() )
{
double ofs = l.sidedef[0].GetTextureYOffset(1);
@ -624,7 +626,7 @@ extend Class SWWMUtility
}
// iterate through polyobjects and see if this line is part of one (returning which, if any)
static bool IsPolyLine( Line l, out swwm_PolyobjectHandle o )
static bool IsPolyLine( Line l, swwm_PolyobjectHandle &o )
{
let pi = swwm_PolyobjectIterator.Create();
swwm_PolyobjectHandle p;

View File

@ -9,7 +9,7 @@ Struct SWWMProjectionData
extend Class SWWMUtility
{
// gutamatics caching
static void PrepareProjData( out SWWMProjectionData d, Vector3 viewpos, double angle, double pitch, double roll, double fov )
static void PrepareProjData( SWWMProjectionData &d, Vector3 viewpos, double angle, double pitch, double roll, double fov )
{
double aspect = Screen.GetAspectRatio();
// vertical fov
@ -50,16 +50,16 @@ extend Class SWWMUtility
}
// less code duplication
static void AdjustClean_1( out double x, out double y )
static void AdjustClean_1( double &x, double &y )
{
x = (x-160)*CleanXFac_1+(Screen.GetWidth()*.5);
y = (y-100)*CleanYFac_1+(Screen.GetHeight()*.5);
}
static void AdjustClean_1x( out double x )
static void AdjustClean_1x( double &x )
{
x = (x-160)*CleanXFac_1+(Screen.GetWidth()*.5);
}
static void AdjustClean_1y( out double y )
static void AdjustClean_1y( double &y )
{
y = (y-100)*CleanYFac_1+(Screen.GetHeight()*.5);
}

View File

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

View File

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

View File

@ -42,7 +42,7 @@ Class ParriedBuff : Inventory
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)
if ( Owner.bBLASTED && (damageType == 'Melee') && !inflictor && !source )
@ -66,7 +66,7 @@ Class ParryDamageChecker : Inventory
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;
if ( inflictor && (buff=inflictor.FindInventory("ParriedBuff")) )

View File

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

View File

@ -267,9 +267,8 @@ Class HellblazerMissile : Actor
}
// proximity check
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;
deto++;
tracer = t;

View File

@ -273,7 +273,7 @@ Class EvisceratorChunk : Actor
A_HandleBounce();
lasthit = victim;
}
return 1;
return MHIT_PASS;
}
// with this we can guarantee that the chunk won't just keep on dealing damage
// 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
A_Gravity();
gravity = clamp(.35-vel.length()/200.,.15,.35);
return 1;
return MHIT_PASS;
}
// HACK
if ( !victim.bNOBLOOD && !victim.bDORMANT && !victim.bINVULNERABLE )
@ -321,7 +321,7 @@ Class EvisceratorChunk : Actor
A_HandleBounce();
lasthit = victim;
}
return 1;
return MHIT_PASS;
}
States
{

View File

@ -473,9 +473,8 @@ Class YnykronImpact : SWWMNonInteractiveActor
{
Vector2 disp = level.GetDisplacement(CurSector.PortalGroup,i);
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 ( YnykronShot(master) && (YnykronShot(master).hitlist.Find(t) < YnykronShot(master).hitlist.Size()) )
continue;

View File

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

View File

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