The Quadravol is complete.
This commit is contained in:
parent
0b93a01401
commit
e9f663c8ff
6 changed files with 447 additions and 25 deletions
|
|
@ -1,3 +1,3 @@
|
|||
[default]
|
||||
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r354 \cu(Sun 21 Aug 12:44:40 CEST 2022)\c-";
|
||||
SWWM_SHORTVER="\cw1.3pre r354 \cu(2022-08-21 12:44:40)\c-";
|
||||
SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r356 \cu(Sun 21 Aug 16:23:32 CEST 2022)\c-";
|
||||
SWWM_SHORTVER="\cw1.3pre r356 \cu(2022-08-21 16:23:32)\c-";
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ Weapon models:
|
|||
- Puntzer Beta
|
||||
- Puntzer Gamma
|
||||
x Sheen HMG
|
||||
½ Quadravol
|
||||
x Quadravol
|
||||
- Sparkster Rifle
|
||||
- Mortal Rifle
|
||||
- Ray-Khom
|
||||
|
|
|
|||
|
|
@ -93,8 +93,5 @@ extend Class Quadravol
|
|||
Screen.DrawTexture(BulletTex[0],false,bx-6,by-(10+i*8),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
if ( chambered ) Screen.DrawTexture(BulletTex[charged],false,bx-14,by-10,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
Screen.DrawText(ChargeFont,Font.CR_UNTRANSLATED,bx-14,by-20,String.Format("%d",chargelevel),DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
|
||||
// PLACEHOLDER
|
||||
String str = "THIS WEAPON IS NOT YET FULLY IMPLEMENTED";
|
||||
Screen.DrawText(NewSmallFont,Font.CR_RED,(Screen.GetWidth()-NewSmallFont.StringWidth(str)*CleanXFac_1)/2,Screen.GetHeight()-(swwm_hudmargin*hs+NewSmallFont.GetHeight()*CleanYFac_1),str,DTA_CleanNoMove_1,true);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -109,10 +109,13 @@ Class Quadravol : SWWMWeapon
|
|||
}
|
||||
rings += 3;
|
||||
}
|
||||
if ( bMelee && fool ) SWWMUtility.AchievementProgressInc("roast",1,player);
|
||||
if ( (bMelee && fool) || (idx>=4) ) A_StartSound("quadshot/pointblank",CHAN_WEAPON,CHANF_OVERLAP,.6+idx*.1,.4-idx*.05,1.2-idx*.05);
|
||||
Vector3 x2, y2, z2;
|
||||
[x2, y2, z2] = swwm_CoordUtil.GetAxes(BulletSlope(),angle,roll);
|
||||
double a, s;
|
||||
Actor p;
|
||||
bool bExtra = ((idx>=4)&&invoker.chambered&&!invoker.charged);
|
||||
switch ( idx )
|
||||
{
|
||||
default:
|
||||
|
|
@ -121,7 +124,7 @@ Class Quadravol : SWWMWeapon
|
|||
A_SWWMFlash();
|
||||
SWWMHandler.DoFlash(self,Color(64,255,192,64),5);
|
||||
A_AlertMonsters(swwm_uncapalert?0:2000);
|
||||
SWWMUtility.DoKnockback(self,-x,1500.);
|
||||
SWWMUtility.DoKnockback(self,-x,20000.);
|
||||
p = Spawn("QuadProj",origin);
|
||||
p.target = self;
|
||||
p.angle = atan2(x2.y,x2.x);
|
||||
|
|
@ -135,7 +138,6 @@ Class Quadravol : SWWMWeapon
|
|||
p.special2 += bMelee?120000:40000;
|
||||
p.bAMBUSH = bMelee;
|
||||
p.ExplodeMissile(null,null);
|
||||
self.DamageMobj(invoker,self,bMelee?20:40,'Fire',DMG_EXPLOSION);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
|
|
@ -144,7 +146,7 @@ Class Quadravol : SWWMWeapon
|
|||
A_SWWMFlash();
|
||||
SWWMHandler.DoFlash(self,Color(64,255,192,64),7);
|
||||
A_AlertMonsters(swwm_uncapalert?0:3000);
|
||||
SWWMUtility.DoKnockback(self,-x,2500.);
|
||||
SWWMUtility.DoKnockback(self,-x,40000.);
|
||||
p = Spawn("QuadProj2",origin);
|
||||
p.target = self;
|
||||
p.angle = atan2(x2.y,x2.x);
|
||||
|
|
@ -158,20 +160,95 @@ Class Quadravol : SWWMWeapon
|
|||
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-");
|
||||
A_QuakeEx(6,6,6,25,0,10,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.8);
|
||||
A_BumpFOV(.96);
|
||||
A_SWWMFlash();
|
||||
SWWMHandler.DoFlash(self,Color(64,255,192,64),8);
|
||||
A_AlertMonsters(swwm_uncapalert?0:4000);
|
||||
SWWMUtility.DoKnockback(self,-x,80000.);
|
||||
p = Spawn("QuadProj3",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?200:100;
|
||||
p.special2 = bMelee?180000:80000;
|
||||
p.bAMBUSH = bMelee;
|
||||
p.ExplodeMissile(null,null);
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
A_Log("\cg// TODO - Fire Level 4\c-");
|
||||
A_QuakeEx(7,7,7,30,0,10,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:1.2);
|
||||
A_BumpFOV(.95);
|
||||
A_SWWMFlash();
|
||||
SWWMHandler.DoFlash(self,Color(64,255,192,64),12);
|
||||
A_AlertMonsters(swwm_uncapalert?0:6000);
|
||||
SWWMUtility.DoKnockback(self,-x,150000.);
|
||||
if ( pointblank || bMelee )
|
||||
{
|
||||
p = Spawn("QuadProj3",origin);
|
||||
p.target = self;
|
||||
p.angle = atan2(x2.y,x2.x);
|
||||
p.pitch = asin(-x2.z);
|
||||
p.vel = x2*p.speed;
|
||||
p.tracer = self;
|
||||
p.master = fool;
|
||||
p.special1 = bMelee?300:200;
|
||||
p.special2 = bMelee?200000:100000;
|
||||
p.bAMBUSH = bMelee;
|
||||
p.ExplodeMissile(null,null);
|
||||
}
|
||||
else for ( int i=0; i<20; i++ )
|
||||
{
|
||||
s = FRandom[Quadravol](0,.2);
|
||||
a = (i%4)*90 + FRandom[Quadravol](-50,50)*s;
|
||||
dir = SWWMUtility.ConeSpread(x2,y2,z2,a,s);
|
||||
p = Spawn("QuadProjSub2",origin);
|
||||
p.target = self;
|
||||
p.angle = atan2(dir.y,dir.x);
|
||||
p.pitch = asin(-dir.z);
|
||||
p.vel = dir*p.speed*FRandom[Quadravol](1.,1.5);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if ( !invoker.charged ) A_Log("\cg// TODO - Fire Level 5+\c-");
|
||||
else A_Log("\cg// TODO - Fire Level 5\c-");
|
||||
A_QuakeEx(8+bExtra,8+bExtra,8+bExtra,40,0,10,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:1.5+bExtra*0.25);
|
||||
A_BumpFOV(.94-bExtra*.1);
|
||||
A_SWWMFlash();
|
||||
SWWMHandler.DoFlash(self,Color(64,255,192,64),15+bExtra*3);
|
||||
A_AlertMonsters(swwm_uncapalert?0:8000);
|
||||
if ( bMelee ) SWWMUtility.DoKnockback(self,-x,600000.+bExtra*100000.);
|
||||
else if ( pointblank ) SWWMUtility.DoKnockback(self,-x,1500000.+bExtra*500000.);
|
||||
else SWWMUtility.DoKnockback(self,-x,400000.+bExtra*100000.);
|
||||
if ( fool )
|
||||
{
|
||||
SWWMUtility.DoKnockback(fool,x,1500000.+bExtra*500000.);
|
||||
if ( fool.bCANBLAST && !fool.bDONTBLAST ) fool.bBLASTED = true;
|
||||
}
|
||||
int numpt = bExtra?15:10;
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
s = FRandom[Quadravol](0,bExtra?.5:.4);
|
||||
a = (i%4)*90 + FRandom[Quadravol](-50,50)*s;
|
||||
dir = SWWMUtility.ConeSpread(x2,y2,z2,a,s);
|
||||
p = Spawn("QuadExplArm2",origin);
|
||||
p.target = self;
|
||||
p.tracer = self;
|
||||
p.angle = atan2(dir.y,dir.x);
|
||||
p.pitch = asin(-dir.z);
|
||||
p.special1 = bExtra*8;
|
||||
p.special2 = bExtra*25;
|
||||
}
|
||||
Spawn("QuadExplLight3",origin);
|
||||
break;
|
||||
}
|
||||
if ( pointblank || bMelee ) self.DamageMobj(invoker,self,bMelee?(20+idx*5):(40+idx*10),'Fire',DMG_EXPLOSION);
|
||||
for ( int i=0; i<(4+idx); i++ )
|
||||
{
|
||||
let s = Spawn("SWWMSmoke",origin);
|
||||
|
|
|
|||
|
|
@ -31,6 +31,15 @@ Class QuadExplLight2 : PaletteLight
|
|||
ReactionTime 25;
|
||||
}
|
||||
}
|
||||
Class QuadExplLight3 : PaletteLight
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "QuadExpl";
|
||||
Args 0,0,0,300;
|
||||
ReactionTime 30;
|
||||
}
|
||||
}
|
||||
|
||||
Class QuadFlare : Actor
|
||||
{
|
||||
|
|
@ -306,8 +315,7 @@ Class QuadProj : Actor
|
|||
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);
|
||||
SWWMUtility.DoExplosion(self,150+special1,0,200,80,DE_HOWL|DE_NOSPLASH,ignoreme:tracer);
|
||||
A_StartSound("quadshot/hit",CHAN_WEAPON,attenuation:.6);
|
||||
A_StartSound("quadshot/hit",CHAN_VOICE,attenuation:.4);
|
||||
A_AlertMonsters(swwm_uncapalert?0:1500);
|
||||
|
|
@ -401,11 +409,12 @@ Class QuadExplArm : Actor
|
|||
override void PostBeginPlay()
|
||||
{
|
||||
Super.PostBeginPlay();
|
||||
reactiontime = Random[ExploS](4,8);
|
||||
reactiontime = Random[ExploS](4,8)+special1;
|
||||
double ang, pt;
|
||||
ang = FRandom[ExploS](0,360);
|
||||
pt = FRandom[ExploS](-90,90);
|
||||
vel = SWWMUtility.Vec3FromAngles(ang,pt)*FRandom[ExploS](12.,32.);
|
||||
speed = FRandom[ExploS](12.,32.);
|
||||
vel = SWWMUtility.Vec3FromAngles(ang,pt)*speed;
|
||||
}
|
||||
States
|
||||
{
|
||||
|
|
@ -420,7 +429,7 @@ Class QuadExplArm : Actor
|
|||
s.vel = pvel+vel*.3;
|
||||
s.special1 = Random[ExploS](1,3);
|
||||
s.scale *= 3.;
|
||||
s.alpha *= .1+.4*(ReactionTime/8.);
|
||||
s.alpha *= .1+.4*(ReactionTime/(8.+special1));
|
||||
int numpt = Random[Quadravol](1,4);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
|
|
@ -433,6 +442,45 @@ Class QuadExplArm : Actor
|
|||
}
|
||||
}
|
||||
|
||||
Class QuadExplArm2 : QuadExplArm
|
||||
{
|
||||
override void PostBeginPlay()
|
||||
{
|
||||
Actor.PostBeginPlay();
|
||||
reactiontime = Random[ExploS](4,8)+special1;
|
||||
speed = FRandom[ExploS](40.,60.)+special2;
|
||||
vel = SWWMUtility.Vec3FromAngles(angle,pitch)*speed;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
TNT1 A 1
|
||||
{
|
||||
Spawn("QuadExplTrail2",pos);
|
||||
if ( !(ReactionTime%2) )
|
||||
{
|
||||
SWWMUtility.DoExplosion(self,0,60000+reactiontime*5000,120+6*reactiontime,50,DE_BLAST|DE_EXTRAZTHRUST,ignoreme:tracer);
|
||||
SWWMUtility.DoExplosion(self,40+reactiontime*5,0,120+6*reactiontime,50,DE_QUADRAVOL|DE_NOSPLASH,ignoreme:tracer);
|
||||
SWWMUtility.DoExplosion(self,60+reactiontime*10,0,100+4*reactiontime,50,DE_HOWL|DE_NOSPLASH,ignoreme:tracer);
|
||||
}
|
||||
Vector3 pvel = (FRandom[ExploS](-1,1),FRandom[ExploS](-1,1),FRandom[ExploS](-1,1)).unit()*FRandom[ExploS](2,5);
|
||||
let s = Spawn("SWWMHalfSmoke",pos);
|
||||
s.vel = pvel+vel*.6;
|
||||
s.special1 = Random[ExploS](2,4);
|
||||
s.scale *= 3.2;
|
||||
s.alpha *= .1+.4*(ReactionTime/(12.+special1));
|
||||
int numpt = Random[Quadravol](1,5);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
s = Spawn("QuadEmber",pos);
|
||||
s.vel += vel*.7;
|
||||
}
|
||||
A_CountDown();
|
||||
}
|
||||
Wait;
|
||||
}
|
||||
}
|
||||
|
||||
Class QuadExplTrail : Actor
|
||||
{
|
||||
Default
|
||||
|
|
@ -463,18 +511,27 @@ Class QuadExplTrail : Actor
|
|||
Stop;
|
||||
}
|
||||
}
|
||||
Class QuadExplTrail2 : QuadExplTrail
|
||||
{
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
XEX0 ABCDEFGHIJKLMNOPQRS 1 Bright A_SetScale(scale.x*1.02);
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class QuadExplRing2 : QuadExplRing
|
||||
{
|
||||
Default
|
||||
{
|
||||
Scale 1.6;
|
||||
Scale 2.;
|
||||
}
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
XRG8 ABCDEFGHIJKLMNOPQRSTUVWX 1 Bright A_SetScale(scale.x*1.03);
|
||||
XRG8 ABCDEFGHIJKLMNOPQRSTUVWX 1 Bright A_SetScale(scale.x*1.04);
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
|
@ -523,8 +580,7 @@ Class QuadProj2 : QuadProj
|
|||
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);
|
||||
SWWMUtility.DoExplosion(self,300+special1,0,400,120,DE_HOWL|DE_NOSPLASH,ignoreme:tracer);
|
||||
A_StartSound("quadshot/twohit",CHAN_WEAPON,attenuation:.5);
|
||||
A_StartSound("quadshot/twohit",CHAN_VOICE,attenuation:.25);
|
||||
A_AlertMonsters(swwm_uncapalert?0:2500);
|
||||
|
|
@ -574,6 +630,298 @@ Class QuadProj2 : QuadProj
|
|||
}
|
||||
}
|
||||
|
||||
Class QuadProjSub : QuadProj
|
||||
{
|
||||
Default
|
||||
{
|
||||
Scale .3;
|
||||
Radius 2;
|
||||
Height 2;
|
||||
Speed 30;
|
||||
QuadProj.Drift 10.;
|
||||
QuadProj.AccelRate 100;
|
||||
QuadProj.MaxSpeed 150;
|
||||
}
|
||||
override void A_QuadTrail()
|
||||
{
|
||||
let s = Spawn("QuadTrail",pos);
|
||||
s.scale *= .5;
|
||||
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 *= .2;
|
||||
int numpt = Random[Quadravol](1,4);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
s = Spawn("QuadEmber",pos);
|
||||
s.vel += vel*.4;
|
||||
}
|
||||
}
|
||||
override void A_QuadExplode()
|
||||
{
|
||||
A_StopSound(CHAN_BODY);
|
||||
Scale *= 1.5;
|
||||
A_SprayDecal("ShockMark",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),100000);
|
||||
}
|
||||
A_QuakeEx(2,2,2,10,0,300,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,falloff:100,rollintensity:.3);
|
||||
SWWMUtility.DoExplosion(self,0,40000,120,40,DE_BLAST|DE_EXTRAZTHRUST);
|
||||
SWWMUtility.DoExplosion(self,50,0,120,0,DE_QUADRAVOL|DE_NOSPLASH,ignoreme:tracer);
|
||||
SWWMUtility.DoExplosion(self,100,0,100,40,DE_HOWL|DE_NOSPLASH,ignoreme:tracer);
|
||||
A_StartSound("quadshot/hit",CHAN_WEAPON,attenuation:.8,pitch:1.2);
|
||||
A_AlertMonsters(swwm_uncapalert?0:800);
|
||||
Spawn("QuadExplLight",pos);
|
||||
int numpt = Random[Quadravol](6,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](2,8);
|
||||
let s = Spawn("SWWMSmoke",pos);
|
||||
s.vel = pvel;
|
||||
s.special1 = Random[Quadravol](2,3);
|
||||
s.scale *= 4.;
|
||||
s.alpha *= .3;
|
||||
}
|
||||
numpt = Random[Quadravol](5,10);
|
||||
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](2,4);
|
||||
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);
|
||||
}
|
||||
if ( swwm_omnibust ) BusterWall.ProjectileBust(self,100,SWWMUtility.Vec3FromAngles(angle,pitch));
|
||||
}
|
||||
States
|
||||
{
|
||||
Death:
|
||||
TNT1 A 0 A_QuadExplode();
|
||||
XEX0 ACEGIKMOQS 1 Bright A_SetScale(scale.x*1.1);
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class QuadProjSub2 : QuadProj
|
||||
{
|
||||
Default
|
||||
{
|
||||
Scale .3;
|
||||
Radius 4;
|
||||
Height 4;
|
||||
Speed 30;
|
||||
QuadProj.Drift 3.;
|
||||
QuadProj.AccelRate 80;
|
||||
QuadProj.MaxSpeed 120;
|
||||
}
|
||||
override void A_QuadTrail()
|
||||
{
|
||||
let s = Spawn("QuadTrail",pos);
|
||||
s.scale *= .3;
|
||||
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 *= .2;
|
||||
int numpt = Random[Quadravol](1,4);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
s = Spawn("QuadEmber",pos);
|
||||
s.vel += vel*.4;
|
||||
}
|
||||
}
|
||||
override void A_QuadExplode()
|
||||
{
|
||||
A_StopSound(CHAN_BODY);
|
||||
Scale *= 1.5;
|
||||
A_SprayDecal("ShockMark",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),100000);
|
||||
}
|
||||
A_QuakeEx(2,2,2,10,0,200,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,falloff:80,rollintensity:.2);
|
||||
SWWMUtility.DoExplosion(self,0,40000,120,40,DE_BLAST|DE_EXTRAZTHRUST);
|
||||
SWWMUtility.DoExplosion(self,100,0,120,0,DE_QUADRAVOL|DE_NOSPLASH,ignoreme:tracer);
|
||||
SWWMUtility.DoExplosion(self,120,0,100,40,DE_HOWL|DE_NOSPLASH,ignoreme:tracer);
|
||||
A_StartSound("quadshot/hit",CHAN_WEAPON,attenuation:.6,pitch:1.1);
|
||||
A_AlertMonsters(swwm_uncapalert?0:600);
|
||||
Spawn("QuadExplLight",pos);
|
||||
int numpt = Random[Quadravol](6,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](2,8);
|
||||
let s = Spawn("SWWMSmoke",pos);
|
||||
s.vel = pvel;
|
||||
s.special1 = Random[Quadravol](2,3);
|
||||
s.scale *= 4.;
|
||||
s.alpha *= .3;
|
||||
}
|
||||
numpt = Random[Quadravol](5,10);
|
||||
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](2,4);
|
||||
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);
|
||||
}
|
||||
if ( swwm_omnibust ) BusterWall.ProjectileBust(self,120,SWWMUtility.Vec3FromAngles(angle,pitch));
|
||||
}
|
||||
States
|
||||
{
|
||||
Death:
|
||||
TNT1 A 0 A_QuadExplode();
|
||||
XEX0 ACEGIKMOQS 1 Bright A_SetScale(scale.x*1.1);
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class QuadExplRing3 : QuadExplRing
|
||||
{
|
||||
Default
|
||||
{
|
||||
Scale 2.5;
|
||||
}
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
XRG8 ABCDEFGHIJKLMNOPQRSTUVWX 1 Bright A_SetScale(scale.x*1.05);
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class QuadProj3 : QuadProj
|
||||
{
|
||||
Default
|
||||
{
|
||||
Scale 1.;
|
||||
Radius 10;
|
||||
Height 10;
|
||||
Speed 20;
|
||||
QuadProj.Drift .8;
|
||||
QuadProj.AccelRate 40;
|
||||
QuadProj.MaxSpeed 60;
|
||||
}
|
||||
override void A_QuadTrail()
|
||||
{
|
||||
let s = Spawn("QuadTrail",pos);
|
||||
s.scale *= 1.2;
|
||||
s.vel = vel*.4;
|
||||
s = Spawn("SWWMHalfSmoke",pos);
|
||||
s.vel = (FRandom[Quadravol](-.4,.4),FRandom[Quadravol](-.4,.4),FRandom[Quadravol](-.4,.4));
|
||||
s.vel += vel*.6;
|
||||
s.alpha *= .8;
|
||||
s.special1 = 1;
|
||||
int numpt = Random[Quadravol](5,30);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
s = Spawn("QuadEmber",pos);
|
||||
s.vel += vel*.6;
|
||||
}
|
||||
}
|
||||
override void A_QuadExplode()
|
||||
{
|
||||
A_StopSound(CHAN_BODY);
|
||||
Scale *= 3.;
|
||||
A_SprayDecal("ShockMarkHuge",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),300000+special2);
|
||||
}
|
||||
if ( tracer ) SWWMUtility.DoKnockback(tracer,-x+(0,0,.1),bAMBUSH?180000:800000);
|
||||
A_QuakeEx(7,7,7,35,0,1200,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,falloff:600,rollintensity:1.2);
|
||||
SWWMUtility.DoExplosion(self,0,150000+special2,700,150,DE_BLAST|DE_EXTRAZTHRUST);
|
||||
SWWMUtility.DoExplosion(self,400+special1,0,700,0,DE_QUADRAVOL|DE_NOSPLASH,ignoreme:tracer);
|
||||
SWWMUtility.DoExplosion(self,500+special1,0,600,150,DE_HOWL|DE_NOSPLASH,ignoreme:tracer);
|
||||
A_StartSound("quadshot/twohit",CHAN_WEAPON,attenuation:.4,pitch:.9);
|
||||
A_StartSound("quadshot/twohit",CHAN_VOICE,attenuation:.3,pitch:.8);
|
||||
A_StartSound("quadshot/extrahit",CHAN_ITEM,attenuation:.2,pitch:1.1);
|
||||
A_AlertMonsters(swwm_uncapalert?0:3500);
|
||||
Spawn("QuadExplLight3",pos);
|
||||
Spawn("QuadExplRing3",pos);
|
||||
int numpt = Random[Quadravol](25,35);
|
||||
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](20,25);
|
||||
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](10,15);
|
||||
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](16,20);
|
||||
for ( int i=0; i<numpt; i++ )
|
||||
{
|
||||
let s = Spawn("QuadExplArm",pos);
|
||||
s.target = target;
|
||||
s.tracer = tracer;
|
||||
s.special1 = 10;
|
||||
}
|
||||
for ( int j=-90; j<=90; j+=30 ) for ( int i=0; i<360; i+=60 )
|
||||
{
|
||||
double ang = i+FRandom[ExploS](-30,30);
|
||||
double pt = j+FRandom[ExploS](-15,15);
|
||||
// skip if directly hitting a wall
|
||||
if ( LineTrace(ang,40,pt,TRF_THRUACTORS|TRF_THRUHITSCAN) ) continue;
|
||||
let s = Spawn("QuadProjSub",pos);
|
||||
s.target = target;
|
||||
s.tracer = tracer;
|
||||
s.angle = ang;
|
||||
s.pitch = pt;
|
||||
s.vel = SWWMUtility.Vec3FromAngles(ang,pt)*s.speed*FRandom[ExploS](.8,1.2);
|
||||
s.bHITOWNER = !tracer;
|
||||
if ( (j == -90) || (j == 90) ) break; // only one per pole
|
||||
}
|
||||
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.08);
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class OnFireLight : PointLightFlickerRandomAttenuated
|
||||
{
|
||||
OnFire of;
|
||||
|
|
@ -615,7 +963,7 @@ Class OnFire : Thinker
|
|||
if ( lite ) lite.Destroy();
|
||||
amount -= int(victim.waterlevel**2);
|
||||
}
|
||||
if ( victim is 'Demolitionist' ) amount = min(amount-2,200); // Demo's body puts out fire faster
|
||||
if ( victim is 'Demolitionist' ) amount = min(amount-1,200); // Demo's body puts out fire faster
|
||||
if ( victim.Health <= 0 ) amount = min(amount,100);
|
||||
if ( !(level.maptime%3) )
|
||||
amount--;
|
||||
|
|
|
|||
|
|
@ -173,7 +173,7 @@ Class SWWMStats : SWWMStaticThinker
|
|||
else if ( (inflictor is 'EvisceratorChunk') || (inflictor is 'EvisceratorProj') ) which = 'Eviscerator';
|
||||
else if ( inflictor is 'SheenTrail' ) which = 'HeavyMahSheenGun';
|
||||
else if ( (inflictor is 'HellblazerMissile') || (inflictor is 'HellblazerRavagerArm') || (inflictor is 'HellblazerWarheadArm') ) which = 'Hellblazer';
|
||||
else if ( (inflictor is 'QuadProj') || ((inflictor is 'Demolitionist') && (DamageType == 'Fire')) ) which = 'Quadravol'; // second one is a hack for fire effects
|
||||
else if ( (inflictor is 'QuadProj') || (inflictor is 'QuadExplArm') || ((inflictor is 'Demolitionist') && (DamageType == 'Fire')) ) which = 'Quadravol'; // last one is a hack for fire effects
|
||||
else if ( (inflictor is 'BigBiospark') || (inflictor is 'BiosparkBall') || (inflictor is 'BiosparkBeamImpact') || (inflictor is 'BiosparkComboImpact') || (inflictor is 'BiosparkComboImpactSub') || (inflictor is 'BiosparkBeam') || (inflictor is 'BiosparkArc') || (inflictor is 'BiosparkCore') ) which = 'Sparkster';
|
||||
else if ( (inflictor is 'SilverAirRip') || (inflictor is 'SilverAirRip2') || (inflictor is 'SilverImpact') || (inflictor is 'FatChodeImpact') || (inflictor is 'FatChodeExplosionArm') ) which = 'SilverBullet';
|
||||
else if ( (inflictor is 'CandyBeam') || (inflictor is 'CandyPop') || (inflictor is 'CandyMagArm') || (inflictor is 'CandyGunProj') || (inflictor is 'CandyMagProj') || (inflictor is 'CandyBulletImpact') ) which = 'CandyGun';
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue