Quadravol level 2 projectile + melee tweaks.
This commit is contained in:
parent
1ca5f97870
commit
0b93a01401
30 changed files with 316 additions and 43 deletions
|
|
@ -115,7 +115,7 @@ Class Quadravol : SWWMWeapon
|
|||
Actor p;
|
||||
switch ( idx )
|
||||
{
|
||||
case 0:
|
||||
default:
|
||||
A_QuakeEx(3,3,3,15,0,10,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.4);
|
||||
A_BumpFOV(.98);
|
||||
A_SWWMFlash();
|
||||
|
|
@ -131,30 +131,35 @@ Class Quadravol : SWWMWeapon
|
|||
{
|
||||
p.tracer = self;
|
||||
p.master = fool;
|
||||
p.special1 = bMelee?100:50;
|
||||
p.special2 = bMelee?120000:40000;
|
||||
p.special1 += bMelee?100:50;
|
||||
p.special2 += bMelee?120000:40000;
|
||||
p.bAMBUSH = bMelee;
|
||||
p.ExplodeMissile(null,null);
|
||||
self.DamageMobj(invoker,self,bAMBUSH?20:40,'Fire',DMG_EXPLOSION);
|
||||
}
|
||||
for ( int i=0; i<4; i++ )
|
||||
{
|
||||
let s = Spawn("SWWMSmoke",origin);
|
||||
s.special1 = 1;
|
||||
s.scale *= 1.3;
|
||||
s.alpha *= .2;
|
||||
s.vel += vel*.5+x*FRandom[Quadravol](5.,15.)+y*FRandom[Quadravol](-.5,.5)+z*FRandom[Quadravol](-.5,.5);
|
||||
}
|
||||
for ( int i=0; i<10; i++ )
|
||||
{
|
||||
let s = Spawn("SWWMSpark",origin);
|
||||
s.scale *= .3;
|
||||
s.alpha *= .4;
|
||||
s.vel += vel*.5+x*FRandom[Quadravol](4.,8.)+y*FRandom[Quadravol](-1.,1.)+z*FRandom[Quadravol](-1.,1.);
|
||||
self.DamageMobj(invoker,self,bMelee?20:40,'Fire',DMG_EXPLOSION);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
A_Log("\cg// TODO - Fire Level 2\c-");
|
||||
A_QuakeEx(4,4,4,18,0,10,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.5);
|
||||
A_BumpFOV(.97);
|
||||
A_SWWMFlash();
|
||||
SWWMHandler.DoFlash(self,Color(64,255,192,64),7);
|
||||
A_AlertMonsters(swwm_uncapalert?0:3000);
|
||||
SWWMUtility.DoKnockback(self,-x,2500.);
|
||||
p = Spawn("QuadProj2",origin);
|
||||
p.target = self;
|
||||
p.angle = atan2(x2.y,x2.x);
|
||||
p.pitch = asin(-x2.z);
|
||||
p.vel = x2*p.speed;
|
||||
if ( pointblank || bMelee )
|
||||
{
|
||||
p.tracer = self;
|
||||
p.master = fool;
|
||||
p.special1 = bMelee?150:80;
|
||||
p.special2 = bMelee?150000:60000;
|
||||
p.bAMBUSH = bMelee;
|
||||
p.ExplodeMissile(null,null);
|
||||
self.DamageMobj(invoker,self,bMelee?20:40,'Fire',DMG_EXPLOSION);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
A_Log("\cg// TODO - Fire Level 3\c-");
|
||||
|
|
@ -167,6 +172,23 @@ Class Quadravol : SWWMWeapon
|
|||
else A_Log("\cg// TODO - Fire Level 5\c-");
|
||||
break;
|
||||
}
|
||||
for ( int i=0; i<(4+idx); i++ )
|
||||
{
|
||||
let s = Spawn("SWWMSmoke",origin);
|
||||
s.special1 = 1;
|
||||
s.scale *= 1.3;
|
||||
s.alpha *= .2;
|
||||
s.vel += vel*.5+x*FRandom[Quadravol](5.,15.)+y*FRandom[Quadravol](-.5,.5)+z*FRandom[Quadravol](-.5,.5);
|
||||
s.vel *= 1.+.1*idx;
|
||||
}
|
||||
for ( int i=0; i<(10+2*idx); i++ )
|
||||
{
|
||||
let s = Spawn("SWWMSpark",origin);
|
||||
s.scale *= .3;
|
||||
s.alpha *= .4;
|
||||
s.vel += vel*.5+x*FRandom[Quadravol](4.,8.)+y*FRandom[Quadravol](-1.,1.)+z*FRandom[Quadravol](-1.,1.);
|
||||
s.vel *= 1.+.1*idx;
|
||||
}
|
||||
invoker.chargelevel = 0;
|
||||
invoker.charged = true; // eat it up
|
||||
if ( bMelee ) return ResolveState(null);
|
||||
|
|
@ -248,7 +270,7 @@ Class Quadravol : SWWMWeapon
|
|||
action void A_FireBayonet()
|
||||
{
|
||||
A_StartSound("quadshot/bayonetfire",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
A_Melee(50,"spreadgun/slug",1.5,.8,-.5,MELEE_Rip|MELEE_FleshSound|MELEE_NoRage|MELEE_NoUse);
|
||||
A_Melee(60,"spreadgun/slug",1.5,.6,-.2,MELEE_Rip|MELEE_FleshSound|MELEE_NoRage|MELEE_NoUse,null);
|
||||
Vector3 dir = SWWMUtility.Vec3FromAngles(angle,pitch);
|
||||
vel += dir*4.;
|
||||
A_QuakeEx(4,4,4,8,0,10,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.75);
|
||||
|
|
@ -465,14 +487,18 @@ Class Quadravol : SWWMWeapon
|
|||
XZW2 A 2
|
||||
{
|
||||
A_StartSound("demolitionist/handsup",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
A_PlayerMelee();
|
||||
return A_JumpIf(invoker.onehand,"User11H");
|
||||
}
|
||||
XZW7 BCDEF 2;
|
||||
XZW7 G 2 A_StartSound("demolitionist/wswing",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZW7 BCD 2;
|
||||
XZW7 E 2
|
||||
{
|
||||
A_PlayerMelee();
|
||||
A_StartSound("demolitionist/wswing",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
}
|
||||
XZW7 FG 2;
|
||||
XZW7 H 2 A_Parry(6);
|
||||
XZW7 I 1;
|
||||
XZW7 J 1 A_JumpIf(A_Melee(10,"demolitionist/whitm",1.5,.8,.2),"Bayonet");
|
||||
XZW7 J 1 A_JumpIf(A_Melee(20,"demolitionist/whitm",1.2,.6,.2),"Bayonet");
|
||||
XZW7 KLM 1;
|
||||
XZW7 NOPQRST 2;
|
||||
XZW7 UVWX 3;
|
||||
|
|
@ -602,11 +628,16 @@ Class Quadravol : SWWMWeapon
|
|||
User11H:
|
||||
XZW9 G 2;
|
||||
XZWC Z 2;
|
||||
XZWD ABCD 2;
|
||||
XZWD E 2 A_StartSound("demolitionist/wswing",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
XZWD AB 2;
|
||||
XZWD C 2
|
||||
{
|
||||
A_PlayerMelee();
|
||||
A_StartSound("demolitionist/wswing",CHAN_WEAPON,CHANF_OVERLAP);
|
||||
}
|
||||
XZWD DE 2;
|
||||
XZWD F 2 A_Parry(6);
|
||||
XZWD G 1;
|
||||
XZWD H 1 A_JumpIf(A_Melee(10,"demolitionist/whitm",1.5,.8,.2),"Bayonet1H");
|
||||
XZWD H 1 A_JumpIf(A_Melee(20,"demolitionist/whitm",1.2,.6,.2),"Bayonet1H");
|
||||
XZWD IJK 1;
|
||||
XZWD LMNOPQR 2;
|
||||
XZWD STUV 3;
|
||||
|
|
|
|||
|
|
@ -22,6 +22,15 @@ Class QuadExplLight : PaletteLight
|
|||
ReactionTime 20;
|
||||
}
|
||||
}
|
||||
Class QuadExplLight2 : PaletteLight
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "QuadExpl";
|
||||
Args 0,0,0,250;
|
||||
ReactionTime 25;
|
||||
}
|
||||
}
|
||||
|
||||
Class QuadFlare : Actor
|
||||
{
|
||||
|
|
@ -198,6 +207,39 @@ Class QuadEmber : Actor
|
|||
}
|
||||
}
|
||||
|
||||
Class QuadExplRing : Actor
|
||||
{
|
||||
Default
|
||||
{
|
||||
RenderStyle "Add";
|
||||
Scale 1.2;
|
||||
Radius .1;
|
||||
Height 0;
|
||||
+NOGRAVITY;
|
||||
+NOBLOCKMAP;
|
||||
+FORCEXYBILLBOARD;
|
||||
+NOTELEPORT;
|
||||
+NOINTERACTION;
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
XRG8 ACEGIKMOQSUW 1 Bright A_SetScale(scale.x*1.05);
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class QuadProj : Actor
|
||||
{
|
||||
double drift, accelrate, maxspeed;
|
||||
|
|
@ -252,7 +294,7 @@ Class QuadProj : Actor
|
|||
{
|
||||
A_StopSound(CHAN_BODY);
|
||||
Scale *= 2.;
|
||||
A_SprayDecal("ShockMarkBig",50);
|
||||
A_SprayDecal("ShockMark",50);
|
||||
Vector3 x = SWWMUtility.Vec3FromAngles(angle,pitch);
|
||||
if ( master && ((master.pos.z <= master.floorz) || !master.TestMobjZ()) )
|
||||
{
|
||||
|
|
@ -261,14 +303,16 @@ Class QuadProj : Actor
|
|||
SWWMUtility.DoKnockback(master,x+(0,0,hdiff*.5),200000+special2);
|
||||
}
|
||||
if ( tracer ) SWWMUtility.DoKnockback(tracer,-x+(0,0,.1),bAMBUSH?150000:500000);
|
||||
A_QuakeEx(3,3,3,20,0,500,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,falloff:200,rollintensity:.6);
|
||||
SWWMUtility.DoExplosion(self,0,80000+special2,240,80,DE_BLAST|DE_EXTRAZTHRUST);
|
||||
SWWMUtility.DoExplosion(self,100+special1,0,240,0,DE_QUADRAVOL|DE_NOSPLASH,ignoreme:tracer);
|
||||
if ( SWWMUtility.DoExplosion(self,150+special1,0,200,80,DE_HOWL|DE_NOSPLASH,ignoreme:tracer) && bAMBUSH && target )
|
||||
SWWMUtility.AchievementProgressInc("roast",1,target.player);
|
||||
A_StartSound("quadshot/hit",CHAN_WEAPON,attenuation:.8);
|
||||
A_StartSound("quadshot/hit",CHAN_VOICE,attenuation:.6);
|
||||
A_StartSound("quadshot/hit",CHAN_WEAPON,attenuation:.6);
|
||||
A_StartSound("quadshot/hit",CHAN_VOICE,attenuation:.4);
|
||||
A_AlertMonsters(swwm_uncapalert?0:1500);
|
||||
Spawn("QuadExplLight",pos);
|
||||
Spawn("QuadExplRing",pos);
|
||||
int numpt = Random[Quadravol](12,18);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
|
|
@ -336,6 +380,200 @@ Class QuadProj : Actor
|
|||
}
|
||||
}
|
||||
|
||||
Class QuadExplArm : Actor
|
||||
{
|
||||
Default
|
||||
{
|
||||
PROJECTILE;
|
||||
+THRUACTORS;
|
||||
+BOUNCEONWALLS;
|
||||
+BOUNCEONFLOORS;
|
||||
+BOUNCEONCEILINGS;
|
||||
+CANBOUNCEWATER;
|
||||
+NODAMAGETHRUST;
|
||||
+FORCERADIUSDMG;
|
||||
-NOGRAVITY;
|
||||
Gravity .35;
|
||||
BounceFactor 1.;
|
||||
Radius 2;
|
||||
Height 4;
|
||||
}
|
||||
override void PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
reactiontime = Random[ExploS](4,8);
|
||||
double ang, pt;
|
||||
ang = FRandom[ExploS](0,360);
|
||||
pt = FRandom[ExploS](-90,90);
|
||||
vel = SWWMUtility.Vec3FromAngles(ang,pt)*FRandom[ExploS](12.,32.);
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
TNT1 A 1
|
||||
{
|
||||
Spawn("QuadExplTrail",pos);
|
||||
if ( !(ReactionTime%2) )
|
||||
SWWMUtility.DoExplosion(self,8+reactiontime*3,0,40+5*reactiontime,20,DE_QUADRAVOL|DE_NOSPLASH,ignoreme:tracer);
|
||||
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*.3;
|
||||
s.special1 = Random[ExploS](1,3);
|
||||
s.scale *= 3.;
|
||||
s.alpha *= .1+.4*(ReactionTime/8.);
|
||||
int numpt = Random[Quadravol](1,4);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
s = Spawn("QuadEmber",pos);
|
||||
s.vel += vel*.4;
|
||||
}
|
||||
A_CountDown();
|
||||
}
|
||||
Wait;
|
||||
}
|
||||
}
|
||||
|
||||
Class QuadExplTrail : Actor
|
||||
{
|
||||
Default
|
||||
{
|
||||
RenderStyle "Add";
|
||||
+NOBLOCKMAP;
|
||||
+NOGRAVITY;
|
||||
+FORCEXYBILLBOARD;
|
||||
+NOTELEPORT;
|
||||
+NOINTERACTION;
|
||||
Scale 1.2;
|
||||
}
|
||||
override void Tick()
|
||||
{
|
||||
if ( isFrozen() ) return;
|
||||
if ( !CheckNoDelay() || (tics == -1) ) return;
|
||||
if ( tics > 0 ) tics--;
|
||||
while ( !tics )
|
||||
{
|
||||
if ( !SetState(CurState.NextState) )
|
||||
return;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
XEX0 ACEGIKMOQS 1 Bright A_SetScale(scale.x*1.03);
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class QuadExplRing2 : QuadExplRing
|
||||
{
|
||||
Default
|
||||
{
|
||||
Scale 1.6;
|
||||
}
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
XRG8 ABCDEFGHIJKLMNOPQRSTUVWX 1 Bright A_SetScale(scale.x*1.03);
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class QuadProj2 : QuadProj
|
||||
{
|
||||
Default
|
||||
{
|
||||
Scale .85;
|
||||
Radius 8;
|
||||
Height 8;
|
||||
Speed 40;
|
||||
QuadProj.Drift .25;
|
||||
QuadProj.AccelRate 20;
|
||||
QuadProj.MaxSpeed 80;
|
||||
}
|
||||
override void A_QuadTrail()
|
||||
{
|
||||
let s = Spawn("QuadTrail",pos);
|
||||
s.scale *= .8;
|
||||
s.vel = vel*.3;
|
||||
s = Spawn("SWWMHalfSmoke",pos);
|
||||
s.vel = (FRandom[Quadravol](-.4,.4),FRandom[Quadravol](-.4,.4),FRandom[Quadravol](-.4,.4));
|
||||
s.vel += vel*.4;
|
||||
s.alpha *= .6;
|
||||
int numpt = Random[Quadravol](5,25);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
s = Spawn("QuadEmber",pos);
|
||||
s.vel += vel*.4;
|
||||
}
|
||||
}
|
||||
override void A_QuadExplode()
|
||||
{
|
||||
A_StopSound(CHAN_BODY);
|
||||
Scale *= 2.4;
|
||||
A_SprayDecal("ShockMarkBig",50);
|
||||
Vector3 x = SWWMUtility.Vec3FromAngles(angle,pitch);
|
||||
if ( master && ((master.pos.z <= master.floorz) || !master.TestMobjZ()) )
|
||||
{
|
||||
Vector3 rel = level.Vec3Diff(master.pos,pos);
|
||||
double hdiff = 1.-2.*clamp((rel.z-4.)/master.height,0.,.5);
|
||||
SWWMUtility.DoKnockback(master,x+(0,0,hdiff*.5),250000+special2);
|
||||
}
|
||||
if ( tracer ) SWWMUtility.DoKnockback(tracer,-x+(0,0,.1),bAMBUSH?160000:600000);
|
||||
A_QuakeEx(5,5,5,25,0,900,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,falloff:400,rollintensity:.8);
|
||||
SWWMUtility.DoExplosion(self,0,100000+special2,480,120,DE_BLAST|DE_EXTRAZTHRUST);
|
||||
SWWMUtility.DoExplosion(self,200+special1,0,480,0,DE_QUADRAVOL|DE_NOSPLASH,ignoreme:tracer);
|
||||
if ( SWWMUtility.DoExplosion(self,300+special1,0,400,120,DE_HOWL|DE_NOSPLASH,ignoreme:tracer) && bAMBUSH && target )
|
||||
SWWMUtility.AchievementProgressInc("roast",1,target.player);
|
||||
A_StartSound("quadshot/twohit",CHAN_WEAPON,attenuation:.5);
|
||||
A_StartSound("quadshot/twohit",CHAN_VOICE,attenuation:.25);
|
||||
A_AlertMonsters(swwm_uncapalert?0:2500);
|
||||
Spawn("QuadExplLight2",pos);
|
||||
Spawn("QuadExplRing2",pos);
|
||||
int numpt = Random[Quadravol](20,30);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
Vector3 pvel = (FRandom[Quadravol](-1,1),FRandom[Quadravol](-1,1),FRandom[Quadravol](-1,1)).unit()*FRandom[Quadravol](2,12);
|
||||
let s = Spawn("SWWMSmoke",pos);
|
||||
s.vel = pvel;
|
||||
s.special1 = Random[Quadravol](2,3);
|
||||
s.scale *= 4.;
|
||||
s.alpha *= .3;
|
||||
}
|
||||
numpt = Random[Quadravol](15,20);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
Vector3 pvel = (FRandom[Quadravol](-1,1),FRandom[Quadravol](-1,1),FRandom[Quadravol](-1,1)).unit()*FRandom[Quadravol](4,16);
|
||||
let s = Spawn("SWWMSpark",pos);
|
||||
s.vel = pvel;
|
||||
}
|
||||
numpt = Random[Quadravol](8,12);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
Vector3 pvel = (FRandom[Quadravol](-1,1),FRandom[Quadravol](-1,1),FRandom[Quadravol](-1,1)).unit()*FRandom[Quadravol](6,12);
|
||||
let s = Spawn("SWWMChip",pos);
|
||||
s.vel = pvel;
|
||||
s.scale *= FRandom[Quadravol](0.9,1.8);
|
||||
}
|
||||
numpt = Random[Quadravol](12,16);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
let s = Spawn("QuadExplArm",pos);
|
||||
s.target = target;
|
||||
s.tracer = tracer;
|
||||
}
|
||||
if ( swwm_omnibust ) BusterWall.ProjectileBust(self,300,SWWMUtility.Vec3FromAngles(angle,pitch));
|
||||
}
|
||||
|
||||
States
|
||||
{
|
||||
Death:
|
||||
TNT1 A 0 A_QuadExplode();
|
||||
XEX0 ABCDEFGHIJKLMNOPQRS 1 Bright A_SetScale(scale.x*1.065);
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class OnFireLight : PointLightFlickerRandomAttenuated
|
||||
{
|
||||
OnFire of;
|
||||
|
|
|
|||
|
|
@ -177,6 +177,7 @@ Class PunchImpact : Actor
|
|||
{
|
||||
Default
|
||||
{
|
||||
Tag "WallCrack";
|
||||
Radius 0.1;
|
||||
Height 0;
|
||||
+NOGRAVITY;
|
||||
|
|
@ -189,7 +190,7 @@ Class PunchImpact : Actor
|
|||
Super.PostBeginPlay();
|
||||
A_QuakeEx(2,2,2,12,0,200,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,falloff:100,rollIntensity:.3);
|
||||
A_StartSound("demolitionist/punch",CHAN_VOICE,CHANF_DEFAULT,bAMBUSH?.6:1.);
|
||||
A_SprayDecal("WallCrack",-20);
|
||||
A_SprayDecal(GetTag(),-20);
|
||||
int numpt = Random[Ponch](5,10);
|
||||
if ( bAMBUSH ) numpt /= 3;
|
||||
Vector3 x = SWWMUtility.Vec3FromAngles(angle,pitch);
|
||||
|
|
|
|||
|
|
@ -390,7 +390,7 @@ extend Class SWWMWeapon
|
|||
GiveInventory("ParryDamageChecker",1); // need this so parried projectiles deal extra damage
|
||||
}
|
||||
// multi-hit cone rather than the usual one-hit arc, more fun
|
||||
private action bool TryMelee( double spread, int dmg, String hitsound, double rangemul, double kickmul, int flags )
|
||||
private action bool TryMelee( double spread, int dmg, String hitsound, double rangemul, double kickmul, int flags, Class<Actor> impactclass )
|
||||
{
|
||||
Vector3 x, y, z, dir;
|
||||
[x, y, z] = swwm_CoordUtil.GetAxes(pitch,angle,roll);
|
||||
|
|
@ -446,9 +446,9 @@ extend Class SWWMWeapon
|
|||
mt.hits[i].a.TraceBleed(newdmg,invoker);
|
||||
mt.hits[i].a.SpawnBlood(mt.hits[i].pos,atan2(mt.hits[i].dir.y,mt.hits[i].dir.x)+180,newdmg);
|
||||
}
|
||||
else
|
||||
else if ( impactclass )
|
||||
{
|
||||
let p = Spawn(raging?"BigPunchImpact":"PunchImpact",mt.hits[i].pos);
|
||||
let p = Spawn(raging?(Class<Actor>)("BigPunchImpact"):impactclass,mt.hits[i].pos);
|
||||
p.angle = atan2(mt.hits[i].dir.y,mt.hits[i].dir.x);
|
||||
}
|
||||
if ( (flags&MELEE_HammerHit) && (mt.hits[i].a.Health <= mt.hits[i].a.GetGibHealth()) )
|
||||
|
|
@ -498,7 +498,7 @@ extend Class SWWMWeapon
|
|||
A_BumpFOV(.96);
|
||||
return true;
|
||||
}
|
||||
action bool A_Melee( int dmg = 40, String hitsound = "", double rangemul = 1., double spreadmul = 1., double kickmul = 1., int flags = 0 )
|
||||
action bool A_Melee( int dmg = 40, String hitsound = "", double rangemul = 1., double spreadmul = 1., double kickmul = 1., int flags = 0, Class<Actor> impactclass = "PunchImpact" )
|
||||
{
|
||||
let raging = RagekitPower(FindInventory("RagekitPower"));
|
||||
if ( flags&MELEE_NoRage ) raging = null;
|
||||
|
|
@ -535,7 +535,7 @@ extend Class SWWMWeapon
|
|||
// check for shootables
|
||||
SWWMBulletTrail.DoTrail(self,origin,dir,DEFMELEERANGE*rangemul,0);
|
||||
}
|
||||
bool res = TryMelee((raging?.3:.2)*spreadmul,dmg,hitsound,rangemul,kickmul,flags);
|
||||
bool res = TryMelee((raging?.3:.2)*spreadmul,dmg,hitsound,rangemul,kickmul,flags,impactclass);
|
||||
if ( res && !(flags&MELEE_Rip) ) return res;
|
||||
// check for walls instead
|
||||
FTranslatedLineTarget t;
|
||||
|
|
@ -560,10 +560,13 @@ extend Class SWWMWeapon
|
|||
if ( !d.LineSide ) HitNormal *= -1;
|
||||
if ( !(flags&MELEE_NoUse) ) d.HitLine.RemoteActivate(self,d.LineSide,SPAC_Impact,d.HitLocation+HitNormal*4);
|
||||
}
|
||||
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 ( impactclass )
|
||||
{
|
||||
let p = Spawn(raging?(Class<Actor>)("BigPunchImpact"):impactclass,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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue