Sandwich can only be eaten if at 500 hp or lower.

Rebalances to ammo spawns.
Hellblazer gives 3 ammo instead of 6.
Recolored Hellblazer explosion sprites to be more Nokron-tinted.
Rebalances to ammo max amounts.
Rebalanced damages across the board (notable nerf of Golden Shells, they're no longer "I win" ammo)
Fix certain hitscan attacks not splashing in liquids.
Fix blood drops sometimes going out of bounds.
Don't stack refresher regen time if multiple copies were auto-used.
Pusher can now propel you underwater.
This commit is contained in:
Mari the Deer 2020-12-21 01:18:16 +01:00
commit 9995a5ebf0
38 changed files with 226 additions and 163 deletions

View file

@ -332,7 +332,7 @@ Can eat up a total of 250 damage points before breaking.
### Grilled Cheese Sandwich ~ Replaces Megasphere, Morph Ovum, Platinum Helm
![](docimg/sandwich.png)
The ultimate meal. Grants a full 1000 health and magically gives you a full stack of **Armor Nuggets**, a **Blast Suit** and a **War Armor**. In addition it prevents you from dying at all when it activates automatically (this wondrous artifact can even save you from the destruction of the **Ynykron Artifact**). Keep in mind that this overhealing above 500 points fades away much quicker than the **Refresher**'s.
The ultimate meal. Grants a full 1000 health and magically gives you a full stack of **Armor Nuggets**, a **Blast Suit** and a **War Armor**. In addition it prevents you from dying at all when it activates automatically (this wondrous artifact can even save you from the destruction of the **Ynykron Artifact**). Keep in mind that this overhealing above 500 points fades away much quicker than the **Refresher**'s, and you can't use another sandwich again until the overheal fades.
### Ghost Artifact ~ Replaces Blur Sphere, Shadowsphere, Amulet of Warding
![](docimg/ghost.png)

View file

@ -1,2 +1,2 @@
[default]
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r692 \cu(Sat 19 Dec 18:55:07 CET 2020)";
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r693 \cu(Mon 21 Dec 01:18:16 CET 2020)";

View file

@ -526,21 +526,25 @@ spreadgun/deselect sounds/spreadgun/spread_deselect.ogg
spreadgun/redfire1 sounds/spreadgun/spread_redfire1.ogg
spreadgun/redfire2 sounds/spreadgun/spread_redfire2.ogg
$random spreadgun/redfire { spreadgun/redfire1 spreadgun/redfire2 }
$limit spreadgun/redfire 16
spreadgun/greenfire1 sounds/spreadgun/spread_greenfire1.ogg
spreadgun/greenfire2 sounds/spreadgun/spread_greenfire2.ogg
$random spreadgun/greenfire { spreadgun/greenfire1 spreadgun/greenfire2 }
$limit spreadgun/greenfire 16
spreadgun/whitefire1 sounds/spreadgun/spread_whitefire1.ogg
spreadgun/whitefire2 sounds/spreadgun/spread_whitefire2.ogg
$random spreadgun/whitefire { spreadgun/whitefire1 spreadgun/whitefire2 }
spreadgun/bluefire1 sounds/spreadgun/spread_bluefire1.ogg
spreadgun/bluefire2 sounds/spreadgun/spread_bluefire2.ogg
$random spreadgun/bluefire { spreadgun/bluefire1 spreadgun/bluefire2 }
$limit spreadgun/bluefire 16
spreadgun/blackfire1 sounds/spreadgun/spread_blackfire1.ogg
spreadgun/blackfire2 sounds/spreadgun/spread_blackfire2.ogg
$random spreadgun/blackfire { spreadgun/blackfire1 spreadgun/blackfire2 }
spreadgun/purplefire1 sounds/spreadgun/spread_purplefire1.ogg
spreadgun/purplefire2 sounds/spreadgun/spread_purplefire2.ogg
$random spreadgun/purplefire { spreadgun/purplefire1 spreadgun/purplefire2 }
$limit spreadgun/purplefire 16
spreadgun/goldfire1 sounds/spreadgun/spread_goldfire1.ogg
spreadgun/goldfire2 sounds/spreadgun/spread_goldfire2.ogg
$random spreadgun/goldfire { spreadgun/goldfire1 spreadgun/goldfire2 }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 971 B

After

Width:  |  Height:  |  Size: 942 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 2 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Before After
Before After

View file

@ -13,10 +13,10 @@ Class SMW05Ammo : Ammo
Stamina 300;
Inventory.Icon "graphics/HUD/Icons/A_SMW05Ammo.png";
Inventory.Amount 1;
Inventory.MaxAmount 90;
Ammo.BackpackAmount 6;
Ammo.BackpackMaxAmount 250;
Ammo.DropAmount 6;
Inventory.MaxAmount 60;
Ammo.BackpackAmount 3;
Ammo.BackpackMaxAmount 150;
Ammo.DropAmount 3;
+FLOATBOB;
FloatBobStrength 0.25;
}
@ -70,8 +70,8 @@ Class SheenAmmo : Ammo
Inventory.Amount 1;
Inventory.MaxAmount 300;
Ammo.BackpackAmount 50;
Ammo.BackpackMaxAmount 1500;
Ammo.DropAmount 50;
Ammo.BackpackMaxAmount 1200;
Ammo.DropAmount 20;
+FLOATBOB;
FloatBobStrength 0.25;
}
@ -83,6 +83,14 @@ Class SheenAmmo : Ammo
}
}
Class SheenTinyAmmo : SheenAmmo
{
Default
{
Inventory.Amount 10;
}
}
Class SheenSmallAmmo : SheenAmmo
{
Default
@ -112,9 +120,9 @@ Class QuadravolAmmo : Ammo
Stamina 10000;
Inventory.Icon "graphics/HUD/Icons/A_QuadAmmo.png";
Inventory.Amount 1;
Inventory.MaxAmount 8;
Inventory.MaxAmount 4;
Ammo.BackpackAmount 1;
Ammo.BackpackMaxAmount 24;
Ammo.BackpackMaxAmount 16;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
@ -133,7 +141,7 @@ Class QuadravolAmmoBundleSpawn : Actor
{
if ( bCOUNTSECRET ) level.total_secrets--;
int bnd = Random[Bundle](2,3);
for ( int i=0; i<3; i++ )
for ( int i=0; i<bnd; i++ )
{
let a = Spawn("QuadravolAmmo",Vec3Angle(6,i*(360/bnd)));
a.special = special;
@ -163,9 +171,9 @@ Class DarkCanister : Ammo
Stamina 20000;
Inventory.Icon "graphics/HUD/Icons/A_DarkAmmo.png";
Inventory.Amount 1;
Inventory.MaxAmount 5;
Inventory.MaxAmount 3;
Ammo.BackpackAmount 1;
Ammo.BackpackMaxAmount 13;
Ammo.BackpackMaxAmount 9;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
@ -191,9 +199,9 @@ Class EMPCore : Ammo
Stamina 60000;
Inventory.Icon "graphics/HUD/Icons/A_EMPCore.png";
Inventory.Amount 1;
Inventory.MaxAmount 6;
Inventory.MaxAmount 5;
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 14;
Ammo.BackpackMaxAmount 12;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
@ -264,9 +272,9 @@ Class RayAmmo : Ammo
Stamina 150000;
Inventory.Icon "graphics/HUD/Icons/A_RayAmmo.png";
Inventory.Amount 1;
Inventory.MaxAmount 4;
Inventory.MaxAmount 3;
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 8;
Ammo.BackpackMaxAmount 6;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
@ -344,9 +352,9 @@ Class GrandAmmo : Ammo
Stamina 1200000;
Inventory.Icon "graphics/HUD/Icons/A_RayAmmo.png";
Inventory.Amount 1;
Inventory.MaxAmount 2;
Inventory.MaxAmount 1;
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 6;
Ammo.BackpackMaxAmount 4;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;

View file

@ -161,6 +161,17 @@ Mixin Class SWWMAmmo
return Super.HandlePickup(item);
}
override void DoEffect()
{
Super.DoEffect();
// drop excess ammo
if ( !sv_infiniteammo && !Owner.FindInventory('PowerInfiniteAmmo') )
{
int excess = Amount-MaxAmount;
if ( excess > 0 ) CreateTossable(excess);
}
}
default
{
+INVENTORY.IGNORESKILL;
@ -225,6 +236,12 @@ Class MagAmmo : Inventory abstract
override void DoEffect()
{
Super.DoEffect();
// drop excess ammo
if ( !sv_infiniteammo && !Owner.FindInventory('PowerInfiniteAmmo') )
{
int excess = Amount-MaxAmount;
if ( excess > 0 ) CreateTossable(excess);
}
if ( !pamo )
{
pamo = Ammo(Owner.FindInventory(ParentAmmo));
@ -344,10 +361,10 @@ Class RedShell : Ammo
Stamina 500;
Inventory.Icon "graphics/HUD/Icons/A_ShellsNormal.png";
Inventory.Amount 1;
Inventory.MaxAmount 40;
Ammo.BackpackAmount 3;
Ammo.BackpackMaxAmount 200;
Ammo.DropAmount 3;
Inventory.MaxAmount 30;
Ammo.BackpackAmount 2;
Ammo.BackpackMaxAmount 100;
Ammo.DropAmount 2;
+FLOATBOB;
FloatBobStrength 0.25;
Radius 4;
@ -419,9 +436,9 @@ Class GreenShell : Ammo
Stamina 800;
Inventory.Icon "graphics/HUD/Icons/A_ShellsSlug.png";
Inventory.Amount 1;
Inventory.MaxAmount 30;
Inventory.MaxAmount 25;
Ammo.BackpackAmount 2;
Ammo.BackpackMaxAmount 150;
Ammo.BackpackMaxAmount 80;
Ammo.DropAmount 2;
+FLOATBOB;
FloatBobStrength 0.25;
@ -485,9 +502,9 @@ Class WhiteShell : Ammo
Stamina 1000;
Inventory.Icon "graphics/HUD/Icons/A_ShellsDragon.png";
Inventory.Amount 1;
Inventory.MaxAmount 24;
Inventory.MaxAmount 10;
Ammo.BackpackAmount 1;
Ammo.BackpackMaxAmount 80;
Ammo.BackpackMaxAmount 30;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
@ -542,9 +559,9 @@ Class BlueShell : Ammo
Stamina 2500;
Inventory.Icon "graphics/HUD/Icons/A_ShellsKinylum.png";
Inventory.Amount 1;
Inventory.MaxAmount 28;
Ammo.BackpackAmount 2;
Ammo.BackpackMaxAmount 100;
Inventory.MaxAmount 15;
Ammo.BackpackAmount 1;
Ammo.BackpackMaxAmount 40;
Ammo.DropAmount 2;
+FLOATBOB;
FloatBobStrength 0.25;
@ -599,9 +616,9 @@ Class BlackShell : Ammo
Stamina 4000;
Inventory.Icon "graphics/HUD/Icons/A_ShellsFuck.png";
Inventory.Amount 1;
Inventory.MaxAmount 8;
Inventory.MaxAmount 10;
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 32;
Ammo.BackpackMaxAmount 20;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
@ -647,10 +664,10 @@ Class PurpleShell : Ammo
Stamina 1500;
Inventory.Icon "graphics/HUD/Icons/A_ShellsBall.png";
Inventory.Amount 1;
Inventory.MaxAmount 32;
Ammo.BackpackAmount 2;
Ammo.BackpackMaxAmount 120;
Ammo.DropAmount 2;
Inventory.MaxAmount 20;
Ammo.BackpackAmount 1;
Ammo.BackpackMaxAmount 60;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
Radius 4;
@ -736,7 +753,7 @@ Class GoldShell : Ammo
Stamina 0;
Inventory.Icon "graphics/HUD/Icons/A_ShellsGold.png";
Inventory.Amount 1;
Inventory.MaxAmount 3;
Inventory.MaxAmount 7;
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 7;
Ammo.DropAmount 1;
@ -771,10 +788,10 @@ Class EvisceratorShell : Ammo
Stamina 3000;
Inventory.Icon "graphics/HUD/Icons/A_Eviscerator.png";
Inventory.Amount 1;
Inventory.MaxAmount 36;
Inventory.MaxAmount 20;
Ammo.BackpackAmount 2;
Ammo.BackpackMaxAmount 148;
Ammo.DropAmount 2;
Ammo.BackpackMaxAmount 90;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
Radius 8;
@ -843,9 +860,9 @@ Class HellblazerMissiles : Ammo
Stamina 8000;
Inventory.Icon "graphics/HUD/Icons/A_HellblazerMissile.png";
Inventory.Amount 1;
Inventory.MaxAmount 30;
Ammo.BackpackAmount 2;
Ammo.BackpackMaxAmount 94;
Inventory.MaxAmount 20;
Ammo.BackpackAmount 1;
Ammo.BackpackMaxAmount 60;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
@ -911,7 +928,7 @@ Class HellblazerCrackshots : Ammo
Inventory.Amount 1;
Inventory.MaxAmount 15;
Ammo.BackpackAmount 1;
Ammo.BackpackMaxAmount 71;
Ammo.BackpackMaxAmount 36;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
@ -954,9 +971,9 @@ Class HellblazerRavagers : Ammo
Stamina 25000;
Inventory.Icon "graphics/HUD/Icons/A_HellblazerRavager.png";
Inventory.Amount 1;
Inventory.MaxAmount 12;
Inventory.MaxAmount 9;
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 60;
Ammo.BackpackMaxAmount 24;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
@ -1001,7 +1018,7 @@ Class HellblazerWarheads : Ammo
Inventory.Amount 1;
Inventory.MaxAmount 4;
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 12;
Ammo.BackpackMaxAmount 10;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
@ -1048,9 +1065,9 @@ Class SparkUnit : Ammo
Stamina 50000;
Inventory.Icon "graphics/HUD/Icons/A_Sparkster.png";
Inventory.Amount 1;
Inventory.MaxAmount 6;
Inventory.MaxAmount 5;
Ammo.BackpackAmount 1;
Ammo.BackpackMaxAmount 30;
Ammo.BackpackMaxAmount 15;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
@ -1084,7 +1101,7 @@ Class SilverBulletAmmo : Ammo
Inventory.Amount 1;
Inventory.MaxAmount 3;
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 11;
Ammo.BackpackMaxAmount 8;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
@ -1114,7 +1131,7 @@ Class SilverBulletAmmo2 : Ammo
Inventory.Amount 1;
Inventory.MaxAmount 2;
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 10;
Ammo.BackpackMaxAmount 4;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
@ -1182,7 +1199,7 @@ Class SilverBulletsBundleSpawn : Actor
{
if ( bCOUNTSECRET ) level.total_secrets--;
int bnd = Random[Bundle](2,3);
for ( int i=0; i<3; i++ )
for ( int i=0; i<bnd; i++ )
{
let a = Spawn("SilverBullets",Vec3Angle(6,i*(360/bnd)));
a.special = special;
@ -1238,9 +1255,9 @@ Class CandyGunAmmo : Ammo
Stamina 100000;
Inventory.Icon "graphics/HUD/Icons/A_CandyGun.png";
Inventory.Amount 1;
Inventory.MaxAmount 3;
Inventory.MaxAmount 2;
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 7;
Ammo.BackpackMaxAmount 6;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
@ -1334,7 +1351,7 @@ Class YnykronAmmo : Ammo
Inventory.Amount 1;
Inventory.MaxAmount 1;
Ammo.BackpackAmount 0;
Ammo.BackpackMaxAmount 5;
Ammo.BackpackMaxAmount 4;
Ammo.DropAmount 1;
+FLOATBOB;
FloatBobStrength 0.25;
@ -1489,8 +1506,6 @@ Class AmmoFabricator : Inventory abstract
+INVENTORY.AUTOACTIVATE;
+FLOATBOB;
Inventory.UseSound "fabricator/use";
Inventory.MaxAmount 32;
Inventory.InterHubAmount 32;
Inventory.PickupFlash "SWWMPickupFlash";
FloatBobStrength 0.25;
Radius 10;
@ -1514,6 +1529,7 @@ Class FabricatorTier1 : AmmoFabricator
Inventory.Icon "graphics/HUD/Icons/I_Fabricator1.png";
Inventory.PickupMessage "$T_FABRICATOR1";
Inventory.MaxAmount 20;
Inventory.InterHubAmount 20;
AmmoFabricator.Budget 3000;
AmmoFabricator.PerType 1;
AmmoFabricator.MaxUnitPrice 2500;
@ -1529,6 +1545,7 @@ Class FabricatorTier2 : AmmoFabricator
Inventory.Icon "graphics/HUD/Icons/I_Fabricator2.png";
Inventory.PickupMessage "$T_FABRICATOR2";
Inventory.MaxAmount 15;
Inventory.InterHubAmount 15;
AmmoFabricator.Budget 15000;
AmmoFabricator.PerType 2;
AmmoFabricator.MaxUnitPrice 12000;
@ -1544,6 +1561,7 @@ Class FabricatorTier3 : AmmoFabricator
Inventory.Icon "graphics/HUD/Icons/I_Fabricator3.png";
Inventory.PickupMessage "$T_FABRICATOR3";
Inventory.MaxAmount 10;
Inventory.InterHubAmount 10;
AmmoFabricator.Budget 80000;
AmmoFabricator.PerType 4;
AmmoFabricator.MaxUnitPrice 80000;
@ -1557,6 +1575,7 @@ Class FabricatorTier4 : AmmoFabricator
Inventory.Icon "graphics/HUD/Icons/I_Fabricator4.png";
Inventory.PickupMessage "$T_FABRICATOR4";
Inventory.MaxAmount 5;
Inventory.InterHubAmount 5;
AmmoFabricator.Budget int.max;
AmmoFabricator.PerType int.max;
AmmoFabricator.MaxUnitPrice 1000000;

View file

@ -296,7 +296,7 @@ Class HellblazerMissile : Actor
A_SetRenderStyle(1.0,STYLE_Add);
A_SprayDecal("BigRocketBlast",50);
A_SetScale(4.5);
SWWMUtility.DoExplosion(self,350,320000,200,90);
SWWMUtility.DoExplosion(self,200,320000,200,90);
A_NoGravity();
A_QuakeEx(5,5,5,15,0,1500,"",QF_RELATIVE|QF_SCALEDOWN,falloff:500,rollIntensity:.8);
A_StopSound(CHAN_BODY);
@ -310,7 +310,7 @@ Class HellblazerMissile : Actor
Vector3 pvel = (FRandom[Hellblazer](-1,1),FRandom[Hellblazer](-1,1),FRandom[Hellblazer](-1,1)).unit()*FRandom[Hellblazer](2,8);
let s = Spawn("SWWMSmoke",pos);
s.vel = pvel;
s.SetShade(Color(4,3,2)*Random[Hellblazer](48,63));
s.SetShade(Color(4,2,1)*Random[Hellblazer](48,63));
s.special1 = Random[Hellblazer](1,4);
s.scale *= 2.8;
s.alpha *= .4;
@ -393,7 +393,7 @@ Class HellblazerCrackshot : HellblazerMissile
A_SetRenderStyle(1.0,STYLE_Add);
A_SprayDecal("BigRocketBlast",50);
A_SetScale(6.);
SWWMUtility.DoExplosion(self,300,320000,250,100);
SWWMUtility.DoExplosion(self,150,320000,250,100);
A_NoGravity();
A_QuakeEx(6,6,6,20,0,2000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:800,rollIntensity:1.);
A_StopSound(CHAN_BODY);
@ -407,7 +407,7 @@ Class HellblazerCrackshot : HellblazerMissile
Vector3 pvel = (FRandom[Hellblazer](-1,1),FRandom[Hellblazer](-1,1),FRandom[Hellblazer](-1,1)).unit()*FRandom[Hellblazer](2,8);
let s = Spawn("SWWMSmoke",pos);
s.vel = pvel;
s.SetShade(Color(2,4,2)*Random[Hellblazer](48,63));
s.SetShade(Color(4,2,1)*Random[Hellblazer](48,63));
s.special1 = Random[Hellblazer](1,4);
s.scale *= 2.8;
s.alpha *= .4;
@ -463,7 +463,7 @@ Class HellblazerRavager : HellblazerMissile
A_SetRenderStyle(1.0,STYLE_Add);
A_SprayDecal("HugeRocketBlast",50);
A_SetScale(8.);
SWWMUtility.DoExplosion(self,400,320000,300,120);
SWWMUtility.DoExplosion(self,250,320000,300,120);
A_NoGravity();
A_QuakeEx(6,6,6,30,0,2000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:800,rollIntensity:1.);
A_StopSound(CHAN_BODY);
@ -477,7 +477,7 @@ Class HellblazerRavager : HellblazerMissile
Vector3 pvel = (FRandom[Hellblazer](-1,1),FRandom[Hellblazer](-1,1),FRandom[Hellblazer](-1,1)).unit()*FRandom[Hellblazer](4,12);
let s = Spawn("SWWMSmoke",pos);
s.vel = pvel;
s.SetShade(Color(4,2,2)*Random[Hellblazer](48,63));
s.SetShade(Color(4,2,1)*Random[Hellblazer](48,63));
s.special1 = Random[Hellblazer](2,5);
s.scale *= 3.2;
s.alpha *= .3;
@ -542,7 +542,7 @@ Class HellblazerWarhead : HellblazerMissile
A_SetRenderStyle(1.0,STYLE_Add);
A_SprayDecal("WumboRocketBlast",150);
A_SetScale(7.);
SWWMUtility.DoExplosion(self,2000,600000,400,200);
SWWMUtility.DoExplosion(self,1500,600000,400,200);
A_NoGravity();
A_QuakeEx(9,9,9,150,0,12000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:4000,rollIntensity:2.);
A_StopSound(CHAN_BODY);
@ -556,7 +556,7 @@ Class HellblazerWarhead : HellblazerMissile
Vector3 pvel = (FRandom[Hellblazer](-1,1),FRandom[Hellblazer](-1,1),FRandom[Hellblazer](-1,1)).unit()*FRandom[Hellblazer](4,20);
let s = Spawn("SWWMSmoke",pos);
s.vel = pvel;
s.SetShade(Color(3,2,4)*Random[Hellblazer](48,63));
s.SetShade(Color(4,2,1)*Random[Hellblazer](48,63));
s.special1 = Random[Hellblazer](3,8);
s.scale *= 4.;
s.alpha *= .4;
@ -621,9 +621,9 @@ Class HellblazerWarhead : HellblazerMissile
}
}
special2++;
if ( (special2 <= 9) && !(special2%3) )
if ( (special2 <= 15) && !(special2%3) )
{
int numpt = 5-special2/2;
int numpt = 5-special2/5;
for ( int i=0; i<numpt; i++ )
{
double ang = FRandom[Hellblazer](0,360);
@ -833,7 +833,7 @@ Class HellblazerClusterMini : HellblazerMissile2
A_SetRenderStyle(1.0,STYLE_Add);
A_SprayDecal("BigRocketBlast",50);
A_SetScale(2.5);
SWWMUtility.DoExplosion(self,80,200000,150,60);
SWWMUtility.DoExplosion(self,50,200000,150,60);
A_NoGravity();
A_QuakeEx(4,4,4,12,0,1000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:400,rollIntensity:.6);
A_StopSound(CHAN_BODY);
@ -847,7 +847,7 @@ Class HellblazerClusterMini : HellblazerMissile2
Vector3 pvel = (FRandom[Hellblazer](-1,1),FRandom[Hellblazer](-1,1),FRandom[Hellblazer](-1,1)).unit()*FRandom[Hellblazer](1,5);
let s = Spawn("SWWMSmoke",pos);
s.vel = pvel;
s.SetShade(Color(2,4,2)*Random[Hellblazer](48,63));
s.SetShade(Color(4,2,1)*Random[Hellblazer](48,63));
s.special1 = Random[Hellblazer](1,3);
s.scale *= 1.5;
s.alpha *= .4;
@ -953,7 +953,7 @@ Class RavagerLight : PaletteLight
Default
{
Tag "DRed";
Args 0,0,0,400;
Args 0,0,0,250;
}
}
@ -965,7 +965,7 @@ Class RavagerPuff : Actor
{
RenderStyle "Add";
Scale .8;
Alpha .3;
Alpha .7;
+NOGRAVITY;
+NOBLOCKMAP;
+DONTSPLASH;
@ -1100,7 +1100,6 @@ Class HellblazerRavagerArm : Actor
TNT1 A 1
{
if ( waterlevel > 0 ) ReactionTime -= 2;
A_CountDown();
let p = Spawn("RavagerPuff",pos);
p.alpha *= .6+.4*(ReactionTime/20.);
p.scale *= 3.5-2.5*(ReactionTime/20.);
@ -1112,7 +1111,7 @@ Class HellblazerRavagerArm : Actor
l.target = p;
}
if ( !(ReactionTime%1) )
SWWMUtility.DoExplosion(self,4+reactiontime*2,1000+200*reactiontime,250-6*reactiontime);
SWWMUtility.DoExplosion(self,1+reactiontime/2,1000+200*reactiontime,250-6*reactiontime);
double spd = vel.length();
vel = (vel*.4+(FRandom[ExploS](-.2,.2),FRandom[ExploS](-.2,.2),FRandom[ExploS](-.2,.2))).unit()*spd;
Vector3 pvel = (FRandom[ExploS](-1,1),FRandom[ExploS](-1,1),FRandom[ExploS](-1,1)).unit()*FRandom[ExploS](1,5);
@ -1120,7 +1119,7 @@ Class HellblazerRavagerArm : Actor
{
let s = Spawn("SWWMHalfSmoke",pos);
s.vel = pvel+vel*.2;
s.SetShade(Color(4,2,2)*Random[ExploS](48,63));
s.SetShade(Color(4,2,1)*Random[ExploS](48,63));
s.special1 = Random[ExploS](2,4);
s.scale *= 3.2;
s.alpha *= .1+.2*(ReactionTime/20.);
@ -1133,6 +1132,7 @@ Class HellblazerRavagerArm : Actor
s2.vel = pvel;
}
}
A_CountDown();
}
Wait;
Bounce:
@ -1186,7 +1186,7 @@ Class HellblazerWarheadArm : Actor
+NODAMAGETHRUST;
+FORCERADIUSDMG;
-NOGRAVITY;
Gravity 0.25;
Gravity 0.35;
BounceFactor 1.0;
Radius 4;
Height 4;
@ -1205,16 +1205,16 @@ Class HellblazerWarheadArm : Actor
Spawn:
TNT1 A 1
{
A_CountDown();
Spawn("HellblazerWarheadTrail",pos);
SWWMUtility.DoExplosion(self,30+reactiontime*5,3000+500*reactiontime,120+3*reactiontime);
SWWMUtility.DoExplosion(self,20+reactiontime*4,3000+500*reactiontime,120+3*reactiontime);
Vector3 pvel = (FRandom[ExploS](-1,1),FRandom[ExploS](-1,1),FRandom[ExploS](-1,1)).unit()*FRandom[ExploS](1,5);
let s = Spawn("SWWMHalfSmoke",pos);
s.vel = pvel+vel*.2;
s.SetShade(Color(4,3,2)*Random[ExploS](48,63));
s.SetShade(Color(4,2,1)*Random[ExploS](48,63));
s.special1 = Random[ExploS](1,3);
s.scale *= 6.;
s.alpha *= 0.1+.4*(ReactionTime/15.);
A_CountDown();
}
Wait;
}
@ -1242,7 +1242,7 @@ Class HellblazerXSub : GhostArtifactX
void UpdateMe()
{
static const Class<Ammo> types[] = {"HellblazerMissiles","HellblazerCrackshots","HellblazerRavagers","HellblazerWarheads"};
int curtype = 0;
int curtype = -1;
for ( int i=0; i<4; i++ )
{
if ( weap.loadammo != types[i] ) continue;
@ -1281,6 +1281,12 @@ Class HellblazerXSub : GhostArtifactX
if ( (ridx > 1) || weap.magstate[ridx] ) SetState(SpawnState);
else SetState(SpawnState+sofs[3]+idx);
break;
default:
// uninitialized pickup (3 blazers)
idx = ridx;
if ( idx > 2 ) SetState(SpawnState);
else SetState(SpawnState+sofs[0]+idx);
break;
}
}
States
@ -1509,7 +1515,15 @@ Class Hellblazer : SWWMWeapon
override void AttachToOwner( Actor other )
{
Super.AttachToOwner(other);
if ( !loadammo ) loadammo = "HellblazerMissiles";
if ( !loadammo )
{
// 3 hellblazer missiles loaded
loadammo = "HellblazerMissiles";
clipcount = 3;
magpos = 0;
for ( int i=0; i<6; i++ )
magstate[i] = (i>2);
}
nextammo = loadammo;
}
@ -1679,7 +1693,7 @@ Class Hellblazer : SWWMWeapon
Weapon.UpSound "hellblazer/select";
Stamina 90000;
Weapon.AmmoType1 "HellblazerMissiles";
Weapon.AmmoGive1 6;
Weapon.AmmoGive1 3;
//SWWMWeapon.SwapWeapon "Quadravol";
SWWMWeapon.DropAmmoType "RocketAmmo";
Hellblazer.ClipCount 6;

View file

@ -191,7 +191,7 @@ Class mkBloodDrop : Actor
double ang = atan2(dir.y,dir.x);
double pt = asin(-dir.z);
LineTrace(ang,spd,pt,TRF_THRUACTORS|TRF_THRUHITSCAN,data:d);
if ( d.HitType == TRACE_HitFloor )
if ( (d.HitType == TRACE_HitFloor) || (pos.z <= floorz) )
{
if ( d.HitTexture == skyflatnum )
{
@ -220,6 +220,8 @@ Class mkBloodDrop : Actor
}
else
{
// hacky workaround
if ( !d.HitSector ) d.HitSector = floorsector;
tracksector = d.HitSector;
trackplane = 0;
}

View file

@ -1179,6 +1179,7 @@ Class Wallbuster : SWWMWeapon
p.angle = atan2(hitnormal.y,hitnormal.x);
p.pitch = asin(-hitnormal.z);
p.special1 = max(0,(bc-5)/4);
if ( t.Results.HitType == TRACE_HitFloor ) p.CheckSplash(40);
}
}
override Vector3 GetTraceOffset()
@ -1251,7 +1252,7 @@ Class Wallbuster : SWWMWeapon
break;
}
double rfact = invoker.cbtmuffler.GetBool()?.85:.6;
A_StartSound(sounds[which],CHAN_WEAPON,CHANF_OVERLAP,1./(howmany**rfact),.6-howmany*.004,1.-howmany*.012);
A_StartSound(sounds[which],CHAN_WEAPON,CHANF_OVERLAP,1./(howmany**rfact),.6-howmany*.004,1.-howmany*.015);
if ( which == 0 ) redflashstr = max(120,redflashstr+10);
else if ( which == 1 ) redflashstr = max(90,redflashstr+8);
else if ( which == 2 ) blueflashstr = max(160,blueflashstr+10);
@ -1324,7 +1325,7 @@ Class Wallbuster : SWWMWeapon
// slug
if ( !sst ) sst = new("SpreadSlugTracer");
sst.ignoreme = self;
sst.penetration = 275.;
sst.penetration = 150.;
a = FRandom[Wallbuster](0,360);
s = FRandom[Wallbuster](0,.002);
dir = (x2+y2*cos(a)*s+z2*sin(a)*s).unit();
@ -1438,9 +1439,9 @@ Class Wallbuster : SWWMWeapon
// buckshot
if ( !st ) st = new("SpreadgunTracer");
st.ignoreme = self;
// attempt to uniformize expected damage
int expecteddmg = 200;
int numshot = 31-howmany;
// attempt to uniformize expected damage while reducing traces (mainly for performance)
int expecteddmg = 120;
int numshot = max(21-howmany,5);
int individualdmg = int(ceil(expecteddmg/double(numshot)));
for ( int j=0; j<numshot; j++ )
{

View file

@ -119,7 +119,7 @@ Class EvisceratorChunk : Actor
Radius 2;
Height 2;
Speed 50;
DamageFunction int(clamp((vel.length()-6)*.15+max(0,1.-lifetime)*3.,0,10));
DamageFunction int(clamp((vel.length()-5)*.12+max(0,1.-lifetime)*2.,0,8));
DamageType 'shot';
BounceFactor 1.0;
WallBounceFactor 1.0;
@ -411,7 +411,7 @@ Class EvisceratorProj : Actor
A_SprayDecal("BigRocketBlast",50);
A_NoGravity();
A_SetScale(3.5);
SWWMUtility.DoExplosion(self,150,120000,200,80);
SWWMUtility.DoExplosion(self,80,120000,200,80);
A_QuakeEx(6,6,6,20,0,1200,"",QF_RELATIVE|QF_SCALEDOWN,falloff:300,rollIntensity:.7);
A_StartSound("eviscerator/shell",CHAN_WEAPON,attenuation:.5);
A_StartSound("eviscerator/shell",CHAN_VOICE,attenuation:.3);
@ -432,7 +432,7 @@ Class EvisceratorProj : Actor
if ( !SWWMUtility.PointOnLineSide(pos.xy,BlockingLine) )
spawnofs *= -1;
}
for ( int i=0; i<40; i++ )
for ( int i=0; i<30; i++ )
{
p = Spawn("EvisceratorChunk",level.Vec3Offset(pos,spawnofs));
p.bHITOWNER = true;
@ -441,7 +441,7 @@ Class EvisceratorProj : Actor
Vector3 dir = (x+y*cos(a)*s+z*sin(a)*s).unit();
p.angle = atan2(dir.y,dir.x);
p.pitch = -asin(dir.z);
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*(p.speed+FRandom[Eviscerator](-5,15));
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*(p.speed+FRandom[Eviscerator](-5,20));
p.target = target;
}
int numpt = Random[Eviscerator](8,12);
@ -659,16 +659,18 @@ Class Eviscerator : SWWMWeapon
return;
}
loadtics++;
if ( (loadtics == 9) && Owner && Owner.player && (Owner.player.ReadyWeapon == self) )
{
if ( (loadtics == 15) && Owner && Owner.player && (Owner.player.ReadyWeapon == self) )
Owner.A_StartSound("eviscerator/load",CHAN_WEAPON,CHANF_OVERLAP);
}
if ( loadtics > 20 )
{
if ( (loadtics == 25) && !sv_infiniteammo && !Owner.FindInventory('PowerInfiniteAmmo',true) )
Ammo1.Amount = max(0,Ammo1.Amount-1);
if ( loadtics == 30 )
pendingload = false;
if ( !sv_infiniteammo && !Owner.FindInventory('PowerInfiniteAmmo',true) )
Ammo1.Amount = max(0,Ammo1.Amount-1);
}
}
action void A_StartLoad( int delay = 0 )
{
invoker.pendingload = true;
invoker.loadtics = -delay;
}
override Vector3 GetTraceOffset()
@ -695,7 +697,7 @@ Class Eviscerator : SWWMWeapon
SWWMUtility.DoKnockback(self,-x,25000.);
[x2, y2, z2] = swwm_CoordUtil.GetAxes(BulletSlope(),angle,roll);
origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),10*x+4*y-5*z);
for ( int i=0; i<40; i++ )
for ( int i=0; i<30; i++ )
{
a = FRandom[Eviscerator](0,360);
s = FRandom[Eviscerator](0,invoker.extended?.06:.3);
@ -705,6 +707,7 @@ Class Eviscerator : SWWMWeapon
p.angle = atan2(dir.y,dir.x);
p.pitch = asin(-dir.z);
p.vel = dir*p.speed*FRandom[Eviscerator](.9,1.1);
if ( invoker.extended ) p.vel *= 1.25;
}
for ( int i=0; i<4; i++ )
{
@ -902,7 +905,7 @@ Class Eviscerator : SWWMWeapon
XZW4 C 1
{
A_StartSound("eviscerator/ejectend",CHAN_WEAPON,CHANF_OVERLAP);
invoker.pendingload = true;
A_StartLoad();
}
XZW4 DEF 1;
XZW4 GHI 2;
@ -917,7 +920,7 @@ Class Eviscerator : SWWMWeapon
XZW7 B 1
{
A_StartSound("eviscerator/ejectend",CHAN_WEAPON,CHANF_OVERLAP);
invoker.pendingload = true;
A_StartLoad();
}
XZW7 CDE 1;
XZW7 FGH 2;
@ -942,7 +945,7 @@ Class Eviscerator : SWWMWeapon
XZW2 STUVW 1;
XZW2 XYZ 2;
XZW3 ABCD 2;
XZW2 A 1 { invoker.pendingload = true; }
XZW2 A 1 A_StartLoad(5);
Goto Ready;
AltFireExt:
XZW4 Z 2;
@ -950,7 +953,7 @@ Class Eviscerator : SWWMWeapon
XZW5 WXY 2;
XZW5 Z 2;
XZW6 ABC 2;
XZW4 Z 1 { invoker.pendingload = true; }
XZW4 Z 1 A_StartLoad(5);
Goto ReadyExt;
Zoom:
XZW2 A 2

View file

@ -2228,7 +2228,7 @@ Class SWWMHandler : EventHandler
else if ( e.Replacee is 'MWeaponPiece1' ) e.Replacement = 'Ynykron';
else if ( (e.Replacee == 'Clip') || (e.Replacee == 'GoldWandAmmo') || (e.Replacee == 'GoldWandHefty') )
{
switch( Random[Replacements](0,14) )
switch( Random[Replacements](0,12) )
{
case 0:
case 1:
@ -2240,10 +2240,6 @@ Class SWWMHandler : EventHandler
case 6:
e.Replacement = greenpool[Random[Replacements](0,1)];
break;
case 7:
case 8:
e.Replacement = purplepool[0];
break;
default:
e.Replacement = 'SWWMNothing';
break;
@ -2288,7 +2284,7 @@ Class SWWMHandler : EventHandler
case 0:
case 1:
case 2:
e.Replacement = redpool[Random[Replacements](1,3)];
e.Replacement = redpool[Random[Replacements](1,2)];
break;
case 3:
case 4:
@ -2314,9 +2310,9 @@ Class SWWMHandler : EventHandler
break;
}
}
else if ( e.Replacee == 'ClipBox' ) e.Replacement = Random[Replacements](0,3)?'EvisceratorShell':Random[Replacements](0,4)?'EvisceratorTrioSpawn':'EvisceratorSixPack';
else if ( e.Replacee == 'ClipBox' ) e.Replacement = Random[Replacements](0,4)?'EvisceratorShell':Random[Replacements](0,6)?'EvisceratorTrioSpawn':'EvisceratorSixPack';
else if ( e.Replacee == 'BlasterAmmo' ) e.Replacement = 'EvisceratorShell';
else if ( e.Replacee == 'BlasterHefty' ) e.Replacement = Random[Replacements](0,4)?'EvisceratorTrioSpawn':'EvisceratorSixPack';
else if ( e.Replacee == 'BlasterHefty' ) e.Replacement = Random[Replacements](0,6)?'EvisceratorTrioSpawn':'EvisceratorSixPack';
else if ( (e.Replacee == 'RocketAmmo') || (e.Replacee == 'PhoenixRodAmmo') || (e.Replacee == 'MaceAmmo') ) e.Replacement = Random[Replacements](0,2)?'HellblazerMissiles':'HellblazerCrackshots';
else if ( (e.Replacee == 'RocketBox') || (e.Replacee == 'PhoenixRodHefty') || (e.Replacee == 'MaceHefty') )
{
@ -2327,15 +2323,15 @@ Class SWWMHandler : EventHandler
case 2:
case 3:
case 4:
if ( Random[Replacements](0,3) ) e.Replacement = 'HellblazerMissiles';
else if ( Random[Replacements](0,2) ) e.Replacement = 'HellblazerMissileTrioSpawn';
if ( Random[Replacements](0,5) ) e.Replacement = 'HellblazerMissiles';
else if ( Random[Replacements](0,4) ) e.Replacement = 'HellblazerMissileTrioSpawn';
else e.Replacement = 'HellblazerMissileMag';
break;
case 5:
case 6:
case 7:
case 8:
if ( Random[Replacements](0,4) ) e.Replacement = 'HellblazerCrackshots';
if ( Random[Replacements](0,6) ) e.Replacement = 'HellblazerCrackshots';
else e.Replacement = 'HellblazerCrackshotMag';
break;
case 9:

View file

@ -162,8 +162,10 @@ Class RefresherItem : SWWMHealth
SWWMLoreLibrary.Add(other.player,"Refresher");
return Super.CreateCopy(other);
}
override void AutoUseExtra()
override void AutoUseExtra( bool recursive )
{
// regen effect doesn't stack if we autoactivated recursively
if ( recursive ) return;
let p = Powerup(Owner.FindInventory("RefresherRegen"));
if ( p ) p.EffectTics += p.default.EffectTics;
else Owner.GiveInventory("RefresherRegen",1);

View file

@ -332,11 +332,11 @@ Class SWWMHealth : Inventory abstract
SWWMHandler.HealthFlash(Owner.PlayerNumber());
Owner.GiveInventory(giveme,GetDefaultByType(giveme).Amount);
SWWMScoreObj.Spawn(GetDefaultByType(giveme).Amount,Owner.Vec3Offset(FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8)+Owner.Height/2),Font.CR_BLUE);
AutoUseExtra();
AutoUseExtra(false);
return true;
}
virtual void AutoUseExtra()
virtual void AutoUseExtra( bool recursive )
{
}
@ -374,6 +374,7 @@ Class SWWMHealth : Inventory abstract
if ( ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA);
int tgive = 0;
bool acc = CVar.GetCVar('swwm_accdamage',players[consoleplayer]).GetBool();
bool morethanonce = false;
while ( (Amount > 0) && (newdamage > 0) )
{
if ( acc ) tgive += GetDefaultByType(giveme).Amount;
@ -381,7 +382,8 @@ Class SWWMHealth : Inventory abstract
newdamage = newdamage-GetDefaultByType(giveme).Amount;
if ( newdamage < 0 ) Owner.GiveBody(-newdamage,GetDefaultByType(giveme).MaxAmount);
newdamage = max(0,newdamage);
AutoUseExtra();
AutoUseExtra(morethanonce);
morethanonce = true;
Amount--;
}
if ( acc ) SWWMScoreObj.Spawn(tgive,Owner.Vec3Offset(FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8),FRandom[ScoreBits](-8,8)+Owner.Height/2),Font.CR_BLUE);
@ -585,7 +587,6 @@ Class PunchImpact : Actor
Height 0;
+NOGRAVITY;
+NOCLIP;
+DONTSPLASH;
+NOTELEPORT;
+NOINTERACTION;
}
@ -656,7 +657,6 @@ Class BigPunchImpact : Actor
Height 0;
+NOGRAVITY;
+NOCLIP;
+DONTSPLASH;
+NOTELEPORT;
+NOINTERACTION;
}
@ -1450,6 +1450,7 @@ Class SWWMWeapon : Weapon abstract
let p = Spawn(raging?"BigPunchImpact":"PunchImpact",d.HitLocation+HitNormal*4);
p.angle = atan2(HitNormal.y,HitNormal.x);
p.pitch = asin(-HitNormal.z);
if ( d.HitType == TRACE_HitFloor ) p.CheckSplash(40);
if ( raging )
{
let ps = Spawn("BigPunchSplash",d.HitLocation+HitNormal*4);

View file

@ -9,7 +9,6 @@ Class PusherImpact : Actor
Height 0;
+NOGRAVITY;
+NOCLIP;
+DONTSPLASH;
+NOTELEPORT;
+NOINTERACTION;
}
@ -54,7 +53,6 @@ Class BigPusherImpact : Actor
Height 0;
+NOGRAVITY;
+NOCLIP;
+DONTSPLASH;
+NOTELEPORT;
+NOINTERACTION;
}
@ -104,7 +102,7 @@ Class PusherProjectile : Actor
Speed 50;
Radius 10;
Height 10;
DamageFunction int(6*vel.length());
DamageFunction clamp(int(3*vel.length()),0,150);
DamageType 'Tenderize';
BounceType "Hexen";
BounceFactor 1.0;
@ -415,7 +413,7 @@ Class PusherWeapon : SWWMWeapon
action void A_PusherDrill()
{
invoker.chargelevel = clamp(invoker.chargelevel+FRandom[Pusher](-.1,.2),.3,1.);
invoker.chargelevel = clamp(invoker.chargelevel+FRandom[Pusher](-.04,.08),.3,1.);
A_QuakeEx(1,1,1,3,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:.5);
A_WeaponOffset(FRandom[Pusher](-1,1)*2,32+FRandom[Pusher](-1,1)*2);
A_ZoomFactor(1.01,ZOOM_INSTANT);
@ -430,7 +428,7 @@ Class PusherWeapon : SWWMWeapon
{
A_QuakeEx(2,2,2,7,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:.8);
A_AlertMonsters(swwm_uncapalert?0:1200);
int dmg = int(5+invoker.chargelevel*3);
int dmg = int(3+invoker.chargelevel*3);
if ( d.HitType == TRACE_HitActor )
{
double diff = deltaangle(self.angle,AngleTo(d.HitActor));
@ -476,9 +474,12 @@ Class PusherWeapon : SWWMWeapon
let p = Spawn("PusherImpact",d.HitLocation+HitNormal*4);
p.angle = atan2(HitNormal.y,HitNormal.x);
p.pitch = asin(-HitNormal.z);
if ( d.HitType == TRACE_HitFloor ) p.CheckSplash(40);
if ( waterlevel > 2 ) SWWMUtility.DoKnockback(self,-x,30000);
}
if ( swwm_omnibust ) BusterWall.BustLinetrace(d,dmg,self,d.HitDir,d.HitLocation.z);
}
else if ( waterlevel > 2 ) SWWMUtility.DoKnockback(self,-x,18000);
if ( swwm_extraalert || !(invoker.hitcnt%20) ) A_AlertMonsters(swwm_uncapalert?0:500);
invoker.hitcnt++;
}
@ -507,7 +508,7 @@ Class PusherWeapon : SWWMWeapon
{
A_QuakeEx(8,8,8,12,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:.8);
A_AlertMonsters(swwm_uncapalert?0:1600);
int dmg = int(300*invoker.chargelevel);
int dmg = int(150*invoker.chargelevel);
if ( d.HitType == TRACE_HitActor )
{
double diff = deltaangle(self.angle,AngleTo(d.HitActor));
@ -550,6 +551,7 @@ Class PusherWeapon : SWWMWeapon
let p = Spawn("BigPusherImpact",d.HitLocation+HitNormal*4);
p.angle = atan2(HitNormal.y,HitNormal.x);
p.pitch = asin(-HitNormal.z);
if ( d.HitType == TRACE_HitFloor ) p.CheckSplash(40);
}
if ( swwm_omnibust ) BusterWall.BustLinetrace(d,dmg,self,d.HitDir,d.HitLocation.z);
}
@ -580,7 +582,7 @@ Class PusherWeapon : SWWMWeapon
action void A_ChargeUp()
{
invoker.chargelevel = min(1.,invoker.chargelevel+.035);
invoker.chargelevel = min(1.,invoker.chargelevel+.025);
if ( invoker.chargelevel >= .5 ) invoker.vibe = min(1.,invoker.vibe+.02);
A_WeaponOffset(FRandom[Pusher](-1,1)*(invoker.chargelevel-invoker.vibe),32+FRandom[Pusher](-1,1)*(invoker.chargelevel-invoker.vibe));
if ( !(player.cmd.buttons&BT_ALTATTACK) && (invoker.chargelevel > .3) )

View file

@ -2990,6 +2990,7 @@ Class LoveHeart : Actor
}
A_SetRenderStyle(1.,STYLE_Add);
//A_RemoveLight('LOVELIGHT');
CheckSplash(40);
A_QuakeEx(2,2,2,8,0,300,"",QF_RELATIVE|QF_SCALEDOWN);
A_StartSound("bestsound",CHAN_VOICE);
Spawn("LoveHeartBurstLight",pos);

View file

@ -69,7 +69,7 @@ Class GrilledCheeseSandwich : Inventory
override bool Use( bool pickup )
{
if ( pickup && !deathmatch ) return false;
if ( Owner.Health >= 1000 ) return false;
if ( Owner.Health > 500 ) return false;
if ( pickup && ((Owner.player == players[consoleplayer]) || bBigPowerup) ) Owner.A_StartSound(UseSound,CHAN_ITEMEXTRA);
DoTheThing();
return true;

View file

@ -149,7 +149,6 @@ Class SpreadImpact : Actor
Height 0;
+NOGRAVITY;
+NOCLIP;
+DONTSPLASH;
+NOTELEPORT;
+NOINTERACTION;
}
@ -196,7 +195,6 @@ Class SlugImpact : Actor
Height 0;
+NOGRAVITY;
+NOCLIP;
+DONTSPLASH;
+NOTELEPORT;
+NOINTERACTION;
}
@ -377,12 +375,11 @@ Class DragonBreathArm : Actor
TNT1 A 1
{
if ( waterlevel > 0 ) ReactionTime -= 2;
A_CountDown();
let p = Spawn("DragonBreathPuff",pos);
p.alpha *= .6+.4*(ReactionTime/20.);
p.scale *= 3.5-2.5*(ReactionTime/20.);
if ( !(ReactionTime%2) )
SWWMUtility.DoExplosion(self,1+(reactiontime*2),1000+200*reactiontime,150-6*reactiontime,flags:DE_HOWL,ignoreme:bHITOWNER?null:target);
SWWMUtility.DoExplosion(self,1+(reactiontime/2),1000+200*reactiontime,150-6*reactiontime,flags:DE_HOWL,ignoreme:bHITOWNER?null:target);
double spd = vel.length();
vel = (vel*.4+(FRandom[ExploS](-.2,.2),FRandom[ExploS](-.2,.2),FRandom[ExploS](-.2,.2))).unit()*spd;
Vector3 pvel = (FRandom[ExploS](-1,1),FRandom[ExploS](-1,1),FRandom[ExploS](-1,1)).unit()*FRandom[ExploS](1,5);
@ -403,6 +400,7 @@ Class DragonBreathArm : Actor
s2.vel = pvel;
}
}
A_CountDown();
}
Wait;
Bounce:
@ -498,7 +496,7 @@ Class SaltImpact : Actor
{
Super.PostBeginPlay();
A_AlertMonsters(swwm_uncapalert?0:6000);
SWWMUtility.DoExplosion(self,25+special2*5,15000,100,40);
SWWMUtility.DoExplosion(self,12+special2*4,15000,100,40);
A_QuakeEx(3,3,3,10,0,250,"",QF_RELATIVE|QF_SCALEDOWN,falloff:150,rollintensity:0.2);
A_StartSound("spreadgun/salt",CHAN_VOICE,attenuation:.35);
A_SprayDecal("ShockMarkSmall",-172);
@ -620,7 +618,7 @@ Class SaltBeam : Actor
if ( t.Results.HitType == TRACE_HitActor )
{
SWWMUtility.DoKnockback(t.Results.HitActor,x,25000);
t.Results.HitActor.DamageMobj(self,target,60+Accuracy*5,'Salt',DMG_THRUSTLESS);
t.Results.HitActor.DamageMobj(self,target,20+Accuracy*4,'Salt',DMG_THRUSTLESS);
if ( t.Results.HitActor && t.Results.HitActor.bIsMonster && !Random[Spreadgun](0,3) )
t.Results.HitActor.Howl();
}
@ -691,7 +689,7 @@ Class SaltBeam : Actor
if ( isFrozen() ) return;
A_FadeOut(.04);
if ( Random[Spreadgun](-2,args[2]/10) == 0 )
SWWMUtility.DoExplosion(self,5+Accuracy,5000,32,flags:DE_HOWL,ignoreme:target);
SWWMUtility.DoExplosion(self,4+Accuracy,5000,32,flags:DE_HOWL,ignoreme:target);
if ( ((special2%4) || args[2]) && !special1 ) SpreadOut();
args[2]++;
if ( !CheckNoDelay() || (tics == -1) ) return;
@ -875,7 +873,7 @@ Class OnFire : Actor
{
int flg = DMG_THRUSTLESS;
if ( victim is 'Centaur' ) flg |= DMG_FOILINVUL; // you're on fire, that shield is worthless
victim.DamageMobj(self,instigator,clamp(int(amount*.1),1,30),'Fire',flg); // need to use this actor as inflictor to have a proper obituary
victim.DamageMobj(self,instigator,clamp(int(amount*.06),1,20),'Fire',flg); // need to use this actor as inflictor to have a proper obituary
if ( victim.bISMONSTER && !Random[FlameT](0,3) )
victim.Howl();
}
@ -1343,7 +1341,7 @@ Class TheBall : Actor
double girth = (victim.radius+victim.height)/2.*max(50,victim.mass)*(victim.health/double(victim.GetSpawnHealth()));
// how hard this damn thing is going to slam
double slamforce = vel.length()*350.+heat*120;
int dmg = int(vel.length()*4.2+heat*80);
int dmg = int(vel.length()*4.+heat*40);
bool is_schutt = victim.bSHOOTABLE;
// critical hit!
bool crit = false;
@ -1592,7 +1590,7 @@ Class GoldenImpact : Actor
{
Super.PostBeginPlay();
A_AlertMonsters(swwm_uncapalert?0:40000);
SWWMUtility.DoExplosion(self,7777,40000,600,500,DE_EXTRAZTHRUST);
SWWMUtility.DoExplosion(self,777,40000,600,500,DE_EXTRAZTHRUST);
A_QuakeEx(9,9,9,40,0,5000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:500,rollintensity:1.5);
A_StartSound("spreadgun/goldexpl",CHAN_VOICE,attenuation:.3);
A_StartSound("spreadgun/goldexpl",CHAN_WEAPON,attenuation:.15);
@ -1730,7 +1728,7 @@ Class GoldenSubImpact : Actor
override void PostBeginPlay()
{
Super.PostBeginPlay();
SWWMUtility.DoExplosion(self,777,30000,400,300,DE_EXTRAZTHRUST);
SWWMUtility.DoExplosion(self,77,30000,400,300,DE_EXTRAZTHRUST);
A_QuakeEx(7,7,7,20,0,2000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:200,rollintensity:.8);
A_SprayDecal("BigRocketBlast",-172);
Scale *= FRandom[ExploS](0.8,1.1);
@ -1866,7 +1864,7 @@ Class GoldenSubSubImpact : Actor
override void PostBeginPlay()
{
Super.PostBeginPlay();
SWWMUtility.DoExplosion(self,77,20000,200,100,DE_EXTRAZTHRUST);
SWWMUtility.DoExplosion(self,7,20000,200,100,DE_EXTRAZTHRUST);
A_QuakeEx(4,4,4,15,0,1000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:100,rollintensity:.4);
A_SprayDecal("RocketBlast",-172);
Scale *= FRandom[ExploS](0.8,1.1);
@ -2140,6 +2138,7 @@ Class Spreadgun : SWWMWeapon
let p = Spawn(impact,t.Results.HitPos+hitnormal*4);
p.angle = atan2(hitnormal.y,hitnormal.x);
p.pitch = asin(-hitnormal.z);
if ( t.Results.HitType == TRACE_HitFloor ) p.CheckSplash(40);
if ( t.Results.HitLine ) t.Results.HitLine.RemoteActivate(self,t.Results.Side,SPAC_Impact,t.Results.HitPos);
}
}
@ -2182,7 +2181,7 @@ Class Spreadgun : SWWMWeapon
case 1:
sst = new("SpreadSlugTracer");
sst.ignoreme = self;
sst.penetration = 250.;
sst.penetration = 120.;
a = FRandom[Spreadgun](0,360);
s = FRandom[Spreadgun](0,.01);
dir = (x2+y2*cos(a)*s+z2*sin(a)*s).unit();
@ -2429,7 +2428,7 @@ Class Spreadgun : SWWMWeapon
default:
st = new("SpreadgunTracer");
st.ignoreme = self;
for ( int j=0; j<30; j++ )
for ( int j=0; j<20; j++ )
{
a = FRandom[Spreadgun](0,360);
s = FRandom[Spreadgun](0,.22);
@ -2438,7 +2437,7 @@ Class Spreadgun : SWWMWeapon
st.shootthroughlist.Clear();
st.waterhitlist.Clear();
st.Trace(origin,level.PointInSector(origin.xy),dir,8000.,TRACE_HitSky);
ProcessTraceHit(st,origin,dir,6,7000,bc:5);
ProcessTraceHit(st,origin,dir,5,7000,bc:5);
}
for ( int i=0; i<9; i++ )
{

View file

@ -1205,7 +1205,7 @@ Class BiosparkBeam : Actor
if ( frame ) c.SetStateLabel("TrailSpawn");
c.roll = Random[Sparkster](0,7)*45;
Vector3 tdir = level.Vec3Diff(pos,invoker.nextpos);
int numpt = Random[Sparkster](-1,6);
int numpt = Random[Sparkster](-1,4);
for ( int i=0; i<numpt; i++ )
{
let a = Spawn("BiosparkArc",level.Vec3Offset(pos,tdir*FRandom[Sparkster](frame?0:.3,1)));
@ -1297,7 +1297,7 @@ Class BiosparkBeam : Actor
{
Obituary "$O_SPARKSTER";
RenderStyle "Add";
DamageFunction 15;
DamageFunction 10;
Speed 256;
Radius .1;
Height 0;

View file

@ -62,9 +62,9 @@ Class ExplodiumMagArm : Actor
Spawn:
TNT1 A 1
{
A_CountDown();
Spawn("ExplodiumMagTrail",pos);
SWWMUtility.DoExplosion(self,2+reactiontime/3,3000+500*reactiontime,40+3*reactiontime,20);
if ( !(ReactionTime%2) )
SWWMUtility.DoExplosion(self,1+reactiontime/4,3000+500*reactiontime,40+3*reactiontime,20);
Vector3 pvel = (FRandom[ExploS](-1,1),FRandom[ExploS](-1,1),FRandom[ExploS](-1,1)).unit()*FRandom[ExploS](1,5);
let s = Spawn("SWWMHalfSmoke",pos);
s.vel = pvel+vel*.2;
@ -72,6 +72,7 @@ Class ExplodiumMagArm : Actor
s.special1 = Random[ExploS](1,3);
s.scale *= 2.4;
s.alpha *= 0.1+.4*(ReactionTime/15.);
A_CountDown();
}
Wait;
}
@ -144,7 +145,7 @@ Class ExplodiumMagProj : Actor
A_SetRenderStyle(1.,STYLE_Add);
Scale *= 2.+.2*special1;
A_AlertMonsters(swwm_uncapalert?0:6000);
SWWMUtility.DoExplosion(self,20+15*special1,80000+8000*special1,90+10*special1,60,DE_EXTRAZTHRUST);
SWWMUtility.DoExplosion(self,30+10*special1,80000+8000*special1,90+10*special1,60,DE_EXTRAZTHRUST);
A_QuakeEx(9,9,9,30,0,400+80*special1,"",QF_RELATIVE|QF_SCALEDOWN,falloff:300,rollintensity:2.);
A_StartSound("explodium/maghit",CHAN_VOICE,attenuation:.35);
A_StartSound("explodium/maghit",CHAN_WEAPON,attenuation:.2);
@ -395,7 +396,9 @@ Class ExplodiumGun : SWWMWeapon
SWWMBulletTrail.DoTrail(self,origin,dir,10000,2);
if ( d.HitType == TRACE_HitActor )
{
int dmg = 25;
int dmg = 10;
// might as well apply explosion on top
if ( dmg >= d.HitActor.Health ) dmg += 25;
SWWMUtility.DoKnockback(d.HitActor,d.HitDir,48000);
dmg = d.HitActor.DamageMobj(invoker,self,dmg,'Explodium',DMG_USEANGLE|DMG_THRUSTLESS,atan2(d.HitDir.y,d.HitDir.x));
if ( d.HitActor.bNOBLOOD || d.HitActor.bDORMANT || d.HitActor.bINVULNERABLE )
@ -815,7 +818,9 @@ Class DualExplodiumGun : SWWMWeapon
SWWMBulletTrail.DoTrail(self,origin,dir,10000,2);
if ( d.HitType == TRACE_HitActor )
{
int dmg = 25;
int dmg = 10;
// might as well apply explosion on top
if ( dmg >= d.HitActor.Health ) dmg += 25;
SWWMUtility.DoKnockback(d.HitActor,d.HitDir,48000);
dmg = d.HitActor.DamageMobj(invoker,self,dmg,'Explodium',DMG_USEANGLE|DMG_THRUSTLESS,atan2(d.HitDir.y,d.HitDir.x));
if ( d.HitActor.bNOBLOOD || d.HitActor.bDORMANT || d.HitActor.bINVULNERABLE )

View file

@ -375,7 +375,7 @@ Class CandyMagArm : Actor
{
A_CountDown();
Spawn("CandyMagTrail",pos);
SWWMUtility.DoExplosion(self,100+reactiontime*8,3000+800*reactiontime,80+6*reactiontime);
SWWMUtility.DoExplosion(self,50+reactiontime*4,3000+800*reactiontime,80+6*reactiontime);
double spd = vel.length();
vel = (vel*.1+(FRandom[ExploS](-.7,.7),FRandom[ExploS](-.7,.7),FRandom[ExploS](-.7,.7))).unit()*spd;
Vector3 pvel = (FRandom[ExploS](-1,1),FRandom[ExploS](-1,1),FRandom[ExploS](-1,1)).unit()*FRandom[ExploS](1,5);
@ -463,7 +463,7 @@ Class CandyMagArmBig : CandyMagArm
{
ReactionTime--;
Spawn("CandyMagTrailBig",pos);
SWWMUtility.DoExplosion(self,200+reactiontime*20,3000+900*reactiontime,200+16*reactiontime);
SWWMUtility.DoExplosion(self,100+reactiontime*10,3000+900*reactiontime,200+16*reactiontime);
double spd = vel.length();
vel = (vel*.1+(FRandom[ExploS](-.5,.5),FRandom[ExploS](-.5,.5),FRandom[ExploS](-.5,.5))).unit()*spd;
Vector3 pvel = (FRandom[ExploS](-1,1),FRandom[ExploS](-1,1),FRandom[ExploS](-1,1)).unit()*FRandom[ExploS](1,5);
@ -542,7 +542,7 @@ Class CandyGunProj : Actor
A_SetRenderStyle(1.,STYLE_Add);
Scale *= 7.+.2*special1;
A_AlertMonsters(swwm_uncapalert?0:40000);
SWWMUtility.DoExplosion(self,5000+900*special1,80000+15000*special1,500+30*special1,300,DE_EXTRAZTHRUST);
SWWMUtility.DoExplosion(self,3000+600*special1,80000+15000*special1,500+30*special1,300,DE_EXTRAZTHRUST);
A_QuakeEx(9,9,9,70,0,1500+100*special1,"",QF_RELATIVE|QF_SCALEDOWN,falloff:1200,rollintensity:2.);
A_StartSound("candygun/gunhit",CHAN_VOICE,attenuation:.24);
A_StartSound("candygun/gunhit",CHAN_WEAPON,attenuation:.12);
@ -658,7 +658,7 @@ Class CandyMagProj : Actor
A_SetRenderStyle(1.,STYLE_Add);
Scale *= 3.+.2*special1;
A_AlertMonsters(swwm_uncapalert?0:20000);
SWWMUtility.DoExplosion(self,1000+900*special1,60000+15000*special1,200+20*special1,100,DE_EXTRAZTHRUST);
SWWMUtility.DoExplosion(self,800+600*special1,60000+15000*special1,200+20*special1,100,DE_EXTRAZTHRUST);
A_QuakeEx(9,9,9,30,0,500+80*special1,"",QF_RELATIVE|QF_SCALEDOWN,falloff:500,rollintensity:2.);
A_StartSound("candygun/maghit",CHAN_VOICE,attenuation:.24);
A_StartSound("candygun/maghit",CHAN_WEAPON,attenuation:.12);
@ -753,7 +753,7 @@ Class CandyBulletImpact : Actor
{
Super.PostBeginPlay();
A_AlertMonsters(swwm_uncapalert?0:9000);
SWWMUtility.DoExplosion(self,1200,48000,250,80,DE_EXTRAZTHRUST);
SWWMUtility.DoExplosion(self,600,48000,250,80,DE_EXTRAZTHRUST);
A_QuakeEx(6,6,6,15,0,300,"",QF_RELATIVE|QF_SCALEDOWN,falloff:200,rollintensity:0.2);
A_StartSound("candygun/hit",CHAN_VOICE,attenuation:.25);
A_StartSound("candygun/hit",CHAN_WEAPON,attenuation:.5);
@ -986,7 +986,9 @@ Class CandyGun : SWWMWeapon
SWWMBulletTrail.DoTrail(self,origin,dir,10000,2);
if ( d.HitType == TRACE_HitActor )
{
int dmg = 500;
int dmg = 300;
// might as well apply explosion on top
if ( dmg >= d.HitActor.Health ) dmg += 600;
SWWMUtility.DoKnockback(d.HitActor,d.HitDir,72000);
dmg = d.HitActor.DamageMobj(invoker,self,dmg,'Explodium',DMG_USEANGLE|DMG_THRUSTLESS|DMG_FOILINVUL,atan2(d.HitDir.y,d.HitDir.x));
if ( d.HitActor.bNOBLOOD || d.HitActor.bDORMANT )

View file

@ -433,7 +433,7 @@ Class FatChodeImpact : Actor
override void PostBeginPlay()
{
Super.PostBeginPlay();
SWWMUtility.DoExplosion(self,1500,40000,250,120,DE_THRUWALLS|DE_EXTRAZTHRUST);
SWWMUtility.DoExplosion(self,600,40000,250,120,DE_THRUWALLS|DE_EXTRAZTHRUST);
A_AlertMonsters(swwm_uncapalert?0:8000);
A_QuakeEx(7,7,7,50,0,2000,"",QF_RELATIVE|QF_SCALEDOWN,falloff:800,rollIntensity:1.);
A_StartSound("silverbullet/chode",CHAN_VOICE,CHANF_DEFAULT,1.,.35);
@ -588,8 +588,8 @@ Class FatChodeExplosionArm : Actor
Spawn:
TNT1 A 1
{
A_CountDown();
SWWMUtility.DoExplosion(self,20+reactiontime,8000+1500*reactiontime,80+5*reactiontime,50,DE_THRUWALLS);
if ( !(ReactionTime%2) )
SWWMUtility.DoExplosion(self,10+reactiontime,8000+1500*reactiontime,80+5*reactiontime,50,DE_THRUWALLS);
if ( level.IsPointInLevel(pos) )
{
A_SprayDecal("HugeRocketBlast",-32);
@ -602,6 +602,7 @@ Class FatChodeExplosionArm : Actor
s.scale *= 2.4;
s.alpha *= .1+.4*(ReactionTime/15.);
}
A_CountDown();
}
Wait;
}
@ -895,7 +896,10 @@ Class SilverBullet : SWWMWeapon
}
if ( t.Results.HitType == TRACE_HitActor )
{
int dmg = t.Results.HitActor.DamageMobj(invoker,self,invoker.proneme?1000:500,'shot',DMG_FOILINVUL|DMG_USEANGLE|DMG_THRUSTLESS,atan2(t.Results.HitVector.y,t.Results.HitVector.x));
int dmg = invoker.proneme?800:600;
// might as well apply explosion on top
if ( dmg >= t.Results.HitActor.Health ) dmg += 600;
dmg = t.Results.HitActor.DamageMobj(invoker,self,dmg,'shot',DMG_FOILINVUL|DMG_USEANGLE|DMG_THRUSTLESS,atan2(t.Results.HitVector.y,t.Results.HitVector.x));
SWWMUtility.DoKnockback(t.Results.HitActor,t.Results.HitVector+(0,0,.025),dmg*20.*FRandom[SilverBullet](.8,1.2));
if ( t.Results.HitActor && !t.Results.HitActor.bNOBLOOD && !t.Results.HitActor.bDORMANT )
{
@ -912,7 +916,7 @@ Class SilverBullet : SWWMWeapon
p.target = self;
FatChodeImpact(p).realangle = atan2(t.Results.HitVector.y,t.Results.HitVector.x);
FatChodeImpact(p).realpitch = asin(-t.Results.HitVector.z);
BusterWall.Bust(t.Results,invoker.proneme?2500:2000,self,t.Results.HitVector,t.Results.HitPos.z);
BusterWall.Bust(t.Results,invoker.proneme?1400:1200,self,t.Results.HitVector,t.Results.HitPos.z);
}
for ( int i=0; i<t.Results.Distance; i+=16 )
{
@ -958,7 +962,7 @@ Class SilverBullet : SWWMWeapon
{
SilverBulletTracer sst = new("SilverBulletTracer");
sst.ignoreme = self;
sst.penetration = invoker.proneme?2500.:1500.;
sst.penetration = invoker.proneme?1200.:1000.;
sst.hitlist.Clear();
sst.shootthroughlist.Clear();
sst.waterhitlist.Clear();