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.
|
|
@ -332,7 +332,7 @@ Can eat up a total of 250 damage points before breaking.
|
|||
### Grilled Cheese Sandwich ~ Replaces Megasphere, Morph Ovum, Platinum Helm
|
||||

|
||||
|
||||
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
|
||||

|
||||
|
|
|
|||
|
|
@ -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)";
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 971 B After Width: | Height: | Size: 942 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 2 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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++ )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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) )
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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++ )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 )
|
||||
|
|
|
|||
|
|
@ -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 )
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||