Rebalances across the board once again.
Fix the incorrect SPAC_PCross behaviour in other spots. Redo swap weapon implementation. Should now theoretically allow for not just two, but many more swap weapons per slot. Minor fixups.
This commit is contained in:
parent
7f02f5ece5
commit
0156af8431
25 changed files with 125 additions and 131 deletions
|
|
@ -1,2 +1,2 @@
|
|||
[default]
|
||||
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r720 \cu(Thu 31 Dec 08:27:55 CET 2020)";
|
||||
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r722 \cu(Thu 31 Dec 13:58:11 CET 2020)";
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@ Class BlackfireIgniter : SWWMWeapon
|
|||
Weapon.SelectionOrder 550;
|
||||
Weapon.AmmoType1 "DarkCanister";
|
||||
Weapon.AmmoGive1 1;
|
||||
SWWMWeapon.SwapWeapon "Sparkster";
|
||||
SWWMWeapon.DropAmmoType "DarkCanister";
|
||||
BlackfireIgniter.ClipCount 100;
|
||||
Stamina 220000;
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ Class ItamexHammer : SWWMWeapon
|
|||
Weapon.SlotPriority 3.;
|
||||
Weapon.SelectionOrder 1200;
|
||||
Stamina 9000;
|
||||
SWWMWeapon.SwapWeapon "PusherWeapon";
|
||||
+WEAPON.MELEEWEAPON;
|
||||
}
|
||||
States
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ Class HeavyMahSheenGun : SWWMWeapon
|
|||
Weapon.SelectionOrder 100;
|
||||
Weapon.AmmoType1 "SheenAmmo";
|
||||
Weapon.AmmoGive1 200;
|
||||
SWWMWeapon.SwapWeapon "Eviscerator";
|
||||
SWWMWeapon.DropAmmoType "SheenAmmo";
|
||||
Stamina 100000;
|
||||
+SWWMWEAPON.NOFIRSTGIVE;
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@ Class GrandLance : SWWMWeapon
|
|||
Weapon.AmmoGive1 1;
|
||||
Weapon.AmmoType2 "RayBattery";
|
||||
Weapon.AmmoGive2 0;
|
||||
SWWMWeapon.SwapWeapon "Ynykron";
|
||||
SWWMWeapon.DropAmmoType "GrandAmmo";
|
||||
GrandLance.ClipCount 5;
|
||||
GrandLance.ClipCount2 500;
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ Class Quadravol : SWWMWeapon
|
|||
Weapon.SelectionOrder 650;
|
||||
Weapon.AmmoType1 "QuadAmmo";
|
||||
Weapon.AmmoGive1 1;
|
||||
SWWMWeapon.SwapWeapon "Hellblazer";
|
||||
SWWMWeapon.DropAmmoType "QuadAmmo";
|
||||
Quadravol.ClipCount 4;
|
||||
Stamina 80000;
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ Class PuntzerBeta : SWWMWeapon
|
|||
Weapon.SelectionOrder 450;
|
||||
Weapon.AmmoType1 "SMW05Ammo";
|
||||
Weapon.AmmoGive1 6;
|
||||
SWWMWeapon.SwapWeapon "Spreadgun";
|
||||
SWWMWeapon.DropAmmoType "SMW05Ammo";
|
||||
Stamina 10000;
|
||||
+SWWMWEAPON.NOFIRSTGIVE;
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@ Class PuntzerGamma : SWWMWeapon
|
|||
PuntzerGamma.ClipCount 30;
|
||||
Weapon.AmmoType1 "SMW05Ammo";
|
||||
Weapon.AmmoGive1 30;
|
||||
SWWMWeapon.SwapWeapon "Wallbuster";
|
||||
SWWMWeapon.DropAmmoType "SMW05Ammo";
|
||||
Stamina 30000;
|
||||
+SWWMWEAPON.NOFIRSTGIVE;
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@ Class RayKhom : SWWMWeapon
|
|||
Weapon.AmmoGive1 1;
|
||||
Weapon.AmmoType2 "RayBattery";
|
||||
Weapon.AmmoGive2 0;
|
||||
SWWMWeapon.SwapWeapon "CandyGun";
|
||||
SWWMWeapon.DropAmmoType "RayAmmo";
|
||||
RayKhom.ClipCount 20;
|
||||
RayKhom.ClipCount2 500;
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@ Class EMPCarbine : SWWMWeapon
|
|||
Weapon.SelectionOrder 850;
|
||||
Weapon.AmmoType1 "EMPCore";
|
||||
Weapon.AmmoGive1 1;
|
||||
SWWMWeapon.SwapWeapon "SilverBullet";
|
||||
SWWMWeapon.DropAmmoType "EMPCore";
|
||||
EMPCarbine.ClipCount 4;
|
||||
Stamina 500000;
|
||||
|
|
|
|||
|
|
@ -814,6 +814,7 @@ Class EvisceratorSixPack : EvisceratorShell
|
|||
{
|
||||
Default
|
||||
{
|
||||
Tag "$I_EVISHELLPAK";
|
||||
Inventory.PickupMessage "$I_EVISHELLPAK";
|
||||
Inventory.Amount 6;
|
||||
Radius 20;
|
||||
|
|
@ -885,6 +886,7 @@ Class HellblazerMissileMag : HellblazerMissiles
|
|||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_HELLMISSILEMAG";
|
||||
Inventory.PickupMessage "$T_HELLMISSILEMAG";
|
||||
Inventory.Amount 6;
|
||||
Radius 12;
|
||||
|
|
@ -951,6 +953,7 @@ Class HellblazerCrackshotMag : HellblazerCrackshots
|
|||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_HELLCLUSTERMAG";
|
||||
Inventory.PickupMessage "$T_HELLCLUSTERMAG";
|
||||
Inventory.Amount 3;
|
||||
Radius 12;
|
||||
|
|
@ -996,6 +999,7 @@ Class HellblazerRavagerMag : HellblazerRavagers
|
|||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_HELLBURNINATORMAG";
|
||||
Inventory.PickupMessage "$T_HELLBURNINATORMAG";
|
||||
Inventory.Amount 3;
|
||||
Radius 12;
|
||||
|
|
@ -1041,6 +1045,7 @@ Class HellblazerWarheadMag : HellblazerWarheads
|
|||
{
|
||||
Default
|
||||
{
|
||||
Tag "$T_HELLNUKEMAG";
|
||||
Inventory.PickupMessage "$T_HELLNUKEMAG";
|
||||
Inventory.Amount 2;
|
||||
Radius 12;
|
||||
|
|
|
|||
|
|
@ -240,6 +240,7 @@ Class HellblazerMissile : Actor
|
|||
+EXPLODEONWATER;
|
||||
+FORCERADIUSDMG;
|
||||
+NODAMAGETHRUST;
|
||||
+HITTRACER;
|
||||
}
|
||||
|
||||
override void PostBeginPlay()
|
||||
|
|
@ -285,6 +286,7 @@ Class HellblazerMissile : Actor
|
|||
let t = bt.Thing;
|
||||
if ( !t || !t.bSHOOTABLE || (!t.bISMONSTER && !(t is 'BossBrain') && !t.player) || (t.Health <= 0) || (target && t.IsFriend(target)) || !SWWMUtility.SphereIntersect(t,level.Vec3Offset(pos,vel),bNOGRAVITY?50:90) || !CheckSight(t,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) continue;
|
||||
deto++;
|
||||
tracer = t;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -393,7 +395,7 @@ Class HellblazerCrackshot : HellblazerMissile
|
|||
A_SetRenderStyle(1.0,STYLE_Add);
|
||||
A_SprayDecal("BigRocketBlast",50);
|
||||
A_SetScale(6.);
|
||||
SWWMUtility.DoExplosion(self,150,320000,250,100);
|
||||
SWWMUtility.DoExplosion(self,200,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);
|
||||
|
|
@ -438,6 +440,7 @@ Class HellblazerCrackshot : HellblazerMissile
|
|||
c.vel = (cos(ang)*cos(pt),sin(ang)*cos(pt),sin(-pt))*c.speed*FRandom[Hellblazer](.8,1.2);
|
||||
c.target = target;
|
||||
c.ReactionTime += Random[Hellblazer](-10,10);
|
||||
HellblazerClusterMini(c).A_Steer(tracer);
|
||||
}
|
||||
if ( swwm_omnibust ) BusterWall.ProjectileBust(self,300,(cos(angle)*cos(pitch),sin(angle)*cos(pitch),sin(-pitch)));
|
||||
}
|
||||
|
|
@ -463,7 +466,7 @@ Class HellblazerRavager : HellblazerMissile
|
|||
A_SetRenderStyle(1.0,STYLE_Add);
|
||||
A_SprayDecal("HugeRocketBlast",50);
|
||||
A_SetScale(8.);
|
||||
SWWMUtility.DoExplosion(self,250,320000,300,120);
|
||||
SWWMUtility.DoExplosion(self,350,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);
|
||||
|
|
@ -907,9 +910,8 @@ Class HellblazerClusterMini : HellblazerMissile2
|
|||
p.alpha *= 1-special1*.1;
|
||||
}
|
||||
}
|
||||
override void A_HandleBounce()
|
||||
void A_Steer( Actor ignoreme = null )
|
||||
{
|
||||
Super.A_HandleBounce();
|
||||
if ( !bMISSILE ) return;
|
||||
// try to steer towards a target
|
||||
let bt = BlockThingsIterator.Create(self,800);
|
||||
|
|
@ -918,7 +920,7 @@ Class HellblazerClusterMini : HellblazerMissile2
|
|||
while ( bt.Next() )
|
||||
{
|
||||
let t = bt.Thing;
|
||||
if ( !t || !t.bSHOOTABLE || (!t.bISMONSTER && !(t is 'BossBrain')) || (t.Health <= 0) || (target && t.IsFriend(target)) || !SWWMUtility.SphereIntersect(t,level.Vec3Offset(pos,vel),800) || !CheckSight(t,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) continue;
|
||||
if ( !t || (ignoreme && (t == ignoreme)) || !t.bSHOOTABLE || (!t.bISMONSTER && !(t is 'BossBrain')) || (t.Health <= 0) || (target && t.IsFriend(target)) || !SWWMUtility.SphereIntersect(t,level.Vec3Offset(pos,vel),800) || !CheckSight(t,SF_IGNOREVISIBILITY|SF_IGNOREWATERBOUNDARY) ) continue;
|
||||
double dist = Distance3D(t);
|
||||
if ( dist > closest ) continue;
|
||||
closest = dist;
|
||||
|
|
@ -932,7 +934,11 @@ Class HellblazerClusterMini : HellblazerMissile2
|
|||
vel /= spd;
|
||||
vel = (vel*.3+dirto*.7)*spd;
|
||||
}
|
||||
|
||||
override void A_HandleBounce()
|
||||
{
|
||||
Super.A_HandleBounce();
|
||||
A_Steer();
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
|
@ -1101,13 +1107,13 @@ Class HellblazerRavagerArm : Actor
|
|||
{
|
||||
if ( waterlevel > 0 ) ReactionTime -= 2;
|
||||
let p = Spawn("RavagerPuff",pos);
|
||||
p.alpha *= .6+.4*(ReactionTime/20.);
|
||||
p.scale *= 2.5-1.5*(ReactionTime/20.);
|
||||
p.alpha *= .4+.6*(ReactionTime/25.);
|
||||
p.scale *= 2.5-1.5*(ReactionTime/25.);
|
||||
if ( !(ReactionTime%3) )
|
||||
{
|
||||
let l = Spawn("RavagerLight",pos);
|
||||
l.Args[3] = int(90+50*(ReactionTime/20.));
|
||||
l.ReactionTime = int(2+8*(ReactionTime/20.));
|
||||
l.Args[3] = int(90+50*(ReactionTime/25.));
|
||||
l.ReactionTime = int(2+8*(ReactionTime/25.));
|
||||
l.target = p;
|
||||
}
|
||||
SWWMUtility.DoExplosion(self,15+reactiontime/2,2000+400*reactiontime,300-4*reactiontime,100);
|
||||
|
|
@ -1119,7 +1125,7 @@ Class HellblazerRavagerArm : Actor
|
|||
s.SetShade(Color(4,2,1)*Random[ExploS](48,63));
|
||||
s.special1 = Random[ExploS](4,8);
|
||||
s.scale *= 4.;
|
||||
s.alpha *= .2+.3*(ReactionTime/20.);
|
||||
s.alpha *= .2+.3*(ReactionTime/25.);
|
||||
if ( !(ReactionTime%2) )
|
||||
{
|
||||
int numpt = Random[Hellblazer](-2,4);
|
||||
|
|
@ -1205,14 +1211,14 @@ Class HellblazerWarheadArm : Actor
|
|||
TNT1 A 1
|
||||
{
|
||||
Spawn("HellblazerWarheadTrail",pos);
|
||||
SWWMUtility.DoExplosion(self,20+reactiontime*4,3000+500*reactiontime,120+3*reactiontime);
|
||||
SWWMUtility.DoExplosion(self,20+reactiontime*4,3000+500*reactiontime,120+4*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,2,1)*Random[ExploS](48,63));
|
||||
s.special1 = Random[ExploS](1,3);
|
||||
s.scale *= 6.;
|
||||
s.alpha *= 0.1+.4*(ReactionTime/15.);
|
||||
s.alpha *= 0.1+.4*(ReactionTime/25.);
|
||||
A_CountDown();
|
||||
}
|
||||
Wait;
|
||||
|
|
@ -1693,7 +1699,6 @@ Class Hellblazer : SWWMWeapon
|
|||
Stamina 90000;
|
||||
Weapon.AmmoType1 "HellblazerMissiles";
|
||||
Weapon.AmmoGive1 3;
|
||||
//SWWMWeapon.SwapWeapon "Quadravol";
|
||||
SWWMWeapon.DropAmmoType "RocketAmmo";
|
||||
Hellblazer.ClipCount 6;
|
||||
+SWWMWEAPON.NOFIRSTGIVE;
|
||||
|
|
|
|||
|
|
@ -1122,8 +1122,7 @@ Class Wallbuster : SWWMWeapon
|
|||
for ( int i=0; i<t.ShootThroughList.Size(); i++ )
|
||||
{
|
||||
t.ShootThroughList[i].Activate(self,0,SPAC_PCross);
|
||||
if ( t.ShootThroughList[i].special == GlassBreak ) // fuck glass
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
|
||||
t.ShootThroughList[i].Activate(self,0,SPAC_Impact);
|
||||
}
|
||||
for ( int i=0; i<t.WaterHitList.Size(); i++ )
|
||||
{
|
||||
|
|
@ -1325,7 +1324,7 @@ Class Wallbuster : SWWMWeapon
|
|||
// slug
|
||||
if ( !sst ) sst = new("SpreadSlugTracer");
|
||||
sst.ignoreme = self;
|
||||
sst.penetration = 150.;
|
||||
sst.penetration = 200.;
|
||||
a = FRandom[Wallbuster](0,360);
|
||||
s = FRandom[Wallbuster](0,.002);
|
||||
dir = (x2+y2*cos(a)*s+z2*sin(a)*s).unit();
|
||||
|
|
@ -1440,7 +1439,7 @@ Class Wallbuster : SWWMWeapon
|
|||
if ( !st ) st = new("SpreadgunTracer");
|
||||
st.ignoreme = self;
|
||||
// attempt to uniformize expected damage while reducing traces (mainly for performance)
|
||||
int expecteddmg = 120;
|
||||
int expecteddmg = 150;
|
||||
int numshot = max(21-howmany,5);
|
||||
int individualdmg = int(ceil(expecteddmg/double(numshot)));
|
||||
for ( int j=0; j<numshot; j++ )
|
||||
|
|
@ -1632,7 +1631,6 @@ Class Wallbuster : SWWMWeapon
|
|||
Weapon.UpSound "wallbuster/select";
|
||||
Weapon.AmmoType1 "RedShell";
|
||||
Weapon.AmmoGive1 5;
|
||||
//SWWMWeapon.SwapWeapon "PuntzerGamma";
|
||||
SWWMWeapon.DropAmmoType "Shell";
|
||||
Stamina 35000;
|
||||
+SWWMWEAPON.NOFIRSTGIVE;
|
||||
|
|
|
|||
|
|
@ -119,7 +119,7 @@ Class EvisceratorChunk : Actor
|
|||
Radius 2;
|
||||
Height 2;
|
||||
Speed 50;
|
||||
DamageFunction int(clamp((vel.length()-5)*.12+max(0,1.-lifetime)*2.,0,8));
|
||||
DamageFunction int(clamp((vel.length()-5)*.12+max(0,1.-lifetime)*2.,0,10));
|
||||
DamageType 'shot';
|
||||
BounceFactor 1.0;
|
||||
WallBounceFactor 1.0;
|
||||
|
|
@ -711,7 +711,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;
|
||||
if ( invoker.extended ) p.vel *= 1.4;
|
||||
}
|
||||
for ( int i=0; i<4; i++ )
|
||||
{
|
||||
|
|
@ -830,7 +830,6 @@ Class Eviscerator : SWWMWeapon
|
|||
Stamina 50000;
|
||||
Weapon.AmmoType1 "EvisceratorShell";
|
||||
Weapon.AmmoGive1 4;
|
||||
//SWWMWeapon.SwapWeapon "HeavyMahSheenGun";
|
||||
SWWMWeapon.DropAmmoType "EvisceratorShell";
|
||||
+WEAPON.EXPLOSIVE;
|
||||
Radius 20;
|
||||
|
|
|
|||
|
|
@ -577,8 +577,7 @@ Class YnykronBeam : Actor
|
|||
for ( int i=0; i<t.ShootThroughList.Size(); i++ )
|
||||
{
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_PCross);
|
||||
if ( t.ShootThroughList[i].special == GlassBreak ) // fuck glass
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
|
||||
}
|
||||
for ( int i=0; i<t.WaterHitList.Size(); i++ )
|
||||
{
|
||||
|
|
@ -889,8 +888,7 @@ Class DelayedWallBeam : Actor
|
|||
if ( at.Results.HitLine.sidedef[1] )
|
||||
{
|
||||
at.Results.HitLine.Activate(target,0,SPAC_PCross);
|
||||
if ( at.Results.HitLine.special == GlassBreak ) // fuck glass
|
||||
at.Results.HitLine.Activate(target,0,SPAC_Impact);
|
||||
at.Results.HitLine.Activate(target,0,SPAC_Impact);
|
||||
}
|
||||
else at.Results.HitLine.Activate(tracer,at.Results.Side,SPAC_Impact);
|
||||
}
|
||||
|
|
@ -1355,8 +1353,7 @@ Class YnykronVoidBeam : Actor
|
|||
for ( int i=0; i<t.ShootThroughList.Size(); i++ )
|
||||
{
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_PCross);
|
||||
if ( t.ShootThroughList[i].special == GlassBreak ) // fuck glass
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
|
||||
}
|
||||
for ( int i=0; i<t.HitList.Size(); i++ )
|
||||
{
|
||||
|
|
@ -1494,8 +1491,7 @@ Class YnykronLightningArc : Actor
|
|||
for ( int i=0; i<t.ShootThroughList.Size(); i++ )
|
||||
{
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_PCross);
|
||||
if ( t.ShootThroughList[i].special == GlassBreak ) // fuck glass
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
|
||||
}
|
||||
for ( int i=0; i<t.hitlist.Size(); i++ )
|
||||
{
|
||||
|
|
@ -2498,8 +2494,7 @@ Class YnykronAltBeam : Actor
|
|||
for ( int i=0; i<t.ShootThroughList.Size(); i++ )
|
||||
{
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_PCross);
|
||||
if ( t.ShootThroughList[i].special == GlassBreak ) // fuck glass
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
|
||||
}
|
||||
for ( int i=0; i<t.WaterHitList.Size(); i++ )
|
||||
{
|
||||
|
|
@ -2883,7 +2878,6 @@ Class Ynykron : SWWMWeapon
|
|||
Stamina 5000000;
|
||||
Weapon.AmmoType1 "YnykronAmmo";
|
||||
Weapon.AmmoGive1 1;
|
||||
//SWWMWeapon.SwapWeapon "GrandLance";
|
||||
SWWMWeapon.DropAmmoType "YnykronAmmo";
|
||||
+SWWMWEAPON.NOFIRSTGIVE;
|
||||
Ynykron.ClipCount 1;
|
||||
|
|
|
|||
|
|
@ -473,6 +473,7 @@ Class DeepImpact : SWWMWeapon
|
|||
DeepImpact.ClipCount 100;
|
||||
+WEAPON.MELEEWEAPON;
|
||||
+WEAPON.WIMPY_WEAPON;
|
||||
+SWWMWEAPON.NOSWAPWEAPON;
|
||||
}
|
||||
|
||||
States
|
||||
|
|
|
|||
|
|
@ -2474,23 +2474,20 @@ Class SWWMHandler : EventHandler
|
|||
if ( !item ) return;
|
||||
if ( SWWMCredits.Take(players[e.Args[0]],e.Args[1]) )
|
||||
{
|
||||
// drop the swapweapon if we own it first
|
||||
let def = GetDefaultByType(item);
|
||||
if ( swwm_swapweapons && (item is 'SWWMWeapon') && SWWMWeapon(def).SwapWeapon )
|
||||
SWWMWeapon sw;
|
||||
// drop the swapweapon if we own it first
|
||||
if ( swwm_swapweapons && (item is 'SWWMWeapon') && (sw = SWWMWeapon(def).HasSwapWeapon(players[e.Args[0]].mo)) )
|
||||
{
|
||||
let sw = Weapon(players[e.Args[0]].mo.FindInventory(SWWMWeapon(def).SwapWeapon));
|
||||
if ( sw )
|
||||
bool swapto = (sw == players[e.Args[0]].ReadyWeapon);
|
||||
let drop = players[e.Args[0]].mo.DropInventory(sw);
|
||||
// add some random velocity so multiple drops don't get bunched together
|
||||
if ( drop ) drop.vel += (Actor.RotateVector((FRandom[Junk](-1.5,.5),FRandom[Junk](-2.5,2.5)),players[e.Args[0]].mo.angle),FRandom[Junk](2.,5.));
|
||||
// don't autoswitch just yet (hacky)
|
||||
if ( swapto )
|
||||
{
|
||||
bool swapto = (sw == players[e.Args[0]].ReadyWeapon);
|
||||
let drop = players[e.Args[0]].mo.DropInventory(sw);
|
||||
// add some random velocity so multiple drops don't get bunched together
|
||||
if ( drop ) drop.vel += (Actor.RotateVector((FRandom[Junk](-1.5,.5),FRandom[Junk](-2.5,2.5)),players[e.Args[0]].mo.angle),FRandom[Junk](2.,5.));
|
||||
// don't autoswitch just yet (hacky)
|
||||
if ( swapto )
|
||||
{
|
||||
players[e.Args[0]].ReadyWeapon = null;
|
||||
players[e.Args[0]].PendingWeapon = WP_NOCHANGE;
|
||||
}
|
||||
players[e.Args[0]].ReadyWeapon = null;
|
||||
players[e.Args[0]].PendingWeapon = WP_NOCHANGE;
|
||||
}
|
||||
}
|
||||
if ( (item is 'ArmorNuggetItem') || (item is 'HealthNuggetItem') )
|
||||
|
|
|
|||
|
|
@ -985,13 +985,12 @@ Class SWWMWeapon : Weapon abstract
|
|||
bool wallponch; // is punching a wall (for activation checks)
|
||||
|
||||
Class<Ammo> dropammotype;
|
||||
Class<Weapon> SwapWeapon; // player can only own either this weapon or the SwapWeapon, if defined
|
||||
|
||||
Property DropAmmoType : dropammotype;
|
||||
Property SwapWeapon : SwapWeapon;
|
||||
|
||||
FlagDef NoFirstGive : SWeaponFlags, 0; // don't give ammo on first pickup (for weapons with a clip count)
|
||||
FlagDef HideInMenu : SWeaponFlags, 1; // don't show in inventory menu (usually for sister weapons)
|
||||
FlagDef NoSwapWeapon : SWeaponFlags, 2; // weapon is not affected by slot swapping
|
||||
|
||||
transient CVar phair; // use custom precise crosshair
|
||||
transient ui CVar ch_img, ch_siz, ch_grow, ch_col, ch_hp, ch_on, ch_force;
|
||||
|
|
@ -1000,16 +999,34 @@ Class SWWMWeapon : Weapon abstract
|
|||
ui Color ccol;
|
||||
ui Vector2 lagvpos;
|
||||
|
||||
bool IsSwapWeapon( Inventory i ) const
|
||||
{
|
||||
if ( bNoSwapWeapon || (i.GetClass() == GetClass()) ) return false;
|
||||
let w = SWWMWeapon(i);
|
||||
if ( w && !w.bNoSwapWeapon && (SlotNumber != -1) && (w.SlotNumber == SlotNumber) )
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
SWWMWeapon HasSwapWeapon( Actor other ) const
|
||||
{
|
||||
if ( bNoSwapWeapon ) return null;
|
||||
for ( Inventory i=other.inv; i; i=i.inv )
|
||||
{
|
||||
if ( IsSwapWeapon(i) )
|
||||
return SWWMWeapon(i);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
override void Touch( Actor toucher )
|
||||
{
|
||||
// cannot pick up swapweapon unless explicitly pressing use
|
||||
if ( swwm_swapweapons && SwapWeapon && toucher.FindInventory(SwapWeapon) )
|
||||
SWWMWeapon sw;
|
||||
if ( swwm_swapweapons && (sw = HasSwapWeapon(toucher)) )
|
||||
{
|
||||
if ( toucher.CheckLocalView() )
|
||||
{
|
||||
String t2 = GetDefaultByType(SwapWeapon).GetTag();
|
||||
Console.MidPrint(SmallFont,String.Format(StringTable.Localize("$SWWM_SWAPWEAPON"),t2,GetTag()));
|
||||
}
|
||||
Console.MidPrint(SmallFont,String.Format(StringTable.Localize("$SWWM_SWAPWEAPON"),sw.GetTag(),GetTag()));
|
||||
return;
|
||||
}
|
||||
Super.Touch(toucher);
|
||||
|
|
@ -1025,20 +1042,16 @@ Class SWWMWeapon : Weapon abstract
|
|||
if ( abs(diff.z) > rang ) return false;
|
||||
// if the toucher owns our SwapWeapon, drop it before picking us up
|
||||
bool swapto = false;
|
||||
if ( swwm_swapweapons && SwapWeapon )
|
||||
SWWMWeapon sw;
|
||||
if ( swwm_swapweapons && (sw = HasSwapWeapon(user)) )
|
||||
{
|
||||
let sw = user.FindInventory(SwapWeapon);
|
||||
if ( sw )
|
||||
if ( sw == user.player.ReadyWeapon ) swapto = true;
|
||||
user.DropInventory(sw);
|
||||
// don't autoswitch just yet (hacky)
|
||||
if ( swapto )
|
||||
{
|
||||
if ( Weapon(sw) == user.player.ReadyWeapon )
|
||||
swapto = true;
|
||||
user.DropInventory(sw);
|
||||
// don't autoswitch just yet (hacky)
|
||||
if ( swapto )
|
||||
{
|
||||
user.player.ReadyWeapon = null;
|
||||
user.player.PendingWeapon = WP_NOCHANGE;
|
||||
}
|
||||
user.player.ReadyWeapon = null;
|
||||
user.player.PendingWeapon = WP_NOCHANGE;
|
||||
}
|
||||
}
|
||||
Touch(user);
|
||||
|
|
@ -1071,7 +1084,7 @@ Class SWWMWeapon : Weapon abstract
|
|||
override bool HandlePickup( Inventory item )
|
||||
{
|
||||
// can't hold both weapons at once
|
||||
if ( swwm_swapweapons && SwapWeapon && (item.GetClass() == SwapWeapon) )
|
||||
if ( swwm_swapweapons && IsSwapWeapon(item) )
|
||||
return true;
|
||||
if ( (GetClass() == item.GetClass()) && !item.ShouldStay() )
|
||||
{
|
||||
|
|
|
|||
|
|
@ -303,14 +303,12 @@ Class PusherProjectile : Actor
|
|||
override void Touch( Actor toucher )
|
||||
{
|
||||
// cannot pick up swapweapon unless explicitly pressing use
|
||||
let swc = GetDefaultByType("PusherWeapon").SwapWeapon;
|
||||
if ( swwm_swapweapons && swc && toucher.FindInventory(swc) )
|
||||
let pw = GetDefaultByType("PusherWeapon");
|
||||
SWWMWeapon sw;
|
||||
if ( swwm_swapweapons && (sw = pw.HasSwapWeapon(toucher)) )
|
||||
{
|
||||
if ( toucher.CheckLocalView() )
|
||||
{
|
||||
String t2 = GetDefaultByType(swc).GetTag();
|
||||
Console.MidPrint(SmallFont,String.Format(StringTable.Localize("$SWWM_SWAPWEAPON"),t2,StringTable.Localize("$T_PUSHER")));
|
||||
}
|
||||
Console.MidPrint(SmallFont,String.Format(StringTable.Localize("$SWWM_SWAPWEAPON"),sw.GetTag(),StringTable.Localize("$T_PUSHER")));
|
||||
return;
|
||||
}
|
||||
let w = toucher.FindInventory("PusherWeapon");
|
||||
|
|
@ -339,21 +337,18 @@ Class PusherProjectile : Actor
|
|||
double rang = user.player?PlayerPawn(user.player.mo).UseRange:(user.Height/2);
|
||||
if ( abs(diff.z) > rang ) return false;
|
||||
// if the toucher owns our SwapWeapon, drop it before picking us up
|
||||
let swc = GetDefaultByType("PusherWeapon").SwapWeapon;
|
||||
if ( swwm_swapweapons && swc )
|
||||
let pw = GetDefaultByType("PusherWeapon");
|
||||
SWWMWeapon sw;
|
||||
if ( swwm_swapweapons && (sw = pw.HasSwapWeapon(user)) )
|
||||
{
|
||||
let sw = user.FindInventory(swc);
|
||||
bool swapto = false;
|
||||
if ( sw )
|
||||
if ( sw == user.player.ReadyWeapon ) swapto = true;
|
||||
user.DropInventory(sw);
|
||||
// don't autoswitch just yet (hacky)
|
||||
if ( swapto )
|
||||
{
|
||||
if ( sw == user.player.ReadyWeapon ) swapto = true;
|
||||
user.DropInventory(sw);
|
||||
// don't autoswitch just yet (hacky)
|
||||
if ( swapto )
|
||||
{
|
||||
user.player.ReadyWeapon = null;
|
||||
user.player.PendingWeapon = WP_NOCHANGE;
|
||||
}
|
||||
user.player.ReadyWeapon = null;
|
||||
user.player.PendingWeapon = WP_NOCHANGE;
|
||||
}
|
||||
}
|
||||
Touch(user);
|
||||
|
|
@ -429,7 +424,8 @@ 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(3+invoker.chargelevel*3);
|
||||
int dmg = int(3+invoker.chargelevel*7);
|
||||
if ( invoker.chargelevel > .4 ) invoker.chargelevel -= FRandom[Pusher](.01,.04);
|
||||
if ( d.HitType == TRACE_HitActor )
|
||||
{
|
||||
double diff = deltaangle(self.angle,AngleTo(d.HitActor));
|
||||
|
|
@ -602,7 +598,6 @@ Class PusherWeapon : SWWMWeapon
|
|||
Weapon.SlotPriority 2.;
|
||||
Weapon.SelectionOrder 1500;
|
||||
Stamina 10000;
|
||||
//SWWMWeapon.SwapWeapon "ItamexHammer";
|
||||
+WEAPON.MELEEWEAPON;
|
||||
Radius 20;
|
||||
Height 32;
|
||||
|
|
|
|||
|
|
@ -378,7 +378,7 @@ Class DragonBreathArm : Actor
|
|||
let p = Spawn("DragonBreathPuff",pos);
|
||||
p.alpha *= .6+.4*(ReactionTime/20.);
|
||||
p.scale *= 3.5-2.5*(ReactionTime/20.);
|
||||
SWWMUtility.DoExplosion(self,1+(reactiontime/2),1000+200*reactiontime,150-6*reactiontime,flags:DE_HOWL,ignoreme:bHITOWNER?null:target);
|
||||
SWWMUtility.DoExplosion(self,2+(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);
|
||||
|
|
@ -495,7 +495,7 @@ Class SaltImpact : Actor
|
|||
{
|
||||
Super.PostBeginPlay();
|
||||
A_AlertMonsters(swwm_uncapalert?0:6000);
|
||||
SWWMUtility.DoExplosion(self,12+special2*4,15000,100,40);
|
||||
SWWMUtility.DoExplosion(self,25+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);
|
||||
|
|
@ -593,8 +593,7 @@ Class SaltBeam : Actor
|
|||
for ( int i=0; i<t.ShootThroughList.Size(); i++ )
|
||||
{
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_PCross);
|
||||
if ( t.ShootThroughList[i].special == GlassBreak ) // fuck glass
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
|
||||
}
|
||||
for ( int i=0; i<t.WaterHitList.Size(); i++ )
|
||||
{
|
||||
|
|
@ -613,11 +612,11 @@ Class SaltBeam : Actor
|
|||
}
|
||||
if ( t.Results.HitType != TRACE_HitNone )
|
||||
{
|
||||
if ( (args[1] == 2) || swwm_omnibust ) BusterWall.Bust(t.Results,85+Accuracy*10,target,x,t.Results.HitPos.z);
|
||||
if ( (args[1] == 2) || swwm_omnibust ) BusterWall.Bust(t.Results,60+Accuracy*10,target,x,t.Results.HitPos.z);
|
||||
if ( t.Results.HitType == TRACE_HitActor )
|
||||
{
|
||||
SWWMUtility.DoKnockback(t.Results.HitActor,x,25000);
|
||||
t.Results.HitActor.DamageMobj(self,target,20+Accuracy*4,'Salt',DMG_THRUSTLESS);
|
||||
t.Results.HitActor.DamageMobj(self,target,35+Accuracy*5,'Salt',DMG_THRUSTLESS);
|
||||
if ( t.Results.HitActor && t.Results.HitActor.bIsMonster && !Random[Spreadgun](0,3) )
|
||||
t.Results.HitActor.Howl();
|
||||
}
|
||||
|
|
@ -688,7 +687,7 @@ Class SaltBeam : Actor
|
|||
if ( isFrozen() ) return;
|
||||
A_FadeOut(.04);
|
||||
if ( Random[Spreadgun](-2,args[2]/10) == 0 )
|
||||
SWWMUtility.DoExplosion(self,4+Accuracy,5000,32,flags:DE_HOWL,ignoreme:target);
|
||||
SWWMUtility.DoExplosion(self,5+Accuracy,5000,32,flags:DE_HOWL,ignoreme:target);
|
||||
if ( ((special2%4) || args[2]) && !special1 ) SpreadOut();
|
||||
args[2]++;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
|
|
@ -2083,8 +2082,7 @@ Class Spreadgun : SWWMWeapon
|
|||
for ( int i=0; i<t.ShootThroughList.Size(); i++ )
|
||||
{
|
||||
t.ShootThroughList[i].Activate(self,0,SPAC_PCross);
|
||||
if ( t.ShootThroughList[i].special == GlassBreak ) // fuck glass
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
|
||||
t.ShootThroughList[i].Activate(self,0,SPAC_Impact);
|
||||
}
|
||||
for ( int i=0; i<t.WaterHitList.Size(); i++ )
|
||||
{
|
||||
|
|
@ -2180,7 +2178,7 @@ Class Spreadgun : SWWMWeapon
|
|||
case 1:
|
||||
sst = new("SpreadSlugTracer");
|
||||
sst.ignoreme = self;
|
||||
sst.penetration = 120.;
|
||||
sst.penetration = 150.;
|
||||
a = FRandom[Spreadgun](0,360);
|
||||
s = FRandom[Spreadgun](0,.01);
|
||||
dir = (x2+y2*cos(a)*s+z2*sin(a)*s).unit();
|
||||
|
|
@ -2436,7 +2434,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,5,7000,bc:5);
|
||||
ProcessTraceHit(st,origin,dir,6,7000,bc:5);
|
||||
}
|
||||
for ( int i=0; i<9; i++ )
|
||||
{
|
||||
|
|
@ -2575,8 +2573,7 @@ Class Spreadgun : SWWMWeapon
|
|||
Weapon.SelectionOrder 500;
|
||||
Weapon.AmmoType1 "RedShell";
|
||||
Weapon.AmmoGive1 1;
|
||||
//SWWMWeapon.SwapWeapon "PuntzerBeta";
|
||||
SWWMWeapon.DropAmmoType "Clip";
|
||||
SWWMWeapon.DropAmmoType "Shell";
|
||||
Stamina 15000;
|
||||
+SWWMWEAPON.NOFIRSTGIVE;
|
||||
Radius 10;
|
||||
|
|
|
|||
|
|
@ -1107,8 +1107,7 @@ Class BiosparkBeam : Actor
|
|||
for ( int i=0; i<t.ShootThroughList.Size(); i++ )
|
||||
{
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_PCross);
|
||||
if ( t.ShootThroughList[i].special == GlassBreak ) // fuck glass
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
|
||||
}
|
||||
for ( int i=0; i<t.hitlist.Size(); i++ )
|
||||
{
|
||||
|
|
@ -1459,8 +1458,7 @@ Class BiosparkArc : Actor
|
|||
for ( int i=0; i<t.ShootThroughList.Size(); i++ )
|
||||
{
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_PCross);
|
||||
if ( t.ShootThroughList[i].special == GlassBreak ) // fuck glass
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
|
||||
}
|
||||
for ( int i=0; i<t.hitlist.Size(); i++ )
|
||||
{
|
||||
|
|
@ -2132,7 +2130,6 @@ Class Sparkster : SWWMWeapon
|
|||
Stamina 200000;
|
||||
Weapon.AmmoType1 "SparkUnit";
|
||||
Weapon.AmmoGive1 1;
|
||||
//SWWMWeapon.SwapWeapon "BlackfireIgniter";
|
||||
SWWMWeapon.DropAmmoType "SparkUnit";
|
||||
Sparkster.ClipCount 8;
|
||||
+SWWMWEAPON.NOFIRSTGIVE;
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ Class ExplodiumMagArm : Actor
|
|||
{
|
||||
Spawn("ExplodiumMagTrail",pos);
|
||||
if ( !(ReactionTime%2) )
|
||||
SWWMUtility.DoExplosion(self,1+reactiontime/4,3000+500*reactiontime,40+3*reactiontime,20);
|
||||
SWWMUtility.DoExplosion(self,2+reactiontime/2,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;
|
||||
|
|
@ -145,7 +145,7 @@ Class ExplodiumMagProj : Actor
|
|||
A_SetRenderStyle(1.,STYLE_Add);
|
||||
Scale *= 2.+.2*special1;
|
||||
A_AlertMonsters(swwm_uncapalert?0:6000);
|
||||
SWWMUtility.DoExplosion(self,25+20*special1,80000+8000*special1,90+10*special1,60,DE_EXTRAZTHRUST);
|
||||
SWWMUtility.DoExplosion(self,15+25*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);
|
||||
|
|
@ -396,7 +396,7 @@ Class ExplodiumGun : SWWMWeapon
|
|||
SWWMBulletTrail.DoTrail(self,origin,dir,10000,2);
|
||||
if ( d.HitType == TRACE_HitActor )
|
||||
{
|
||||
int dmg = 15;
|
||||
int dmg = 20;
|
||||
// might as well apply explosion on top
|
||||
if ( dmg >= d.HitActor.Health ) dmg += 25;
|
||||
SWWMUtility.DoKnockback(d.HitActor,d.HitDir,48000);
|
||||
|
|
@ -558,6 +558,7 @@ Class ExplodiumGun : SWWMWeapon
|
|||
Stamina 8000;
|
||||
ExplodiumGun.ClipCount 7;
|
||||
+WEAPON.EXPLOSIVE;
|
||||
+SWWMWEAPON.NOSWAPWEAPON;
|
||||
Radius 12;
|
||||
Height 24;
|
||||
}
|
||||
|
|
@ -818,7 +819,7 @@ Class DualExplodiumGun : SWWMWeapon
|
|||
SWWMBulletTrail.DoTrail(self,origin,dir,10000,2);
|
||||
if ( d.HitType == TRACE_HitActor )
|
||||
{
|
||||
int dmg = 15;
|
||||
int dmg = 20;
|
||||
// might as well apply explosion on top
|
||||
if ( dmg >= d.HitActor.Health ) dmg += 25;
|
||||
SWWMUtility.DoKnockback(d.HitActor,d.HitDir,48000);
|
||||
|
|
@ -934,6 +935,7 @@ Class DualExplodiumGun : SWWMWeapon
|
|||
DualExplodiumGun.ClipCount 7;
|
||||
+WEAPON.EXPLOSIVE;
|
||||
+SWWMWEAPON.HIDEINMENU;
|
||||
+SWWMWEAPON.NOSWAPWEAPON;
|
||||
}
|
||||
States
|
||||
{
|
||||
|
|
|
|||
|
|
@ -106,8 +106,7 @@ Class CandyBeam : Actor
|
|||
for ( int i=0; i<t.ShootThroughList.Size(); i++ )
|
||||
{
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_PCross);
|
||||
if ( t.ShootThroughList[i].special == GlassBreak ) // fuck glass
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
|
||||
}
|
||||
for ( int i=0; i<t.hitlist.Size(); i++ )
|
||||
{
|
||||
|
|
@ -1162,7 +1161,6 @@ Class CandyGun : SWWMWeapon
|
|||
Weapon.AmmoGive1 1;
|
||||
Weapon.AmmoGive2 1;
|
||||
Weapon.AmmoUse2 0;
|
||||
//SWWMWeapon.SwapWeapon "RayKhom";
|
||||
SWWMWeapon.DropAmmoType "CandyGunAmmo";
|
||||
CandyGun.ClipCount 7;
|
||||
+SWWMWEAPON.NOFIRSTGIVE;
|
||||
|
|
|
|||
|
|
@ -768,9 +768,8 @@ Class SilverBullet : SWWMWeapon
|
|||
{
|
||||
for ( int i=0; i<t.ShootThroughList.Size(); i++ )
|
||||
{
|
||||
t.ShootThroughList[i].Activate(self,0,SPAC_Impact);
|
||||
t.ShootThroughList[i].Activate(self,0,SPAC_PCross);
|
||||
if ( t.ShootThroughList[i].special == GlassBreak ) // fuck glass
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
|
||||
}
|
||||
for ( int i=0; i<t.WaterHitList.Size(); i++ )
|
||||
{
|
||||
|
|
@ -869,8 +868,7 @@ Class SilverBullet : SWWMWeapon
|
|||
for ( int i=0; i<t.ShootThroughList.Size(); i++ )
|
||||
{
|
||||
t.ShootThroughList[i].Activate(self,0,SPAC_PCross);
|
||||
if ( t.ShootThroughList[i].special == GlassBreak ) // fuck glass
|
||||
t.ShootThroughList[i].Activate(target,0,SPAC_Impact);
|
||||
t.ShootThroughList[i].Activate(self,0,SPAC_Impact);
|
||||
}
|
||||
for ( int i=0; i<t.WaterHitList.Size(); i++ )
|
||||
{
|
||||
|
|
@ -1162,7 +1160,6 @@ Class SilverBullet : SWWMWeapon
|
|||
Weapon.AmmoGive1 1;
|
||||
Weapon.AmmoType2 "SilverBulletAmmo2";
|
||||
Weapon.AmmoGive2 0;
|
||||
//SWWMWeapon.SwapWeapon "EMPCarbine";
|
||||
SWWMWeapon.DropAmmoType "SilverBulletAmmo";
|
||||
SilverBullet.ClipCount 5;
|
||||
+SWWMWEAPON.NOFIRSTGIVE;
|
||||
|
|
|
|||
|
|
@ -763,9 +763,8 @@ Class SWWMItemSense : Thinker
|
|||
if ( (item is 'RedShell') || (item is 'GreenShell')
|
||||
|| (item is 'WhiteShell') || (item is 'BlueShell')
|
||||
|| (item is 'BlackShell') || (item is 'PurpleShell')
|
||||
|| (item is 'GoldShell') || (item is 'EvisceratorShell')
|
||||
|| (item is 'HellblazerMissiles')|| (item is 'HellblazerCrackshots')
|
||||
|| (item is 'HellblazerRavagers')|| (item is 'HellblazerWarheads') )
|
||||
|| (item is 'GoldShell')/* || (item is 'SMW05Ammo')
|
||||
|| (item is 'SheenAmmo')*/ )
|
||||
tag = item.PickupMessage();
|
||||
else tag = item.GetTag();
|
||||
}
|
||||
|
|
@ -873,7 +872,13 @@ Class SWWMCombatTracker : Thinker
|
|||
t.next = hnd.trackers;
|
||||
t.bBOSS = target.bBOSS;
|
||||
t.bFRIENDLY = target.bFRIENDLY;
|
||||
if ( hnd.trackers ) hnd.trackers.prev = t;
|
||||
if ( hnd.trackers )
|
||||
{
|
||||
hnd.trackers.prev = t;
|
||||
// propagate cvar values
|
||||
t.mxdist = hnd.trackers.mxdist;
|
||||
t.dbar = hnd.trackers.dbar;
|
||||
}
|
||||
hnd.trackers = t;
|
||||
hnd.trackers_cnt++;
|
||||
return t;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue