Remove 8+ size variants of shells. Allow dropping of 2/4 golden shells.
Use overlays for Eviscerator casing eject, add random offsets like with Explodium Gun. Fix Candy Gun not being consistent with new animation changes of Explodium Gun. Fix Explodium Gun not showing the loaded bullet when checking the chamber. Give random offsets to Silver Bullet ejection overlays. Some small texture wrangling. Add projectile models for Silver Bullet (this will be used in the future). Remove InterHubAmount from MagAmmo classes (not needed as this property is only used by items with the INVBAR flag). Reduce BackpackMaxAmount of Ynykron Ammo to 3. Adjust how Chanceboxes randomize their "dud" probability. Tweak some of the Chancebox drops. Set DROPPED flag to false for all Chancebox drops, so they don't get crushed. Add 25% Crush damage factor to Demolitionist (in a future update, will try to make it so crushers have a chance to break while touching the player).
This commit is contained in:
parent
9a037a57bc
commit
b17fbd9a7d
44 changed files with 259 additions and 286 deletions
|
|
@ -284,7 +284,6 @@ Class RayBolt : MagAmmo
|
|||
MagAmmo.ParentAmmo "RayAmmo";
|
||||
MagAmmo.ClipSize 20;
|
||||
Inventory.MaxAmount 25;
|
||||
Inventory.InterHubAmount 25;
|
||||
+FLOATBOB;
|
||||
FloatBobStrength 0.25;
|
||||
}
|
||||
|
|
@ -396,7 +395,6 @@ Class GrandSpear : MagAmmo
|
|||
MagAmmo.ParentAmmo "GrandAmmo";
|
||||
MagAmmo.ClipSize 5;
|
||||
Inventory.MaxAmount 8;
|
||||
Inventory.InterHubAmount 8;
|
||||
+FLOATBOB;
|
||||
FloatBobStrength 0.25;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -417,7 +417,6 @@ Class RedShell2 : RedShell
|
|||
{
|
||||
Inventory.Amount 2;
|
||||
Radius 6;
|
||||
Height 20;
|
||||
}
|
||||
}
|
||||
Class RedShell4 : RedShell
|
||||
|
|
@ -426,34 +425,6 @@ Class RedShell4 : RedShell
|
|||
{
|
||||
Inventory.Amount 4;
|
||||
Radius 6;
|
||||
Height 20;
|
||||
}
|
||||
}
|
||||
Class RedShell8 : RedShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 8;
|
||||
Radius 8;
|
||||
Height 20;
|
||||
}
|
||||
}
|
||||
Class RedShell12 : RedShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 12;
|
||||
Radius 10;
|
||||
Height 20;
|
||||
}
|
||||
}
|
||||
Class RedShell16 : RedShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 16;
|
||||
Radius 10;
|
||||
Height 20;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -492,7 +463,6 @@ Class GreenShell2 : GreenShell
|
|||
{
|
||||
Inventory.Amount 2;
|
||||
Radius 6;
|
||||
Height 20;
|
||||
}
|
||||
}
|
||||
Class GreenShell4 : GreenShell
|
||||
|
|
@ -501,25 +471,6 @@ Class GreenShell4 : GreenShell
|
|||
{
|
||||
Inventory.Amount 4;
|
||||
Radius 6;
|
||||
Height 20;
|
||||
}
|
||||
}
|
||||
Class GreenShell8 : GreenShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 8;
|
||||
Radius 8;
|
||||
Height 20;
|
||||
}
|
||||
}
|
||||
Class GreenShell12 : GreenShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 12;
|
||||
Radius 10;
|
||||
Height 20;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -543,7 +494,6 @@ Class WhiteShell : Ammo
|
|||
+FLOATBOB;
|
||||
FloatBobStrength 0.25;
|
||||
Radius 4;
|
||||
Height 20;
|
||||
}
|
||||
States
|
||||
{
|
||||
|
|
@ -558,7 +508,6 @@ Class WhiteShell2 : WhiteShell
|
|||
{
|
||||
Inventory.Amount 2;
|
||||
Radius 6;
|
||||
Height 20;
|
||||
}
|
||||
}
|
||||
Class WhiteShell4 : WhiteShell
|
||||
|
|
@ -567,16 +516,6 @@ Class WhiteShell4 : WhiteShell
|
|||
{
|
||||
Inventory.Amount 4;
|
||||
Radius 6;
|
||||
Height 20;
|
||||
}
|
||||
}
|
||||
Class WhiteShell8 : WhiteShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 8;
|
||||
Radius 8;
|
||||
Height 20;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -615,7 +554,6 @@ Class BlueShell2 : BlueShell
|
|||
{
|
||||
Inventory.Amount 2;
|
||||
Radius 6;
|
||||
Height 20;
|
||||
}
|
||||
}
|
||||
Class BlueShell4 : BlueShell
|
||||
|
|
@ -624,16 +562,6 @@ Class BlueShell4 : BlueShell
|
|||
{
|
||||
Inventory.Amount 4;
|
||||
Radius 6;
|
||||
Height 20;
|
||||
}
|
||||
}
|
||||
Class BlueShell8 : BlueShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 8;
|
||||
Radius 8;
|
||||
Height 20;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -672,7 +600,6 @@ Class BlackShell2 : BlackShell
|
|||
{
|
||||
Inventory.Amount 2;
|
||||
Radius 6;
|
||||
Height 20;
|
||||
}
|
||||
}
|
||||
Class BlackShell4 : BlackShell
|
||||
|
|
@ -681,7 +608,6 @@ Class BlackShell4 : BlackShell
|
|||
{
|
||||
Inventory.Amount 4;
|
||||
Radius 6;
|
||||
Height 20;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -720,7 +646,6 @@ Class PurpleShell2 : PurpleShell
|
|||
{
|
||||
Inventory.Amount 2;
|
||||
Radius 6;
|
||||
Height 20;
|
||||
}
|
||||
}
|
||||
Class PurpleShell4 : PurpleShell
|
||||
|
|
@ -729,7 +654,6 @@ Class PurpleShell4 : PurpleShell
|
|||
{
|
||||
Inventory.Amount 4;
|
||||
Radius 6;
|
||||
Height 20;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -777,7 +701,7 @@ Class GoldShell : Ammo
|
|||
action void A_GoldShellTrail()
|
||||
{
|
||||
if ( Random[Goldy](0,2) ) return;
|
||||
Spawn("GoldShellSparkle",Vec3Offset(FRandom[Goldy](-2,2),FRandom[Goldy](-2,2),FRandom[Goldy](10,18)));
|
||||
Spawn("GoldShellSparkle",Vec3Offset(FRandom[Goldy](-radius,radius)/2.,FRandom[Goldy](-radius,radius)/2.,FRandom[Goldy](10,18)));
|
||||
}
|
||||
|
||||
Default
|
||||
|
|
@ -803,6 +727,22 @@ Class GoldShell : Ammo
|
|||
Wait;
|
||||
}
|
||||
}
|
||||
Class GoldShell2 : GoldShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 2;
|
||||
Radius 6;
|
||||
}
|
||||
}
|
||||
Class GoldShell4 : GoldShell
|
||||
{
|
||||
Default
|
||||
{
|
||||
Inventory.Amount 4;
|
||||
Radius 6;
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Eviscerator ammo
|
||||
|
|
@ -1231,7 +1171,6 @@ Class SilverBullets : MagAmmo
|
|||
MagAmmo.ParentAmmo "SilverBulletAmmo";
|
||||
MagAmmo.ClipSize 5;
|
||||
Inventory.MaxAmount 8;
|
||||
Inventory.InterHubAmount 8;
|
||||
+FLOATBOB;
|
||||
FloatBobStrength 0.25;
|
||||
Radius 4;
|
||||
|
|
@ -1254,7 +1193,6 @@ Class SilverBullets2 : MagAmmo
|
|||
MagAmmo.ParentAmmo "SilverBulletAmmo2";
|
||||
MagAmmo.ClipSize 5;
|
||||
Inventory.MaxAmount 8;
|
||||
Inventory.InterHubAmount 8;
|
||||
+FLOATBOB;
|
||||
FloatBobStrength 0.25;
|
||||
Radius 4;
|
||||
|
|
@ -1373,7 +1311,6 @@ Class CandyGunBullets : MagAmmo
|
|||
MagAmmo.ParentAmmo "CandyGunAmmo";
|
||||
MagAmmo.ClipSize 7;
|
||||
Inventory.MaxAmount 10;
|
||||
Inventory.InterHubAmount 10;
|
||||
+FLOATBOB;
|
||||
FloatBobStrength 0.25;
|
||||
Radius 2;
|
||||
|
|
@ -1461,7 +1398,7 @@ Class YnykronAmmo : Ammo
|
|||
Inventory.Amount 1;
|
||||
Inventory.MaxAmount 1;
|
||||
Ammo.BackpackAmount 0;
|
||||
Ammo.BackpackMaxAmount 4;
|
||||
Ammo.BackpackMaxAmount 3;
|
||||
Ammo.DropAmount 1;
|
||||
+FLOATBOB;
|
||||
FloatBobStrength 0.25;
|
||||
|
|
|
|||
|
|
@ -705,6 +705,7 @@ Class EvisceratorCasing : SWWMCasing
|
|||
|
||||
Class Eviscerator : SWWMWeapon
|
||||
{
|
||||
double casex, casey;
|
||||
bool isfiring;
|
||||
// barrel is extended
|
||||
bool extended;
|
||||
|
|
@ -1024,7 +1025,13 @@ Class Eviscerator : SWWMWeapon
|
|||
XZW2 A 4;
|
||||
XZW3 STUV 2;
|
||||
XZW3 W 1 A_StartSound("eviscerator/eject",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZW3 X 1 A_Overlay(-9999,"EjectSmoke");
|
||||
XZW3 X 1
|
||||
{
|
||||
int layer = PSP_WEAPON+1;
|
||||
while ( player.FindPSprite(layer) ) layer++;
|
||||
A_Overlay(layer,"EjectCasing");
|
||||
A_Overlay(-9999,"EjectSmoke");
|
||||
}
|
||||
XZW3 YZ 1;
|
||||
XZW4 AB 1;
|
||||
XZW4 C 1
|
||||
|
|
@ -1039,7 +1046,13 @@ Class Eviscerator : SWWMWeapon
|
|||
XZW4 Z 4;
|
||||
XZW6 RSTU 2;
|
||||
XZW6 V 1 A_StartSound("eviscerator/eject",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZW6 W 1 A_Overlay(-9999,"EjectSmoke");
|
||||
XZW6 W 1
|
||||
{
|
||||
int layer = PSP_WEAPON+1;
|
||||
while ( player.FindPSprite(layer) ) layer++;
|
||||
A_Overlay(layer,"EjectCasing");
|
||||
A_Overlay(-9999,"EjectSmoke");
|
||||
}
|
||||
XZW6 XYZ 1;
|
||||
XZW7 A 1;
|
||||
XZW7 B 1
|
||||
|
|
@ -1050,6 +1063,16 @@ Class Eviscerator : SWWMWeapon
|
|||
XZW7 CDE 1;
|
||||
XZW7 FGH 2;
|
||||
Goto ReadyExt;
|
||||
EjectCasing:
|
||||
XZWB D 1
|
||||
{
|
||||
A_OverlayOffset(OverlayID(),0,0);
|
||||
invoker.casex = FRandom[Eviscerator](-2.,2.);
|
||||
invoker.casey = FRandom[Eviscerator](-2.,2.);
|
||||
}
|
||||
XZWB EFGHIJKLM 1 A_OverlayOffset(OverlayID(),invoker.casex,invoker.casey,WOF_ADD|WOF_INTERPOLATE);
|
||||
TNT1 A 1 A_EvisceratorEject();
|
||||
Stop;
|
||||
EjectSmoke:
|
||||
TNT1 A 1 A_EvisceratorCasingSmoke((10,2,-3));
|
||||
TNT1 A 1 A_EvisceratorCasingSmoke((10,-1,-2));
|
||||
|
|
@ -1059,7 +1082,6 @@ Class Eviscerator : SWWMWeapon
|
|||
TNT1 A 1 A_EvisceratorCasingSmoke((10,-8.5,-5));
|
||||
TNT1 A 1 A_EvisceratorCasingSmoke((10,-10,-9));
|
||||
TNT1 A 1 A_EvisceratorCasingSmoke((10,-11,-14));
|
||||
TNT1 A 1 A_EvisceratorEject();
|
||||
Stop;
|
||||
AltFire:
|
||||
XZW2 A 2
|
||||
|
|
|
|||
|
|
@ -929,7 +929,8 @@ Class CBoxLight : SpotLightAttenuated
|
|||
// Collectible box (recycling of discarded "chance box" item)
|
||||
Class Chancebox : Actor
|
||||
{
|
||||
bool dud;
|
||||
bool dud; // if true, cannot drop a collectible
|
||||
bool chanceinit; // internal state has been initialized
|
||||
|
||||
static void SpawnChanceboxes()
|
||||
{
|
||||
|
|
@ -1077,19 +1078,19 @@ Class Chancebox : Actor
|
|||
if ( Random[Chancebox](0,1) )
|
||||
{
|
||||
let a = Spawn(!Random[Chancebox](0,2)?"GoldShell":(Random[Chancebox](0,1)||(gameinfo.gametype&GAME_Strife))?"GrilledCheeseSandwich":"YnykronAmmo",pos);
|
||||
a.bDROPPED = true;
|
||||
a.bDROPPED = false;
|
||||
a.bNOGRAVITY = false;
|
||||
a.vel.z = FRandom[Chancebox](2,4);
|
||||
}
|
||||
else if ( !Random[Chancebox](0,2) )
|
||||
{
|
||||
for ( int i=0; i<=12; i++ )
|
||||
for ( int i=0; i<=6; i++ )
|
||||
{
|
||||
let a = Spawn((i==0)?"CandyGun":"CandyGunBullets",pos);
|
||||
a.bDROPPED = true;
|
||||
a.bDROPPED = false;
|
||||
a.bNOGRAVITY = false;
|
||||
a.vel.z = FRandom[Chancebox](2,4);
|
||||
if ( i > 0 ) a.vel.xy = (cos(i*30),sin(i*30))*FRandom[Chancebox](1,2);
|
||||
if ( i > 0 ) a.vel.xy = (cos(i*60),sin(i*60))*FRandom[Chancebox](1,2);
|
||||
}
|
||||
}
|
||||
else if ( !Random[Chancebox](0,2) )
|
||||
|
|
@ -1097,7 +1098,7 @@ Class Chancebox : Actor
|
|||
for ( int i=0; i<3; i++ )
|
||||
{
|
||||
let a = Spawn("SilverBullets2",pos);
|
||||
a.bDROPPED = true;
|
||||
a.bDROPPED = false;
|
||||
a.bNOGRAVITY = false;
|
||||
a.vel.z = FRandom[Chancebox](2,4);
|
||||
a.vel.xy = (cos(i*120),sin(i*120))*FRandom[Chancebox](1,2);
|
||||
|
|
@ -1105,7 +1106,7 @@ Class Chancebox : Actor
|
|||
for ( int i=0; i<6; i++ )
|
||||
{
|
||||
let a = Spawn("SilverBullets",pos);
|
||||
a.bDROPPED = true;
|
||||
a.bDROPPED = false;
|
||||
a.bNOGRAVITY = false;
|
||||
a.vel.z = FRandom[Chancebox](2,4);
|
||||
a.vel.xy = (cos(i*60),sin(i*60))*FRandom[Chancebox](3,4);
|
||||
|
|
@ -1114,13 +1115,13 @@ Class Chancebox : Actor
|
|||
else if ( Random[Chancebox](0,1) )
|
||||
{
|
||||
let a = Spawn("HellblazerWarheads",pos);
|
||||
a.bDROPPED = true;
|
||||
a.bDROPPED = false;
|
||||
a.bNOGRAVITY = false;
|
||||
a.vel.z = FRandom[Chancebox](2,4);
|
||||
for ( int i=0; i<3; i++ )
|
||||
{
|
||||
a = Spawn("HellblazerRavagers",pos);
|
||||
a.bDROPPED = true;
|
||||
a.bDROPPED = false;
|
||||
a.bNOGRAVITY = false;
|
||||
a.vel.z = FRandom[Chancebox](2,4);
|
||||
a.vel.xy = (cos(i*120),sin(i*120))*FRandom[Chancebox](1,2);
|
||||
|
|
@ -1128,7 +1129,7 @@ Class Chancebox : Actor
|
|||
for ( int i=0; i<5; i++ )
|
||||
{
|
||||
a = Spawn("HellblazerCrackshots",pos);
|
||||
a.bDROPPED = true;
|
||||
a.bDROPPED = false;
|
||||
a.bNOGRAVITY = false;
|
||||
a.vel.z = FRandom[Chancebox](2,4);
|
||||
a.vel.xy = (cos(i*72),sin(i*72))*FRandom[Chancebox](3,4);
|
||||
|
|
@ -1136,7 +1137,7 @@ Class Chancebox : Actor
|
|||
for ( int i=0; i<8; i++ )
|
||||
{
|
||||
a = Spawn("HellblazerMissiles",pos);
|
||||
a.bDROPPED = true;
|
||||
a.bDROPPED = false;
|
||||
a.bNOGRAVITY = false;
|
||||
a.vel.z = FRandom[Chancebox](2,4);
|
||||
a.vel.xy = (cos(i*45),sin(i*45))*FRandom[Chancebox](5,6);
|
||||
|
|
@ -1145,13 +1146,13 @@ Class Chancebox : Actor
|
|||
else if ( Random[Chancebox](0,1) )
|
||||
{
|
||||
let a = Spawn("BlackShell",pos);
|
||||
a.bDROPPED = true;
|
||||
a.bDROPPED = false;
|
||||
a.bNOGRAVITY = false;
|
||||
a.vel.z = FRandom[Chancebox](2,4);
|
||||
for ( int i=0; i<3; i++ )
|
||||
{
|
||||
a = Spawn("BlueShell",pos);
|
||||
a.bDROPPED = true;
|
||||
a.bDROPPED = false;
|
||||
a.bNOGRAVITY = false;
|
||||
a.vel.z = FRandom[Chancebox](2,4);
|
||||
a.vel.xy = (cos(i*120),sin(i*120))*FRandom[Chancebox](1,2);
|
||||
|
|
@ -1159,7 +1160,7 @@ Class Chancebox : Actor
|
|||
for ( int i=0; i<8; i++ )
|
||||
{
|
||||
a = Spawn((i%2)?"WhiteShell":"PurpleShell",pos);
|
||||
a.bDROPPED = true;
|
||||
a.bDROPPED = false;
|
||||
a.bNOGRAVITY = false;
|
||||
a.vel.z = FRandom[Chancebox](2,4);
|
||||
a.vel.xy = (cos(i*72),sin(i*72))*FRandom[Chancebox](3,4);
|
||||
|
|
@ -1167,7 +1168,7 @@ Class Chancebox : Actor
|
|||
for ( int i=0; i<12; i++ )
|
||||
{
|
||||
a = Spawn((i%2)?"RedShell":"GreenShell",pos);
|
||||
a.bDROPPED = true;
|
||||
a.bDROPPED = false;
|
||||
a.bNOGRAVITY = false;
|
||||
a.vel.z = FRandom[Chancebox](2,4);
|
||||
a.vel.xy = (cos(i*30),sin(i*30))*FRandom[Chancebox](5,6);
|
||||
|
|
@ -1175,10 +1176,10 @@ Class Chancebox : Actor
|
|||
}
|
||||
else if ( Random[Chancebox](0,1) )
|
||||
{
|
||||
for ( int i=0; i<100; i++ )
|
||||
for ( int i=0; i<20; i++ )
|
||||
{
|
||||
let a = Spawn("HealthNuggetItem",pos);
|
||||
a.bDROPPED = true;
|
||||
a.bDROPPED = false;
|
||||
a.bNOGRAVITY = false;
|
||||
a.vel.z = FRandom[Chancebox](2,8);
|
||||
a.vel.xy = (cos(i*3.6),sin(i*3.6))*FRandom[Chancebox](1,8);
|
||||
|
|
@ -1189,7 +1190,7 @@ Class Chancebox : Actor
|
|||
for ( int i=0; i<=15; i++ )
|
||||
{
|
||||
let a = Spawn((i==0)?"RefresherItem":(i%3)?"HealthNuggetItem":"ArmorNuggetItem",pos);
|
||||
a.bDROPPED = true;
|
||||
a.bDROPPED = false;
|
||||
a.bNOGRAVITY = false;
|
||||
a.vel.z = FRandom[Chancebox](2,4);
|
||||
if ( i > 0 ) a.vel.xy = (cos(i*24),sin(i*24))*FRandom[Chancebox](1,2);
|
||||
|
|
@ -1200,7 +1201,7 @@ Class Chancebox : Actor
|
|||
{
|
||||
// pop one at random
|
||||
let a = Spawn(candidates[Random[Chancebox](0,candidates.Size()-1)],pos);
|
||||
a.bDROPPED = true;
|
||||
a.bDROPPED = false;
|
||||
a.bNOGRAVITY = false;
|
||||
a.vel.z = FRandom[Chancebox](2,4);
|
||||
}
|
||||
|
|
@ -1236,15 +1237,33 @@ Class Chancebox : Actor
|
|||
double rang = user.player?PlayerPawn(user.player.mo).UseRange:(user.Height/2);
|
||||
if ( abs(diff.z) > rang ) return false;
|
||||
if ( CurState != FindState("Spawn") ) return false;
|
||||
if ( !dud )
|
||||
if ( !chanceinit )
|
||||
{
|
||||
if ( !Random[Chancebox](0,2) )
|
||||
int col = 0;
|
||||
let ti = ThinkerIterator.Create("SWWMCollectible");
|
||||
SWWMCollectible c;
|
||||
while ( c = SWWMCollectible(ti.Next()) ) col++;
|
||||
int tcol = 0;
|
||||
for ( int i=0; i<AllActorClasses.Size(); i++ )
|
||||
{
|
||||
let c = (Class<SWWMCollectible>)(AllActorClasses[i]);
|
||||
if ( !c || (c == 'SWWMCollectible') ) continue;
|
||||
let def = GetDefaultByType(c);
|
||||
// check that we can collect it in this IWAD
|
||||
if ( !(gameinfo.gametype&def.avail) ) continue;
|
||||
tcol++;
|
||||
}
|
||||
int alldudchance = 5-(4*col)/tcol; // chance for all boxes to be duds (no collectibles)
|
||||
if ( (col > 0) && !Random[Chancebox](0,alldudchance) )
|
||||
{
|
||||
// all boxes are duds
|
||||
let ti = ThinkerIterator.Create("Chancebox");
|
||||
Chancebox c;
|
||||
while ( c = Chancebox(ti.Next()) )
|
||||
{
|
||||
c.chanceinit = true;
|
||||
c.dud = true;
|
||||
}
|
||||
}
|
||||
else if ( Random[Chancebox](0,2) )
|
||||
{
|
||||
|
|
@ -1265,12 +1284,21 @@ Class Chancebox : Actor
|
|||
// the others are duds
|
||||
let ti = ThinkerIterator.Create("Chancebox");
|
||||
Chancebox c;
|
||||
bool onemore = !Random[Chancebox](0,2); // unless...
|
||||
while ( c = Chancebox(ti.Next()) )
|
||||
{
|
||||
if ( c == self ) continue;
|
||||
c.dud = true; // we found one, the others just drop goodies
|
||||
if ( (c == self) || c.chanceinit ) continue;
|
||||
c.chanceinit = true;
|
||||
if ( onemore )
|
||||
{
|
||||
onemore = false;
|
||||
// this one isn't a dud either (wow, how lucky)
|
||||
c.dud = false;
|
||||
}
|
||||
else c.dud = true; // this one's a dud
|
||||
}
|
||||
}
|
||||
chanceinit = true;
|
||||
}
|
||||
if ( bCOUNTITEM )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2372,7 +2372,7 @@ Class SWWMHandler : EventHandler
|
|||
// respect final replacements
|
||||
if ( e.IsFinal ) return;
|
||||
// shell types (sorted by rarity
|
||||
static const Class<Actor> redpool[] = {"RedShell","RedShell2","RedShell4","RedShell8"};
|
||||
static const Class<Actor> redpool[] = {"RedShell","RedShell2","RedShell4"};
|
||||
static const Class<Actor> greenpool[] = {"GreenShell","GreenShell2","GreenShell4"};
|
||||
static const Class<Actor> whitepool[] = {"WhiteShell","WhiteShell2"};
|
||||
static const Class<Actor> purplepool[] = {"PurpleShell","PurpleShell2","PurpleShell4"};
|
||||
|
|
|
|||
|
|
@ -89,6 +89,7 @@ Class Demolitionist : PlayerPawn
|
|||
DamageFactor "Poison", 0.;
|
||||
DamageFactor "PoisonCloud", 0.;
|
||||
DamageFactor "Falling", 0.;
|
||||
DamageFactor "Crush", .25;
|
||||
Demolitionist.DashFuel 240.;
|
||||
+NOBLOOD;
|
||||
+DONTGIB;
|
||||
|
|
|
|||
|
|
@ -891,6 +891,7 @@ Class CandyGun : SWWMWeapon
|
|||
{
|
||||
int clipcount;
|
||||
bool chambered;
|
||||
double casex, casey;
|
||||
transient ui TextureID WeaponBox;
|
||||
transient ui Font TewiFont;
|
||||
bool tospecial;
|
||||
|
|
@ -1249,9 +1250,26 @@ Class CandyGun : SWWMWeapon
|
|||
Wait;
|
||||
Fire:
|
||||
XZW2 A 1 A_Schutt();
|
||||
XZW2 IJKLMNOPQR 1;
|
||||
XZW2 S 2 A_DropCasing();
|
||||
XZW2 I 1;
|
||||
XZW2 J 1
|
||||
{
|
||||
int layer = PSP_WEAPON+1;
|
||||
while ( player.FindPSprite(layer) ) layer++;
|
||||
A_Overlay(layer,"Casing");
|
||||
}
|
||||
XZW2 KLMNOP 1;
|
||||
XZW2 Q 2;
|
||||
Goto Ready;
|
||||
Casing:
|
||||
XZWC A 1
|
||||
{
|
||||
A_OverlayOffset(OverlayID(),0,0);
|
||||
invoker.casex = FRandom[Explodium](-1.,5.);
|
||||
invoker.casey = FRandom[Explodium](-2.,1.);
|
||||
}
|
||||
XZWC BCDEFGHIJ 1 A_OverlayOffset(OverlayID(),invoker.casex,invoker.casey,WOF_ADD|WOF_INTERPOLATE);
|
||||
TNT1 A 1 A_DropCasing();
|
||||
Stop;
|
||||
AltFire:
|
||||
XZW2 A 2
|
||||
{
|
||||
|
|
|
|||
|
|
@ -648,6 +648,7 @@ Class SilverBullet : SWWMWeapon
|
|||
bool chambered, fired;
|
||||
bool fcbchambered, fcbloaded, fcbselected;
|
||||
int clipcount;
|
||||
double casex, casey;
|
||||
|
||||
transient ui TextureID WeaponBox[2], ZoomBar, BulletIcon[2], AmmoIcon[2];
|
||||
transient ui Font TewiFont;
|
||||
|
|
@ -1133,7 +1134,7 @@ Class SilverBullet : SWWMWeapon
|
|||
Vector3 x, y, z;
|
||||
[x, y, z] = swwm_CoordUtil.GetAxes(pitch,angle,roll);
|
||||
vel += x*min(1.,invoker.specialf1)*(600./Mass);
|
||||
A_OverlayAlpha(PSP_WEAPON+2,clamp(invoker.specialf1*3.,0.,1.));
|
||||
A_OverlayAlpha(PSP_WEAPON+1,clamp(invoker.specialf1*3.,0.,1.));
|
||||
if ( Random[SilverBullet](0,int(invoker.specialf1*2)) )
|
||||
self.DamageMobj(invoker,self,1,'jet');
|
||||
Vector3 origin = level.Vec3Offset(Vec2OffsetZ(0,0,player.viewz),-x*10-z*10);
|
||||
|
|
@ -1321,9 +1322,9 @@ Class SilverBullet : SWWMWeapon
|
|||
TNT1 A 0
|
||||
{
|
||||
A_StartSound("silverbullet/jet",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
A_Overlay(PSP_WEAPON+2,"JetSmoke");
|
||||
A_OverlayFlags(PSP_WEAPON+2,PSPF_RENDERSTYLE|PSPF_ALPHA|PSPF_FORCESTYLE|PSPF_FORCEALPHA,true);
|
||||
A_OverlayRenderStyle(PSP_WEAPON+2,STYLE_Add);
|
||||
A_Overlay(PSP_WEAPON+1,"JetSmoke");
|
||||
A_OverlayFlags(PSP_WEAPON+1,PSPF_RENDERSTYLE|PSPF_ALPHA|PSPF_FORCESTYLE|PSPF_FORCEALPHA,true);
|
||||
A_OverlayRenderStyle(PSP_WEAPON+1,STYLE_Add);
|
||||
}
|
||||
TNT1 A 1
|
||||
{
|
||||
|
|
@ -1359,15 +1360,17 @@ Class SilverBullet : SWWMWeapon
|
|||
A_StartSound("silverbullet/boltopen",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
if ( invoker.chambered )
|
||||
{
|
||||
int layer = PSP_WEAPON+2;
|
||||
while ( player.FindPSprite(layer) ) layer++;
|
||||
if ( invoker.fired )
|
||||
{
|
||||
if ( invoker.fcbchambered ) A_Overlay(PSP_WEAPON+1,"Casing2");
|
||||
else A_Overlay(PSP_WEAPON+1,"Casing");
|
||||
if ( invoker.fcbchambered ) A_Overlay(layer,"Casing2");
|
||||
else A_Overlay(layer,"Casing");
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( invoker.fcbchambered ) A_Overlay(PSP_WEAPON+1,"Bullet2");
|
||||
else A_Overlay(PSP_WEAPON+1,"Bullet");
|
||||
if ( invoker.fcbchambered ) A_Overlay(layer,"Bullet2");
|
||||
else A_Overlay(layer,"Bullet");
|
||||
}
|
||||
}
|
||||
invoker.fired = false;
|
||||
|
|
@ -1389,15 +1392,17 @@ Class SilverBullet : SWWMWeapon
|
|||
A_StartSound("silverbullet/boltopen",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
if ( invoker.chambered )
|
||||
{
|
||||
int layer = PSP_WEAPON+2;
|
||||
while ( player.FindPSprite(layer) ) layer++;
|
||||
if ( invoker.fired )
|
||||
{
|
||||
if ( invoker.fcbchambered ) A_Overlay(PSP_WEAPON+1,"Casing2");
|
||||
else A_Overlay(PSP_WEAPON+1,"Casing");
|
||||
if ( invoker.fcbchambered ) A_Overlay(layer,"Casing2");
|
||||
else A_Overlay(layer,"Casing");
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( invoker.fcbchambered ) A_Overlay(PSP_WEAPON+1,"Bullet2");
|
||||
else A_Overlay(PSP_WEAPON+1,"Bullet");
|
||||
if ( invoker.fcbchambered ) A_Overlay(layer,"Bullet2");
|
||||
else A_Overlay(layer,"Bullet");
|
||||
}
|
||||
}
|
||||
invoker.fired = false;
|
||||
|
|
@ -1411,24 +1416,48 @@ Class SilverBullet : SWWMWeapon
|
|||
XZW9 JKLMNOPQR 2;
|
||||
Goto Ready2;
|
||||
Casing:
|
||||
XZW7 DE 2;
|
||||
XZW7 FGHIJKLMNO 1;
|
||||
XZW7 D 2
|
||||
{
|
||||
A_OverlayOffset(OverlayID(),0,0);
|
||||
invoker.casex = FRandom[Silverbullet](-2.,2.);
|
||||
invoker.casey = FRandom[Silverbullet](-2.,2.);
|
||||
}
|
||||
XZW7 E 2;
|
||||
XZW7 FGHIJKLMNO 1 A_OverlayOffset(OverlayID(),invoker.casex,invoker.casey,WOF_ADD|WOF_INTERPOLATE);
|
||||
TNT1 A 0 A_DropCasing();
|
||||
Stop;
|
||||
Casing2:
|
||||
XZWD DE 2;
|
||||
XZWD FGHIJKLMNO 1;
|
||||
XZWD D 2
|
||||
{
|
||||
A_OverlayOffset(OverlayID(),0,0);
|
||||
invoker.casex = FRandom[Silverbullet](-2.,2.);
|
||||
invoker.casey = FRandom[Silverbullet](-2.,2.);
|
||||
}
|
||||
XZWD E 2;
|
||||
XZWD FGHIJKLMNO 1 A_OverlayOffset(OverlayID(),invoker.casex,invoker.casey,WOF_ADD|WOF_INTERPOLATE);
|
||||
TNT1 A 0 A_DropCasing(true);
|
||||
Stop;
|
||||
Bullet:
|
||||
XZWD PQ 2;
|
||||
XZWD RSTUVWXYZ 1;
|
||||
XZWE A 1;
|
||||
XZWD P 2
|
||||
{
|
||||
A_OverlayOffset(OverlayID(),0,0);
|
||||
invoker.casex = FRandom[Silverbullet](-2.,2.);
|
||||
invoker.casey = FRandom[Silverbullet](-2.,2.);
|
||||
}
|
||||
XZWD Q 2;
|
||||
XZWD RSTUVWXYZ 1 A_OverlayOffset(OverlayID(),invoker.casex,invoker.casey,WOF_ADD|WOF_INTERPOLATE);
|
||||
XZWE A 1 A_OverlayOffset(OverlayID(),invoker.casex,invoker.casey,WOF_ADD|WOF_INTERPOLATE);
|
||||
TNT1 A 0 A_DropBullet();
|
||||
Stop;
|
||||
Bullet2:
|
||||
XZWE BC 2;
|
||||
XZWE DEFGHIJKLM 1;
|
||||
XZWE B 2
|
||||
{
|
||||
A_OverlayOffset(OverlayID(),0,0);
|
||||
invoker.casex = FRandom[Silverbullet](-2.,2.);
|
||||
invoker.casey = FRandom[Silverbullet](-2.,2.);
|
||||
}
|
||||
XZWE C 2;
|
||||
XZWE DEFGHIJKLM 1 A_OverlayOffset(OverlayID(),invoker.casex,invoker.casey,WOF_ADD|WOF_INTERPOLATE);
|
||||
TNT1 A 0 A_DropBullet(true);
|
||||
Stop;
|
||||
ZoomFire:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue