Remove 8+ size variants of shells. Allow dropping of 2/4 golden shells.

Use overlays for Eviscerator casing eject, add random offsets like with Explodium Gun.
Fix Candy Gun not being consistent with new animation changes of Explodium Gun.
Fix Explodium Gun not showing the loaded bullet when checking the chamber.
Give random offsets to Silver Bullet ejection overlays.
Some small texture wrangling.
Add projectile models for Silver Bullet (this will be used in the future).
Remove InterHubAmount from MagAmmo classes (not needed as this property is only used by items with the INVBAR flag).
Reduce BackpackMaxAmount of Ynykron Ammo to 3.
Adjust how Chanceboxes randomize their "dud" probability.
Tweak some of the Chancebox drops.
Set DROPPED flag to false for all Chancebox drops, so they don't get crushed.
Add 25% Crush damage factor to Demolitionist (in a future update, will try to make it so crushers have a chance to break while touching the player).
This commit is contained in:
Mari the Deer 2021-02-15 23:46:04 +01:00
commit b17fbd9a7d
44 changed files with 259 additions and 286 deletions

View file

@ -20,6 +20,8 @@ This is just a bit of *"future planning"* for stuff that I ***might*** add after
- Manarock *("A delicacy for gods, but instantly deadly for mortals")*
- Rubber Duck *("Is this some kind of convoluted joke from those two?")*
* ***(Maybe)* Fake livestream chat overlay, with dynamic reactions to all sorts of stuff**
* **Crusher breaking *(if possible)***
* **Replace all hitscan with *"light projectiles"***
* **Leaning and a lot of other stuff involving ViewAngles and ViewPos**
* **Crouch sliding *(+ proper crouch dashing)***
* **Expand third person animations**

View file

@ -1,3 +1,3 @@
[default]
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r276 \cu(Sun 14 Feb 21:24:00 CET 2021)\c-";
SWWM_SHORTVER="\cw0.9.11b-pre r276 \cu(2021-02-14 21:24:00)\c-";
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r277 \cu(Mon 15 Feb 23:46:04 CET 2021)\c-";
SWWM_SHORTVER="\cw0.9.11b-pre r277 \cu(2021-02-15 23:46:04)\c-";

View file

@ -3,8 +3,7 @@ Model "RedShell"
Path "models"
Model 0 "ShellAmmo_One_d.3d"
SurfaceSkin 0 0 "Shell_Normal.png"
SurfaceSkin 0 1 "silvermap.png"
Skin 0 "Shell_Normal.png"
Scale 0.024 0.024 0.024
PitchOffset 30
ZOffset 16
@ -17,8 +16,7 @@ Model "RedShell2"
Path "models"
Model 0 "ShellAmmo_Two_d.3d"
SurfaceSkin 0 0 "Shell_Normal.png"
SurfaceSkin 0 1 "silvermap.png"
Skin 0 "Shell_Normal.png"
Scale 0.024 0.024 0.024
ZOffset 16
ROTATING
@ -30,47 +28,7 @@ Model "RedShell4"
Path "models"
Model 0 "ShellAmmo_Four_d.3d"
SurfaceSkin 0 0 "Shell_Normal.png"
SurfaceSkin 0 1 "silvermap.png"
Scale 0.024 0.024 0.024
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "RedShell8"
{
Path "models"
Model 0 "ShellAmmo_Eight_d.3d"
SurfaceSkin 0 0 "Shell_Normal.png"
SurfaceSkin 0 1 "silvermap.png"
Scale 0.024 0.024 0.024
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "RedShell12"
{
Path "models"
Model 0 "ShellAmmo_Twelve_d.3d"
SurfaceSkin 0 0 "Shell_Normal.png"
SurfaceSkin 0 1 "silvermap.png"
Scale 0.024 0.024 0.024
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "RedShell16"
{
Path "models"
Model 0 "ShellAmmo_Sixteen_d.3d"
SurfaceSkin 0 0 "Shell_Normal.png"
SurfaceSkin 0 1 "silvermap.png"
Skin 0 "Shell_Normal.png"
Scale 0.024 0.024 0.024
ZOffset 16
ROTATING
@ -83,8 +41,7 @@ Model "GreenShell"
Path "models"
Model 0 "ShellAmmo_One_d.3d"
SurfaceSkin 0 0 "Shell_Slug.png"
SurfaceSkin 0 1 "silvermap.png"
Skin 0 "Shell_Slug.png"
Scale 0.024 0.024 0.024
PitchOffset 30
ZOffset 16
@ -97,8 +54,7 @@ Model "GreenShell2"
Path "models"
Model 0 "ShellAmmo_Two_d.3d"
SurfaceSkin 0 0 "Shell_Slug.png"
SurfaceSkin 0 1 "silvermap.png"
Skin 0 "Shell_Slug.png"
Scale 0.024 0.024 0.024
ZOffset 16
ROTATING
@ -110,48 +66,19 @@ Model "GreenShell4"
Path "models"
Model 0 "ShellAmmo_Four_d.3d"
SurfaceSkin 0 0 "Shell_Slug.png"
SurfaceSkin 0 1 "silvermap.png"
Skin 0 "Shell_Slug.png"
Scale 0.024 0.024 0.024
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "GreenShell8"
{
Path "models"
Model 0 "ShellAmmo_Eight_d.3d"
SurfaceSkin 0 0 "Shell_Slug.png"
SurfaceSkin 0 1 "silvermap.png"
Scale 0.024 0.024 0.024
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "GreenShell12"
{
Path "models"
Model 0 "ShellAmmo_Twelve_d.3d"
SurfaceSkin 0 0 "Shell_Slug.png"
SurfaceSkin 0 1 "silvermap.png"
Scale 0.024 0.024 0.024
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "WhiteShell"
{
Path "models"
Model 0 "ShellAmmo_One_d.3d"
SurfaceSkin 0 0 "Shell_Dragon.png"
SurfaceSkin 0 1 "silvermap.png"
Skin 0 "Shell_Dragon.png"
Scale 0.024 0.024 0.024
PitchOffset 30
ZOffset 16
@ -164,8 +91,7 @@ Model "WhiteShell2"
Path "models"
Model 0 "ShellAmmo_Two_d.3d"
SurfaceSkin 0 0 "Shell_Dragon.png"
SurfaceSkin 0 1 "silvermap.png"
Skin 0 "Shell_Dragon.png"
Scale 0.024 0.024 0.024
ZOffset 16
ROTATING
@ -177,21 +103,7 @@ Model "WhiteShell4"
Path "models"
Model 0 "ShellAmmo_Four_d.3d"
SurfaceSkin 0 0 "Shell_Dragon.png"
SurfaceSkin 0 1 "silvermap.png"
Scale 0.024 0.024 0.024
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "WhiteShell8"
{
Path "models"
Model 0 "ShellAmmo_Eight_d.3d"
SurfaceSkin 0 0 "Shell_Dragon.png"
SurfaceSkin 0 1 "silvermap.png"
Skin 0 "Shell_Dragon.png"
Scale 0.024 0.024 0.024
ZOffset 16
ROTATING
@ -204,8 +116,7 @@ Model "BlueShell"
Path "models"
Model 0 "ShellAmmo_One_d.3d"
SurfaceSkin 0 0 "Shell_Kinylum.png"
SurfaceSkin 0 1 "silvermap.png"
Skin 0 "Shell_Kinylum.png"
Scale 0.024 0.024 0.024
PitchOffset 30
ZOffset 16
@ -218,8 +129,7 @@ Model "BlueShell2"
Path "models"
Model 0 "ShellAmmo_Two_d.3d"
SurfaceSkin 0 0 "Shell_Kinylum.png"
SurfaceSkin 0 1 "silvermap.png"
Skin 0 "Shell_Kinylum.png"
Scale 0.024 0.024 0.024
ZOffset 16
ROTATING
@ -231,35 +141,19 @@ Model "BlueShell4"
Path "models"
Model 0 "ShellAmmo_Four_d.3d"
SurfaceSkin 0 0 "Shell_Kinylum.png"
SurfaceSkin 0 1 "silvermap.png"
Skin 0 "Shell_Kinylum.png"
Scale 0.024 0.024 0.024
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "BlueShell8"
{
Path "models"
Model 0 "ShellAmmo_Eight_d.3d"
SurfaceSkin 0 0 "Shell_Kinylum.png"
SurfaceSkin 0 1 "silvermap.png"
Scale 0.024 0.024 0.024
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "BlackShell"
{
Path "models"
Model 0 "ShellAmmo_One_d.3d"
SurfaceSkin 0 0 "Shell_Fuck.png"
SurfaceSkin 0 1 "silvermap.png"
Skin 0 "Shell_Fuck.png"
Scale 0.024 0.024 0.024
PitchOffset 30
ZOffset 16
@ -272,8 +166,7 @@ Model "BlackShell2"
Path "models"
Model 0 "ShellAmmo_Two_d.3d"
SurfaceSkin 0 0 "Shell_Fuck.png"
SurfaceSkin 0 1 "silvermap.png"
Skin 0 "Shell_Fuck.png"
Scale 0.024 0.024 0.024
ZOffset 16
ROTATING
@ -285,8 +178,7 @@ Model "BlackShell4"
Path "models"
Model 0 "ShellAmmo_Four_d.3d"
SurfaceSkin 0 0 "Shell_Fuck.png"
SurfaceSkin 0 1 "silvermap.png"
Skin 0 "Shell_Fuck.png"
Scale 0.024 0.024 0.024
ZOffset 16
ROTATING
@ -299,8 +191,7 @@ Model "PurpleShell"
Path "models"
Model 0 "ShellAmmo_One_d.3d"
SurfaceSkin 0 0 "Shell_Ball.png"
SurfaceSkin 0 1 "silvermap.png"
Skin 0 "Shell_Ball.png"
Scale 0.024 0.024 0.024
PitchOffset 30
ZOffset 16
@ -313,8 +204,7 @@ Model "PurpleShell2"
Path "models"
Model 0 "ShellAmmo_Two_d.3d"
SurfaceSkin 0 0 "Shell_Ball.png"
SurfaceSkin 0 1 "silvermap.png"
Skin 0 "Shell_Ball.png"
Scale 0.024 0.024 0.024
ZOffset 16
ROTATING
@ -326,8 +216,7 @@ Model "PurpleShell4"
Path "models"
Model 0 "ShellAmmo_Four_d.3d"
SurfaceSkin 0 0 "Shell_Ball.png"
SurfaceSkin 0 1 "silvermap.png"
Skin 0 "Shell_Ball.png"
Scale 0.024 0.024 0.024
ZOffset 16
ROTATING
@ -340,8 +229,7 @@ Model "GoldShell"
Path "models"
Model 0 "ShellAmmo_One_d.3d"
SurfaceSkin 0 0 "Shell_Gold.png"
SurfaceSkin 0 1 "goldmap.png"
Skin 0 "Shell_Gold.png"
Scale 0.024 0.024 0.024
PitchOffset 30
ZOffset 16
@ -349,6 +237,30 @@ Model "GoldShell"
FrameIndex XZW1 A 0 0
}
Model "GoldShell2"
{
Path "models"
Model 0 "ShellAmmo_Two_d.3d"
Skin 0 "Shell_Gold.png"
Scale 0.024 0.024 0.024
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "GoldShell4"
{
Path "models"
Model 0 "ShellAmmo_Four_d.3d"
Skin 0 "Shell_Gold.png"
Scale 0.024 0.024 0.024
ZOffset 16
ROTATING
FrameIndex XZW1 A 0 0
}
Model "EvisceratorShell"
{
@ -574,8 +486,8 @@ Model "CandyGunBullets"
Path "models"
Model 0 "ExplodiumBullet_d.3d"
SurfaceSkin 0 0 "BooletCandy.png"
SurfaceSkin 0 1 "CandyCasing_Boolet.png"
SurfaceSkin 0 0 "CandyBullet.png"
SurfaceSkin 0 1 "CandyCasing.png"
Scale 0.02 0.02 0.02
PitchOffset 30
ZOffset 16

View file

@ -165,7 +165,6 @@ Model "CandyGun"
FrameIndex XZW2 G 1 10
FrameIndex XZW2 H 1 11
// Fire
SurfaceSkin 1 4 "CandyCasing.png" // show casing
FrameIndex XZW2 I 1 13
FrameIndex XZW2 J 1 14
FrameIndex XZW2 K 1 15
@ -175,9 +174,9 @@ Model "CandyGun"
FrameIndex XZW2 O 1 19
FrameIndex XZW2 P 1 20
FrameIndex XZW2 Q 1 21
// unused
FrameIndex XZW2 R 1 22
FrameIndex XZW2 S 1 23
SurfaceSkin 1 4 "" // hide casing
// Reload (Part 1)
FrameIndex XZW2 T 1 25
FrameIndex XZW2 U 1 26
@ -414,4 +413,21 @@ Model "CandyGun"
FrameIndex XZWB X 1 152
FrameIndex XZWB Y 1 153
FrameIndex XZWB Z 1 154
// Casing
SurfaceSkin 1 0 ""
SurfaceSkin 1 1 ""
SurfaceSkin 1 2 ""
SurfaceSkin 1 3 ""
SurfaceSkin 1 4 "CandyCasing_Used.png"
SurfaceSkin 1 5 ""
FrameIndex XZWC A 1 14
FrameIndex XZWC B 1 15
FrameIndex XZWC C 1 16
FrameIndex XZWC D 1 17
FrameIndex XZWC E 1 18
FrameIndex XZWC F 1 19
FrameIndex XZWC G 1 20
FrameIndex XZWC H 1 21
FrameIndex XZWC I 1 22
FrameIndex XZWC J 1 23
}

View file

@ -197,7 +197,6 @@ Model "Eviscerator"
FrameIndex XZW3 Q 1 44
FrameIndex XZW3 R 1 45
// Eject
SurfaceSkin 1 4 "EvisceratorShell.png"
FrameIndex XZW3 S 1 47
FrameIndex XZW3 T 1 48
FrameIndex XZW3 U 1 49
@ -215,7 +214,6 @@ Model "Eviscerator"
FrameIndex XZW4 G 1 61
FrameIndex XZW4 H 1 62
FrameIndex XZW4 I 1 63
SurfaceSkin 1 4 ""
// Switch
FrameIndex XZW4 J 1 65
FrameIndex XZW4 K 1 66
@ -282,7 +280,6 @@ Model "Eviscerator"
FrameIndex XZW6 P 1 125
FrameIndex XZW6 Q 1 126
// Eject
SurfaceSkin 1 4 "EvisceratorShell.png"
FrameIndex XZW6 R 1 128
FrameIndex XZW6 S 1 129
FrameIndex XZW6 T 1 130
@ -300,7 +297,6 @@ Model "Eviscerator"
FrameIndex XZW7 F 1 142
FrameIndex XZW7 G 1 143
FrameIndex XZW7 H 1 144
SurfaceSkin 1 4 ""
// Switch
FrameIndex XZW7 I 1 146
FrameIndex XZW7 J 1 147
@ -407,4 +403,20 @@ Model "Eviscerator"
FrameIndex XZWB A 1 247
FrameIndex XZWB B 1 248
FrameIndex XZWB C 1 249
// Casing Ejected
SurfaceSkin 1 0 ""
SurfaceSkin 1 1 ""
SurfaceSkin 1 2 ""
SurfaceSkin 1 3 ""
SurfaceSkin 1 4 "EvisceratorShell.png"
FrameIndex XZWB D 1 51
FrameIndex XZWB E 1 52
FrameIndex XZWB F 1 53
FrameIndex XZWB G 1 54
FrameIndex XZWB H 1 55
FrameIndex XZWB I 1 56
FrameIndex XZWB J 1 57
FrameIndex XZWB K 1 58
FrameIndex XZWB L 1 59
FrameIndex XZWB M 1 60
}

View file

@ -3,7 +3,7 @@ Model "ExplodiumCasing"
Path "models"
Model 0 "ExplodiumCasing_d.3d"
Skin 0 "ExplodiumCasing.png"
Skin 0 "ExplodiumCasing_Used.png"
Scale 0.03 0.03 0.03
USEACTORPITCH
USEACTORROLL
@ -89,10 +89,6 @@ Model "ExplodiumGun"
FrameIndex XZWZ J 2 0
}
Model "ExplodiumGun"
{
}
Model "ExplodiumGun"
{
Path "models"
@ -262,6 +258,7 @@ Model "ExplodiumGun"
FrameIndex XZW6 Z 1 121
SurfaceSkin 1 5 "ExplodiumGun.png" // show mag
// Check Bullet
SurfaceSkin 1 4 "ExplodiumCasing.png" // show casing
FrameIndex XZW7 A 1 157
FrameIndex XZW7 B 1 158
FrameIndex XZW7 C 1 159
@ -281,6 +278,7 @@ Model "ExplodiumGun"
FrameIndex XZW7 Q 1 173
FrameIndex XZW7 R 1 174
FrameIndex XZW7 S 1 175
SurfaceSkin 1 4 "" // hide casing
// Melee
FrameIndex XZW7 T 1 177
FrameIndex XZW7 U 1 178
@ -345,7 +343,7 @@ Model "ExplodiumGun"
SurfaceSkin 1 1 ""
SurfaceSkin 1 2 ""
SurfaceSkin 1 3 ""
SurfaceSkin 1 4 "ExplodiumCasing.png"
SurfaceSkin 1 4 "ExplodiumCasing_Used.png"
SurfaceSkin 1 5 ""
FrameIndex XZWA A 1 14
FrameIndex XZWA B 1 15

View file

@ -374,7 +374,7 @@ Model "DualExplodiumGun"
SurfaceSkin 1 1 ""
SurfaceSkin 1 2 ""
SurfaceSkin 1 3 ""
SurfaceSkin 1 4 "ExplodiumCasing.png"
SurfaceSkin 1 4 "ExplodiumCasing_Used.png"
SurfaceSkin 1 5 ""
// RIGHT
Model 1 "ExplodiumGun1st_d.3d"

View file

@ -3,7 +3,7 @@ Model "SilverBulletCasing"
Path "models"
Model 0 "SilverbulletCase_d.3d"
Skin 0 "SilverbulletBullet.png"
Skin 0 "SilverbulletBullet_Used.png"
Scale 0.04 0.04 0.04
AngleOffset 90
USEACTORPITCH
@ -18,7 +18,7 @@ Model "SilverBulletCasing2"
Path "models"
Model 0 "SilverbulletCase_FCB_d.3d"
Skin 0 "SilverbulletBullet_FCB.png"
Skin 0 "SilverbulletBullet_FCB_Used.png"
Scale 0.04 0.04 0.04
AngleOffset 90
USEACTORPITCH
@ -104,7 +104,7 @@ Model "SilverBullet"
DONTCULLBACKFACES
// Casing (XSB)
SurfaceSkin 2 5 "SilverbulletBullet.png"
SurfaceSkin 2 5 "SilverbulletBullet_Used.png"
FrameIndex XZW7 D 2 30
FrameIndex XZW7 E 2 31
FrameIndex XZW7 F 2 32
@ -118,7 +118,7 @@ Model "SilverBullet"
FrameIndex XZW7 N 2 40
FrameIndex XZW7 O 2 41
// Casing (FCB)
SurfaceSkin 2 5 "SilverbulletBullet_FCB.png"
SurfaceSkin 2 5 "SilverbulletBullet_FCB_Used.png"
FrameIndex XZWD D 2 30
FrameIndex XZWD E 2 31
FrameIndex XZWD F 2 32

View file

@ -156,7 +156,7 @@ Model "CorrosiveFlechette"
Path "models"
Model 0 "Boolet_a.3d"
Skin 0 "Flech.png"
Skin 0 "Boolet_Flech.png"
Scale 0.01 0.001 0.001
USEACTORPITCH
USEACTORROLL

BIN
models/Boolet_Candy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
models/Boolet_Explodium.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View file

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

BIN
models/CandyCasing_Used.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 8 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 8 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -284,7 +284,6 @@ Class RayBolt : MagAmmo
MagAmmo.ParentAmmo "RayAmmo";
MagAmmo.ClipSize 20;
Inventory.MaxAmount 25;
Inventory.InterHubAmount 25;
+FLOATBOB;
FloatBobStrength 0.25;
}
@ -396,7 +395,6 @@ Class GrandSpear : MagAmmo
MagAmmo.ParentAmmo "GrandAmmo";
MagAmmo.ClipSize 5;
Inventory.MaxAmount 8;
Inventory.InterHubAmount 8;
+FLOATBOB;
FloatBobStrength 0.25;
}

View file

@ -417,7 +417,6 @@ Class RedShell2 : RedShell
{
Inventory.Amount 2;
Radius 6;
Height 20;
}
}
Class RedShell4 : RedShell
@ -426,34 +425,6 @@ Class RedShell4 : RedShell
{
Inventory.Amount 4;
Radius 6;
Height 20;
}
}
Class RedShell8 : RedShell
{
Default
{
Inventory.Amount 8;
Radius 8;
Height 20;
}
}
Class RedShell12 : RedShell
{
Default
{
Inventory.Amount 12;
Radius 10;
Height 20;
}
}
Class RedShell16 : RedShell
{
Default
{
Inventory.Amount 16;
Radius 10;
Height 20;
}
}
@ -492,7 +463,6 @@ Class GreenShell2 : GreenShell
{
Inventory.Amount 2;
Radius 6;
Height 20;
}
}
Class GreenShell4 : GreenShell
@ -501,25 +471,6 @@ Class GreenShell4 : GreenShell
{
Inventory.Amount 4;
Radius 6;
Height 20;
}
}
Class GreenShell8 : GreenShell
{
Default
{
Inventory.Amount 8;
Radius 8;
Height 20;
}
}
Class GreenShell12 : GreenShell
{
Default
{
Inventory.Amount 12;
Radius 10;
Height 20;
}
}
@ -543,7 +494,6 @@ Class WhiteShell : Ammo
+FLOATBOB;
FloatBobStrength 0.25;
Radius 4;
Height 20;
}
States
{
@ -558,7 +508,6 @@ Class WhiteShell2 : WhiteShell
{
Inventory.Amount 2;
Radius 6;
Height 20;
}
}
Class WhiteShell4 : WhiteShell
@ -567,16 +516,6 @@ Class WhiteShell4 : WhiteShell
{
Inventory.Amount 4;
Radius 6;
Height 20;
}
}
Class WhiteShell8 : WhiteShell
{
Default
{
Inventory.Amount 8;
Radius 8;
Height 20;
}
}
@ -615,7 +554,6 @@ Class BlueShell2 : BlueShell
{
Inventory.Amount 2;
Radius 6;
Height 20;
}
}
Class BlueShell4 : BlueShell
@ -624,16 +562,6 @@ Class BlueShell4 : BlueShell
{
Inventory.Amount 4;
Radius 6;
Height 20;
}
}
Class BlueShell8 : BlueShell
{
Default
{
Inventory.Amount 8;
Radius 8;
Height 20;
}
}
@ -672,7 +600,6 @@ Class BlackShell2 : BlackShell
{
Inventory.Amount 2;
Radius 6;
Height 20;
}
}
Class BlackShell4 : BlackShell
@ -681,7 +608,6 @@ Class BlackShell4 : BlackShell
{
Inventory.Amount 4;
Radius 6;
Height 20;
}
}
@ -720,7 +646,6 @@ Class PurpleShell2 : PurpleShell
{
Inventory.Amount 2;
Radius 6;
Height 20;
}
}
Class PurpleShell4 : PurpleShell
@ -729,7 +654,6 @@ Class PurpleShell4 : PurpleShell
{
Inventory.Amount 4;
Radius 6;
Height 20;
}
}
@ -777,7 +701,7 @@ Class GoldShell : Ammo
action void A_GoldShellTrail()
{
if ( Random[Goldy](0,2) ) return;
Spawn("GoldShellSparkle",Vec3Offset(FRandom[Goldy](-2,2),FRandom[Goldy](-2,2),FRandom[Goldy](10,18)));
Spawn("GoldShellSparkle",Vec3Offset(FRandom[Goldy](-radius,radius)/2.,FRandom[Goldy](-radius,radius)/2.,FRandom[Goldy](10,18)));
}
Default
@ -803,6 +727,22 @@ Class GoldShell : Ammo
Wait;
}
}
Class GoldShell2 : GoldShell
{
Default
{
Inventory.Amount 2;
Radius 6;
}
}
Class GoldShell4 : GoldShell
{
Default
{
Inventory.Amount 4;
Radius 6;
}
}
// ============================================================================
// Eviscerator ammo
@ -1231,7 +1171,6 @@ Class SilverBullets : MagAmmo
MagAmmo.ParentAmmo "SilverBulletAmmo";
MagAmmo.ClipSize 5;
Inventory.MaxAmount 8;
Inventory.InterHubAmount 8;
+FLOATBOB;
FloatBobStrength 0.25;
Radius 4;
@ -1254,7 +1193,6 @@ Class SilverBullets2 : MagAmmo
MagAmmo.ParentAmmo "SilverBulletAmmo2";
MagAmmo.ClipSize 5;
Inventory.MaxAmount 8;
Inventory.InterHubAmount 8;
+FLOATBOB;
FloatBobStrength 0.25;
Radius 4;
@ -1373,7 +1311,6 @@ Class CandyGunBullets : MagAmmo
MagAmmo.ParentAmmo "CandyGunAmmo";
MagAmmo.ClipSize 7;
Inventory.MaxAmount 10;
Inventory.InterHubAmount 10;
+FLOATBOB;
FloatBobStrength 0.25;
Radius 2;
@ -1461,7 +1398,7 @@ Class YnykronAmmo : Ammo
Inventory.Amount 1;
Inventory.MaxAmount 1;
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 4;
Ammo.BackpackMaxAmount 3;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;

View file

@ -705,6 +705,7 @@ Class EvisceratorCasing : SWWMCasing
Class Eviscerator : SWWMWeapon
{
double casex, casey;
bool isfiring;
// barrel is extended
bool extended;
@ -1024,7 +1025,13 @@ Class Eviscerator : SWWMWeapon
XZW2 A 4;
XZW3 STUV 2;
XZW3 W 1 A_StartSound("eviscerator/eject",CHAN_WEAPON,CHANF_OVERLAP);
XZW3 X 1 A_Overlay(-9999,"EjectSmoke");
XZW3 X 1
{
int layer = PSP_WEAPON+1;
while ( player.FindPSprite(layer) ) layer++;
A_Overlay(layer,"EjectCasing");
A_Overlay(-9999,"EjectSmoke");
}
XZW3 YZ 1;
XZW4 AB 1;
XZW4 C 1
@ -1039,7 +1046,13 @@ Class Eviscerator : SWWMWeapon
XZW4 Z 4;
XZW6 RSTU 2;
XZW6 V 1 A_StartSound("eviscerator/eject",CHAN_WEAPON,CHANF_OVERLAP);
XZW6 W 1 A_Overlay(-9999,"EjectSmoke");
XZW6 W 1
{
int layer = PSP_WEAPON+1;
while ( player.FindPSprite(layer) ) layer++;
A_Overlay(layer,"EjectCasing");
A_Overlay(-9999,"EjectSmoke");
}
XZW6 XYZ 1;
XZW7 A 1;
XZW7 B 1
@ -1050,6 +1063,16 @@ Class Eviscerator : SWWMWeapon
XZW7 CDE 1;
XZW7 FGH 2;
Goto ReadyExt;
EjectCasing:
XZWB D 1
{
A_OverlayOffset(OverlayID(),0,0);
invoker.casex = FRandom[Eviscerator](-2.,2.);
invoker.casey = FRandom[Eviscerator](-2.,2.);
}
XZWB EFGHIJKLM 1 A_OverlayOffset(OverlayID(),invoker.casex,invoker.casey,WOF_ADD|WOF_INTERPOLATE);
TNT1 A 1 A_EvisceratorEject();
Stop;
EjectSmoke:
TNT1 A 1 A_EvisceratorCasingSmoke((10,2,-3));
TNT1 A 1 A_EvisceratorCasingSmoke((10,-1,-2));
@ -1059,7 +1082,6 @@ Class Eviscerator : SWWMWeapon
TNT1 A 1 A_EvisceratorCasingSmoke((10,-8.5,-5));
TNT1 A 1 A_EvisceratorCasingSmoke((10,-10,-9));
TNT1 A 1 A_EvisceratorCasingSmoke((10,-11,-14));
TNT1 A 1 A_EvisceratorEject();
Stop;
AltFire:
XZW2 A 2

View file

@ -929,7 +929,8 @@ Class CBoxLight : SpotLightAttenuated
// Collectible box (recycling of discarded "chance box" item)
Class Chancebox : Actor
{
bool dud;
bool dud; // if true, cannot drop a collectible
bool chanceinit; // internal state has been initialized
static void SpawnChanceboxes()
{
@ -1077,19 +1078,19 @@ Class Chancebox : Actor
if ( Random[Chancebox](0,1) )
{
let a = Spawn(!Random[Chancebox](0,2)?"GoldShell":(Random[Chancebox](0,1)||(gameinfo.gametype&GAME_Strife))?"GrilledCheeseSandwich":"YnykronAmmo",pos);
a.bDROPPED = true;
a.bDROPPED = false;
a.bNOGRAVITY = false;
a.vel.z = FRandom[Chancebox](2,4);
}
else if ( !Random[Chancebox](0,2) )
{
for ( int i=0; i<=12; i++ )
for ( int i=0; i<=6; i++ )
{
let a = Spawn((i==0)?"CandyGun":"CandyGunBullets",pos);
a.bDROPPED = true;
a.bDROPPED = false;
a.bNOGRAVITY = false;
a.vel.z = FRandom[Chancebox](2,4);
if ( i > 0 ) a.vel.xy = (cos(i*30),sin(i*30))*FRandom[Chancebox](1,2);
if ( i > 0 ) a.vel.xy = (cos(i*60),sin(i*60))*FRandom[Chancebox](1,2);
}
}
else if ( !Random[Chancebox](0,2) )
@ -1097,7 +1098,7 @@ Class Chancebox : Actor
for ( int i=0; i<3; i++ )
{
let a = Spawn("SilverBullets2",pos);
a.bDROPPED = true;
a.bDROPPED = false;
a.bNOGRAVITY = false;
a.vel.z = FRandom[Chancebox](2,4);
a.vel.xy = (cos(i*120),sin(i*120))*FRandom[Chancebox](1,2);
@ -1105,7 +1106,7 @@ Class Chancebox : Actor
for ( int i=0; i<6; i++ )
{
let a = Spawn("SilverBullets",pos);
a.bDROPPED = true;
a.bDROPPED = false;
a.bNOGRAVITY = false;
a.vel.z = FRandom[Chancebox](2,4);
a.vel.xy = (cos(i*60),sin(i*60))*FRandom[Chancebox](3,4);
@ -1114,13 +1115,13 @@ Class Chancebox : Actor
else if ( Random[Chancebox](0,1) )
{
let a = Spawn("HellblazerWarheads",pos);
a.bDROPPED = true;
a.bDROPPED = false;
a.bNOGRAVITY = false;
a.vel.z = FRandom[Chancebox](2,4);
for ( int i=0; i<3; i++ )
{
a = Spawn("HellblazerRavagers",pos);
a.bDROPPED = true;
a.bDROPPED = false;
a.bNOGRAVITY = false;
a.vel.z = FRandom[Chancebox](2,4);
a.vel.xy = (cos(i*120),sin(i*120))*FRandom[Chancebox](1,2);
@ -1128,7 +1129,7 @@ Class Chancebox : Actor
for ( int i=0; i<5; i++ )
{
a = Spawn("HellblazerCrackshots",pos);
a.bDROPPED = true;
a.bDROPPED = false;
a.bNOGRAVITY = false;
a.vel.z = FRandom[Chancebox](2,4);
a.vel.xy = (cos(i*72),sin(i*72))*FRandom[Chancebox](3,4);
@ -1136,7 +1137,7 @@ Class Chancebox : Actor
for ( int i=0; i<8; i++ )
{
a = Spawn("HellblazerMissiles",pos);
a.bDROPPED = true;
a.bDROPPED = false;
a.bNOGRAVITY = false;
a.vel.z = FRandom[Chancebox](2,4);
a.vel.xy = (cos(i*45),sin(i*45))*FRandom[Chancebox](5,6);
@ -1145,13 +1146,13 @@ Class Chancebox : Actor
else if ( Random[Chancebox](0,1) )
{
let a = Spawn("BlackShell",pos);
a.bDROPPED = true;
a.bDROPPED = false;
a.bNOGRAVITY = false;
a.vel.z = FRandom[Chancebox](2,4);
for ( int i=0; i<3; i++ )
{
a = Spawn("BlueShell",pos);
a.bDROPPED = true;
a.bDROPPED = false;
a.bNOGRAVITY = false;
a.vel.z = FRandom[Chancebox](2,4);
a.vel.xy = (cos(i*120),sin(i*120))*FRandom[Chancebox](1,2);
@ -1159,7 +1160,7 @@ Class Chancebox : Actor
for ( int i=0; i<8; i++ )
{
a = Spawn((i%2)?"WhiteShell":"PurpleShell",pos);
a.bDROPPED = true;
a.bDROPPED = false;
a.bNOGRAVITY = false;
a.vel.z = FRandom[Chancebox](2,4);
a.vel.xy = (cos(i*72),sin(i*72))*FRandom[Chancebox](3,4);
@ -1167,7 +1168,7 @@ Class Chancebox : Actor
for ( int i=0; i<12; i++ )
{
a = Spawn((i%2)?"RedShell":"GreenShell",pos);
a.bDROPPED = true;
a.bDROPPED = false;
a.bNOGRAVITY = false;
a.vel.z = FRandom[Chancebox](2,4);
a.vel.xy = (cos(i*30),sin(i*30))*FRandom[Chancebox](5,6);
@ -1175,10 +1176,10 @@ Class Chancebox : Actor
}
else if ( Random[Chancebox](0,1) )
{
for ( int i=0; i<100; i++ )
for ( int i=0; i<20; i++ )
{
let a = Spawn("HealthNuggetItem",pos);
a.bDROPPED = true;
a.bDROPPED = false;
a.bNOGRAVITY = false;
a.vel.z = FRandom[Chancebox](2,8);
a.vel.xy = (cos(i*3.6),sin(i*3.6))*FRandom[Chancebox](1,8);
@ -1189,7 +1190,7 @@ Class Chancebox : Actor
for ( int i=0; i<=15; i++ )
{
let a = Spawn((i==0)?"RefresherItem":(i%3)?"HealthNuggetItem":"ArmorNuggetItem",pos);
a.bDROPPED = true;
a.bDROPPED = false;
a.bNOGRAVITY = false;
a.vel.z = FRandom[Chancebox](2,4);
if ( i > 0 ) a.vel.xy = (cos(i*24),sin(i*24))*FRandom[Chancebox](1,2);
@ -1200,7 +1201,7 @@ Class Chancebox : Actor
{
// pop one at random
let a = Spawn(candidates[Random[Chancebox](0,candidates.Size()-1)],pos);
a.bDROPPED = true;
a.bDROPPED = false;
a.bNOGRAVITY = false;
a.vel.z = FRandom[Chancebox](2,4);
}
@ -1236,15 +1237,33 @@ Class Chancebox : Actor
double rang = user.player?PlayerPawn(user.player.mo).UseRange:(user.Height/2);
if ( abs(diff.z) > rang ) return false;
if ( CurState != FindState("Spawn") ) return false;
if ( !dud )
if ( !chanceinit )
{
if ( !Random[Chancebox](0,2) )
int col = 0;
let ti = ThinkerIterator.Create("SWWMCollectible");
SWWMCollectible c;
while ( c = SWWMCollectible(ti.Next()) ) col++;
int tcol = 0;
for ( int i=0; i<AllActorClasses.Size(); i++ )
{
let c = (Class<SWWMCollectible>)(AllActorClasses[i]);
if ( !c || (c == 'SWWMCollectible') ) continue;
let def = GetDefaultByType(c);
// check that we can collect it in this IWAD
if ( !(gameinfo.gametype&def.avail) ) continue;
tcol++;
}
int alldudchance = 5-(4*col)/tcol; // chance for all boxes to be duds (no collectibles)
if ( (col > 0) && !Random[Chancebox](0,alldudchance) )
{
// all boxes are duds
let ti = ThinkerIterator.Create("Chancebox");
Chancebox c;
while ( c = Chancebox(ti.Next()) )
{
c.chanceinit = true;
c.dud = true;
}
}
else if ( Random[Chancebox](0,2) )
{
@ -1265,12 +1284,21 @@ Class Chancebox : Actor
// the others are duds
let ti = ThinkerIterator.Create("Chancebox");
Chancebox c;
bool onemore = !Random[Chancebox](0,2); // unless...
while ( c = Chancebox(ti.Next()) )
{
if ( c == self ) continue;
c.dud = true; // we found one, the others just drop goodies
if ( (c == self) || c.chanceinit ) continue;
c.chanceinit = true;
if ( onemore )
{
onemore = false;
// this one isn't a dud either (wow, how lucky)
c.dud = false;
}
else c.dud = true; // this one's a dud
}
}
chanceinit = true;
}
if ( bCOUNTITEM )
{

View file

@ -2372,7 +2372,7 @@ Class SWWMHandler : EventHandler
// respect final replacements
if ( e.IsFinal ) return;
// shell types (sorted by rarity
static const Class<Actor> redpool[] = {"RedShell","RedShell2","RedShell4","RedShell8"};
static const Class<Actor> redpool[] = {"RedShell","RedShell2","RedShell4"};
static const Class<Actor> greenpool[] = {"GreenShell","GreenShell2","GreenShell4"};
static const Class<Actor> whitepool[] = {"WhiteShell","WhiteShell2"};
static const Class<Actor> purplepool[] = {"PurpleShell","PurpleShell2","PurpleShell4"};

View file

@ -89,6 +89,7 @@ Class Demolitionist : PlayerPawn
DamageFactor "Poison", 0.;
DamageFactor "PoisonCloud", 0.;
DamageFactor "Falling", 0.;
DamageFactor "Crush", .25;
Demolitionist.DashFuel 240.;
+NOBLOOD;
+DONTGIB;

View file

@ -891,6 +891,7 @@ Class CandyGun : SWWMWeapon
{
int clipcount;
bool chambered;
double casex, casey;
transient ui TextureID WeaponBox;
transient ui Font TewiFont;
bool tospecial;
@ -1249,9 +1250,26 @@ Class CandyGun : SWWMWeapon
Wait;
Fire:
XZW2 A 1 A_Schutt();
XZW2 IJKLMNOPQR 1;
XZW2 S 2 A_DropCasing();
XZW2 I 1;
XZW2 J 1
{
int layer = PSP_WEAPON+1;
while ( player.FindPSprite(layer) ) layer++;
A_Overlay(layer,"Casing");
}
XZW2 KLMNOP 1;
XZW2 Q 2;
Goto Ready;
Casing:
XZWC A 1
{
A_OverlayOffset(OverlayID(),0,0);
invoker.casex = FRandom[Explodium](-1.,5.);
invoker.casey = FRandom[Explodium](-2.,1.);
}
XZWC BCDEFGHIJ 1 A_OverlayOffset(OverlayID(),invoker.casex,invoker.casey,WOF_ADD|WOF_INTERPOLATE);
TNT1 A 1 A_DropCasing();
Stop;
AltFire:
XZW2 A 2
{

View file

@ -648,6 +648,7 @@ Class SilverBullet : SWWMWeapon
bool chambered, fired;
bool fcbchambered, fcbloaded, fcbselected;
int clipcount;
double casex, casey;
transient ui TextureID WeaponBox[2], ZoomBar, BulletIcon[2], AmmoIcon[2];
transient ui Font TewiFont;
@ -1133,7 +1134,7 @@ Class SilverBullet : SWWMWeapon
Vector3 x, y, z;
[x, y, z] = swwm_CoordUtil.GetAxes(pitch,angle,roll);
vel += x*min(1.,invoker.specialf1)*(600./Mass);
A_OverlayAlpha(PSP_WEAPON+2,clamp(invoker.specialf1*3.,0.,1.));
A_OverlayAlpha(PSP_WEAPON+1,clamp(invoker.specialf1*3.,0.,1.));
if ( Random[SilverBullet](0,int(invoker.specialf1*2)) )
self.DamageMobj(invoker,self,1,'jet');
Vector3 origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),-x*10-z*10);
@ -1321,9 +1322,9 @@ Class SilverBullet : SWWMWeapon
TNT1 A 0
{
A_StartSound("silverbullet/jet",CHAN_WEAPON,CHANF_OVERLAP);
A_Overlay(PSP_WEAPON+2,"JetSmoke");
A_OverlayFlags(PSP_WEAPON+2,PSPF_RENDERSTYLE|PSPF_ALPHA|PSPF_FORCESTYLE|PSPF_FORCEALPHA,true);
A_OverlayRenderStyle(PSP_WEAPON+2,STYLE_Add);
A_Overlay(PSP_WEAPON+1,"JetSmoke");
A_OverlayFlags(PSP_WEAPON+1,PSPF_RENDERSTYLE|PSPF_ALPHA|PSPF_FORCESTYLE|PSPF_FORCEALPHA,true);
A_OverlayRenderStyle(PSP_WEAPON+1,STYLE_Add);
}
TNT1 A 1
{
@ -1359,15 +1360,17 @@ Class SilverBullet : SWWMWeapon
A_StartSound("silverbullet/boltopen",CHAN_WEAPON,CHANF_OVERLAP);
if ( invoker.chambered )
{
int layer = PSP_WEAPON+2;
while ( player.FindPSprite(layer) ) layer++;
if ( invoker.fired )
{
if ( invoker.fcbchambered ) A_Overlay(PSP_WEAPON+1,"Casing2");
else A_Overlay(PSP_WEAPON+1,"Casing");
if ( invoker.fcbchambered ) A_Overlay(layer,"Casing2");
else A_Overlay(layer,"Casing");
}
else
{
if ( invoker.fcbchambered ) A_Overlay(PSP_WEAPON+1,"Bullet2");
else A_Overlay(PSP_WEAPON+1,"Bullet");
if ( invoker.fcbchambered ) A_Overlay(layer,"Bullet2");
else A_Overlay(layer,"Bullet");
}
}
invoker.fired = false;
@ -1389,15 +1392,17 @@ Class SilverBullet : SWWMWeapon
A_StartSound("silverbullet/boltopen",CHAN_WEAPON,CHANF_OVERLAP);
if ( invoker.chambered )
{
int layer = PSP_WEAPON+2;
while ( player.FindPSprite(layer) ) layer++;
if ( invoker.fired )
{
if ( invoker.fcbchambered ) A_Overlay(PSP_WEAPON+1,"Casing2");
else A_Overlay(PSP_WEAPON+1,"Casing");
if ( invoker.fcbchambered ) A_Overlay(layer,"Casing2");
else A_Overlay(layer,"Casing");
}
else
{
if ( invoker.fcbchambered ) A_Overlay(PSP_WEAPON+1,"Bullet2");
else A_Overlay(PSP_WEAPON+1,"Bullet");
if ( invoker.fcbchambered ) A_Overlay(layer,"Bullet2");
else A_Overlay(layer,"Bullet");
}
}
invoker.fired = false;
@ -1411,24 +1416,48 @@ Class SilverBullet : SWWMWeapon
XZW9 JKLMNOPQR 2;
Goto Ready2;
Casing:
XZW7 DE 2;
XZW7 FGHIJKLMNO 1;
XZW7 D 2
{
A_OverlayOffset(OverlayID(),0,0);
invoker.casex = FRandom[Silverbullet](-2.,2.);
invoker.casey = FRandom[Silverbullet](-2.,2.);
}
XZW7 E 2;
XZW7 FGHIJKLMNO 1 A_OverlayOffset(OverlayID(),invoker.casex,invoker.casey,WOF_ADD|WOF_INTERPOLATE);
TNT1 A 0 A_DropCasing();
Stop;
Casing2:
XZWD DE 2;
XZWD FGHIJKLMNO 1;
XZWD D 2
{
A_OverlayOffset(OverlayID(),0,0);
invoker.casex = FRandom[Silverbullet](-2.,2.);
invoker.casey = FRandom[Silverbullet](-2.,2.);
}
XZWD E 2;
XZWD FGHIJKLMNO 1 A_OverlayOffset(OverlayID(),invoker.casex,invoker.casey,WOF_ADD|WOF_INTERPOLATE);
TNT1 A 0 A_DropCasing(true);
Stop;
Bullet:
XZWD PQ 2;
XZWD RSTUVWXYZ 1;
XZWE A 1;
XZWD P 2
{
A_OverlayOffset(OverlayID(),0,0);
invoker.casex = FRandom[Silverbullet](-2.,2.);
invoker.casey = FRandom[Silverbullet](-2.,2.);
}
XZWD Q 2;
XZWD RSTUVWXYZ 1 A_OverlayOffset(OverlayID(),invoker.casex,invoker.casey,WOF_ADD|WOF_INTERPOLATE);
XZWE A 1 A_OverlayOffset(OverlayID(),invoker.casex,invoker.casey,WOF_ADD|WOF_INTERPOLATE);
TNT1 A 0 A_DropBullet();
Stop;
Bullet2:
XZWE BC 2;
XZWE DEFGHIJKLM 1;
XZWE B 2
{
A_OverlayOffset(OverlayID(),0,0);
invoker.casex = FRandom[Silverbullet](-2.,2.);
invoker.casey = FRandom[Silverbullet](-2.,2.);
}
XZWE C 2;
XZWE DEFGHIJKLM 1 A_OverlayOffset(OverlayID(),invoker.casex,invoker.casey,WOF_ADD|WOF_INTERPOLATE);
TNT1 A 0 A_DropBullet(true);
Stop;
ZoomFire: