Double Stacc had to have some downsides.

This commit is contained in:
Mari the Deer 2021-03-01 20:47:34 +01:00
commit 0aa788c8df
11 changed files with 48 additions and 14 deletions

View file

@ -432,7 +432,7 @@ SWWM_LORETXT_SILVERBULLET = "\cxDesignation:\c-\n\cf Silver Bullet JET\c-\n\cxMa
SWWM_LORETAG_SPARKSTER = "Biospark Carbine";
SWWM_LORETAB_SPARKSTER = "Item";
SWWM_LOREREL_SPARKSTER = "DecadeMech;EngineTech;Saya";
SWWM_LORETXT_SPARKSTER = "\cxDesignation:\c-\n\cf Model S-5 Biospark Carbine\c-\n\cxManufacturer:\c-\n\cf Decade Mechanics\c-\n\cxClassification:\c-\n\cf Ancient Alien Energy Weapon\c-\n\nThe \cfBiospark Carbine\c-, also known by its nickname of \cf\"Sparkster\"\c-, was the flagship weapon of \cfDecade Mechanics\c-, back when it was still active. It is described as being powered by \"sentient lightning\", although it does not show any signs of being truly electric in nature.\n\nBlueprints were found for all models from the S-1 to S-6 (the latter being in early prototyping stages, and not yet functional), but it proved impossible to truly recreate them. Fortunately, over 30,000 ready-made S-5 units were stockpiled deeply inside the ruined facility in \cfSunkaeze\c-, all ready for use. Currently, \cfTach-Engine Technologies\c- and its associated partners manage the distribution of these units, and are also studying the weapons in detail for potential redesigns and enhancements.\n\nOne notable detail about the Biospark Carbine is how its \"sentient\" energy drives shot projectiles to seek nearby targets, somehow telling apart friend from foe, relative to the weapon's user. Arcs of lightning have a tendency to spread out from them, dealing additional damage.\n\n\cfPrimary Fire:\c- Small blobs of stabilized energy with slight target-seeking abilities. Leave a trail of arcs that gravitate towards them as they move, then spread out on impact, homing on hostile targets.\n\n\cfSecondary Fire:\c- Concentrated, penetrating beam shot. Also has some slight seeking.\n\n\cfTertiary Fire:\c- If the loaded charge is at least at 50%, the containment capsule inside will be ejected through the main barrel and detonated as a massive sphere of pure energy that tracks down nearby targets. The weapon must be reloaded afterwards.\n\n\cfReload:\c- Reloads, obviously. Do note that the loaded charge has to be depleted completely before it can be removed. It's possible to attach a second Biospark Unit, for an additional 4-shot charge and less reload downtime. No more than two units can be connected without causing severe instability, however, as some have unfortunately found out.\n\n\cfTechniques:\c- If the secondary beam comes in contact with an energy blob it will be detonated with increased damage and range. This requires precise timing and aim to be truly effective.\n\n\cxSaya's Notes:\c-\n\cfFunny how these rusty-ass things somehow still work. And holy fuck do they work well, too... Y'know, I don't think I've ever seen a weapon that can do that double mag thing, pretty ingenious. Kinda grew to call it the \"double stacc\", heh.\c-\n\n\cfI'm also surprised that that nickname caught on. Most people nowadays probably won't even get the reference at all.\c-";
SWWM_LORETXT_SPARKSTER = "\cxDesignation:\c-\n\cf Model S-5 Biospark Carbine\c-\n\cxManufacturer:\c-\n\cf Decade Mechanics\c-\n\cxClassification:\c-\n\cf Ancient Alien Energy Weapon\c-\n\nThe \cfBiospark Carbine\c-, also known by its nickname of \cf\"Sparkster\"\c-, was the flagship weapon of \cfDecade Mechanics\c-, back when it was still active. It is described as being powered by \"sentient lightning\", although it does not show any signs of being truly electric in nature.\n\nBlueprints were found for all models from the S-1 to S-6 (the latter being in early prototyping stages, and not yet functional), but it proved impossible to truly recreate them. Fortunately, over 30,000 ready-made S-5 units were stockpiled deeply inside the ruined facility in \cfSunkaeze\c-, all ready for use. Currently, \cfTach-Engine Technologies\c- and its associated partners manage the distribution of these units, and are also studying the weapons in detail for potential redesigns and enhancements.\n\nOne notable detail about the Biospark Carbine is how its \"sentient\" energy drives shot projectiles to seek nearby targets, somehow telling apart friend from foe, relative to the weapon's user. Arcs of lightning have a tendency to spread out from them, dealing additional damage.\n\n\cfPrimary Fire:\c- Small blobs of stabilized energy with slight target-seeking abilities. Leave a trail of arcs that gravitate towards them as they move, then spread out on impact, homing on hostile targets.\n\n\cfSecondary Fire:\c- Concentrated, penetrating beam shot. Also has some slight seeking.\n\n\cfTertiary Fire:\c- If the loaded charge is at least at 50%, the containment capsule inside will be ejected through the main barrel and detonated as a massive sphere of pure energy that tracks down nearby targets. The weapon must be reloaded afterwards.\n\n\cfReload:\c- Reloads, obviously. Do note that the loaded charge has to be depleted completely before it can be removed. It's possible to attach a second Biospark Unit, for an additional 4-shot charge and less reload downtime, at the expense of some instability. No more than two units can be connected without causing a critical malfunction, however, as some have unfortunately found out.\n\n\cfTechniques:\c- If the secondary beam comes in contact with an energy blob it will be detonated with increased damage and range. This requires precise timing and aim to be truly effective.\n\n\cxSaya's Notes:\c-\n\cfFunny how these rusty-ass things somehow still work. And holy fuck do they work well, too... Y'know, I don't think I've ever seen a weapon that can do that double mag thing, pretty ingenious. Kinda grew to call it the \"double stacc\", heh.\c-\n\n\cfI'm also surprised that that nickname caught on. Most people nowadays probably won't even get the reference at all.\c-";
SWWM_LORETAG_SPREADGUN = "Spreadgun";
SWWM_LORETAB_SPREADGUN = "Item";
SWWM_LOREREL_SPREADGUN = "Blackmann;Saya;NosKora;Explodium";

File diff suppressed because one or more lines are too long

View file

@ -1,3 +1,3 @@
[default]
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r315 \cu(Sun 28 Feb 23:21:33 CET 2021)\c-";
SWWM_SHORTVER="\cw0.9.11b-pre r315 \cu(2021-02-28 23:21:33)\c-";
SWWM_MODVER="\chSWWM \czGZ\c- \cw0.9.11b-pre r316 \cu(Mon 1 Mar 20:47:34 CET 2021)\c-";
SWWM_SHORTVER="\cw0.9.11b-pre r316 \cu(2021-03-01 20:47:34)\c-";

View file

@ -24,7 +24,7 @@ One notable detail about the Biospark Carbine is how its "sentient" energy drive
\cfTertiary Fire:\c- If the loaded charge is at least at 50%, the containment capsule inside will be ejected through the main barrel and detonated as a massive sphere of pure energy that tracks down nearby targets. The weapon must be reloaded afterwards.
\cfReload:\c- Reloads, obviously. Do note that the loaded charge has to be depleted completely before it can be removed. It's possible to attach a second Biospark Unit, for an additional 4-shot charge and less reload downtime. No more than two units can be connected without causing severe instability, however, as some have unfortunately found out.
\cfReload:\c- Reloads, obviously. Do note that the loaded charge has to be depleted completely before it can be removed. It's possible to attach a second Biospark Unit, for an additional 4-shot charge and less reload downtime, at the expense of some instability. No more than two units can be connected without causing a critical malfunction, however, as some have unfortunately found out.
\cfTechniques:\c- If the secondary beam comes in contact with an energy blob it will be detonated with increased damage and range. This requires precise timing and aim to be truly effective.

View file

@ -20,7 +20,7 @@ Un detalle notable sobre la Carabina Biospark es como su energía "consciente" l
\cfFuego Terciario:\c- Si la carga actual es de al menos un 50%, la cápsula de contención será expulsada por el cañón principal y detonará liberando una esfera masiva de energía pura que busca objetivos cercanos. El arma debe ser recargada después.
\cfRecarga:\c- Recarga, obviamente. Ten en cuenta que la carga actual debe estar completamente vacía antes de poder ser extraída. Es posible acoplar una segunda Unidad Biospark, para una carga de cuatro disparos adicional y menor tiempo perdido en recargas. Sin embargo, no más de dos unidades pueden estar conectadas sin causar problemas de inestabilidad, como algunos han desafortunadamente comprobado.
\cfRecarga:\c- Recarga, obviamente. Ten en cuenta que la carga actual debe estar completamente vacía antes de poder ser extraída. Es posible acoplar una segunda Unidad Biospark, para una carga de cuatro disparos adicional y menor tiempo perdido en recargas, a costa de cierta inestabilidad. Sin embargo, no más de dos unidades pueden estar conectadas sin causar un fallo crítico, como algunos han desafortunadamente comprobado.
\cfTécnicas:\c- Si el rayo secundario entra en contacto con una bola de energía hará que detone con un daño y rango mayores. Esto requiere una puntería y tiempo precisos para ser realmente efectivo.

View file

@ -203,6 +203,7 @@ Model "Sparkster"
Scale -0.005 0.0025 0.005
DONTCULLBACKFACES
// Still Vent
Skin 3 "VentSmoke0.png"
FrameIndex XZWY A 3 0
Skin 3 "VentSmoke1.png"

View file

@ -741,6 +741,7 @@ biospark/thirdfire sounds/sparkster/spark_third.ogg
biospark/meleestart sounds/sparkster/spark_meleestart.ogg
biospark/meleeend sounds/sparkster/spark_meleeend.ogg
biospark/idle sounds/sparkster/spark_idle.ogg
biospark/idle2 sounds/sparkster/spark_idle2.ogg
biospark/magout sounds/sparkster/spark_magout.ogg
biospark/magin sounds/sparkster/spark_magin.ogg
biospark/spark sounds/sparkster/spark_spark.ogg

Binary file not shown.

Binary file not shown.

View file

@ -36,7 +36,7 @@ Class Sparkster : SWWMWeapon
Screen.DrawTexture(AmmoBar[5],false,bx-26,by-8,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
Screen.DrawTexture(AmmoBar[5],false,bx-14,by-8,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true);
Screen.DrawTexture(AmmoBar[3+(clipcount<2)],false,bx-26,by-8,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,iclip?(iclip.GetValue()/10.):0.,DTA_ColorOverlay,(blinking&&(clipcount<=4))?Color(128,0,0,0):Color(0,0,0,0));
if ( clipcount > 4 )
if ( (iclip && (iclip.GetValue() > 120)) || (!iclip && (clipcount > 4)) )
Screen.DrawTexture(AmmoBar[3+(clipcount<6)],false,bx-14,by-8,DTA_VirtualWidthF,ss.x,DTA_VirtualHeightF,ss.y,DTA_KeepRatio,true,DTA_WindowRightF,iclip?(((iclip.GetValue()/10.))-12.):0.,DTA_ColorOverlay,blinking?Color(128,0,0,0):Color(0,0,0,0));
}
else
@ -106,6 +106,7 @@ Class Sparkster : SWWMWeapon
p.angle = atan2(dir.y,dir.x);
p.pitch = asin(-dir.z);
p.vel = dir*p.speed;
if ( invoker.doublestacc ) p.bMISSILEMORE = true;
break;
case 1:
// beam
@ -126,6 +127,7 @@ Class Sparkster : SWWMWeapon
p.angle = atan2(dir.y,dir.x);
p.pitch = asin(-dir.z);
p.frame = 0;
if ( invoker.doublestacc ) p.bMISSILEMORE = true;
break;
case 2:
// big spark
@ -147,6 +149,11 @@ Class Sparkster : SWWMWeapon
p.vel = dir*p.speed;
p.vel.z += 3.5;
p.special1 = scnt;
if ( invoker.doublestacc )
{
p.bMISSILEMORE = true;
p.ReactionTime -= 10;
}
break;
}
}
@ -174,7 +181,10 @@ Class Sparkster : SWWMWeapon
{
Super.Travelled();
if ( Owner.player && (Owner.player.Readyweapon == self) )
Owner.A_StartSound("biospark/idle",CHAN_WEAPONEXTRA,CHANF_LOOP,.4,4.);
{
Owner.A_StartSound("biospark/idle",CHAN_WEAPONEXTRA,CHANF_LOOP,doublestacc?.6:.4,4.);
if ( doublestacc ) Owner.A_StartSound("biospark/idle2",CHAN_WEAPONEXTRA2,CHANF_LOOP,.2,4.);
}
}
action void A_FailZoom()
@ -219,7 +229,12 @@ Class Sparkster : SWWMWeapon
XZW2 HIJKLM 2;
Goto Ready;
DoubleSelect:
XZW6 XYZ 2;
XZW6 X 2
{
A_SoundVolume(CHAN_WEAPONEXTRA,.6);
A_StartSound("biospark/idle2",CHAN_WEAPONEXTRA2,CHANF_LOOP,.2,4.);
}
XZW6 YZ 2;
XZW7 ABCD 2;
Goto DoubleReady;
Deselect:
@ -241,6 +256,7 @@ Class Sparkster : SWWMWeapon
XZW6 X -1
{
A_StopSound(CHAN_WEAPONEXTRA);
A_StopSound(CHAN_WEAPONEXTRA2);
A_FullLower();
}
Stop;
@ -310,7 +326,7 @@ Class Sparkster : SWWMWeapon
DoublePreVent:
XZW5 ZZZZZZZZ 1
{
if ( invoker.ClipCount > 0 )
if ( (invoker.ClipCount > 0) && (invoker.ClipCount%4) )
{
if ( player.cmd.buttons&BT_ATTACK )
return ResolveState("DoubleRefire");
@ -430,6 +446,7 @@ Class Sparkster : SWWMWeapon
invoker.doublestacc = false;
A_StartSound("biospark/magout",CHAN_WEAPON,CHANF_OVERLAP);
A_StopSound(CHAN_WEAPONEXTRA);
A_StopSound(CHAN_WEAPONEXTRA2);
}
XZW9 STUVWX 2;
XZW9 Y 2 A_DropMag(true);
@ -464,6 +481,8 @@ Class Sparkster : SWWMWeapon
invoker.clipcount += invoker.default.clipcount;
invoker.doublestacc = true;
A_StartSound("biospark/magin",CHAN_WEAPON,CHANF_OVERLAP);
A_SoundVolume(CHAN_WEAPONEXTRA,.6);
A_StartSound("biospark/idle2",CHAN_WEAPONEXTRA2,CHANF_LOOP,.2,4.);
}
XZWA IJKL 2;
XZWA M 2 A_StartSound("biospark/meleeend",CHAN_WEAPON,CHANF_OVERLAP);
@ -483,6 +502,8 @@ Class Sparkster : SWWMWeapon
invoker.clipcount += invoker.default.clipcount;
invoker.doublestacc = true;
A_StartSound("biospark/magin",CHAN_WEAPON,CHANF_OVERLAP);
A_SoundVolume(CHAN_WEAPONEXTRA,.6);
A_StartSound("biospark/idle2",CHAN_WEAPONEXTRA2,CHANF_LOOP,.2,4.);
}
XZW6 K 2;
XZW6 L 2 A_StartSound("biospark/meleeend",CHAN_WEAPON,CHANF_OVERLAP);

View file

@ -274,6 +274,7 @@ Class BigBiospark : Actor
}
}
Health -= 3;
if ( bMISSILEMORE ) Health--;
if ( Health <= 0 ) ExplodeMissile();
}
@ -445,6 +446,7 @@ Class BiosparkBall : Actor
A_StartSound("biospark/spark",CHAN_VOICE,CHANF_LOOP);
let h = Spawn("BiosparkHitbox",pos);
h.target = self;
if ( bMISSILEMORE ) A_SparkTick(); // potential for arcs to hit shooter if overloaded
}
void A_SparkTick()
{
@ -485,8 +487,8 @@ Class BiosparkBall : Actor
magvel *= 1.03;
if ( magvel > 50. ) magvel = 50.;
Vector3 dir = vel.unit();
if ( bAMBUSH )
dir = (dir+(FRandom[Sparkster](-1,1),FRandom[Sparkster](-1,1),FRandom[Sparkster](-1,1))*FRandom[Sparkster](.02,.03)).unit();
if ( bMISSILEMORE )
dir = (dir+(FRandom[Sparkster](-1,1),FRandom[Sparkster](-1,1),FRandom[Sparkster](-1,1))*FRandom[Sparkster](.006,.012)).unit();
// check targets at an interval, to save on performance
if ( !(special2%5) )
{
@ -963,6 +965,8 @@ Class BiosparkComboImpact : Actor
s.target = target;
s.angle = ang;
s.pitch = pt;
s.bMISSILEMORE = true;
s.bMISSILEEVENMORE = true;
}
}
Spawn("BiosparkExplLight2",pos);
@ -1193,6 +1197,10 @@ Class BiosparkBeam : Actor
dir = (dir+.1*dirto*(clamp(1.-(dist/500.),0.,1.)**4.)).unit();
}
}
if ( bMISSILEEVENMORE )
dir = (dir+(FRandom[Sparkster](-1,1),FRandom[Sparkster](-1,1),FRandom[Sparkster](-1,1))*FRandom[Sparkster](.8,.16)).unit();
else if ( bMISSILEMORE )
dir = (dir+(FRandom[Sparkster](-1,1),FRandom[Sparkster](-1,1),FRandom[Sparkster](-1,1))*FRandom[Sparkster](.02,.04)).unit();
invoker.nextdir = dir;
}
@ -1207,7 +1215,7 @@ Class BiosparkBeam : Actor
int numpt = Random[Sparkster](-1,3);
for ( int i=0; i<numpt; i++ )
{
let a = Spawn("BiosparkArc",level.Vec3Offset(pos,tdir*FRandom[Sparkster](frame?0:.3,1)));
let a = Spawn("BiosparkArc",level.Vec3Offset(pos,tdir*FRandom[Sparkster]((frame||bMISSILEMORE)?0:.3,1)));
a.angle = angle;
a.pitch = pitch;
a.target = target;
@ -1216,7 +1224,7 @@ Class BiosparkBeam : Actor
numpt = Random[Sparkster](1,3);
for ( int i=0; i<numpt; i++ )
{
let a = Spawn("BiosparkArcSmall",level.Vec3Offset(pos,tdir*FRandom[Sparkster](frame?0:.3,1)));
let a = Spawn("BiosparkArcSmall",level.Vec3Offset(pos,tdir*FRandom[Sparkster]((frame||bMISSILEMORE)?0:.3,1)));
a.angle = angle;
a.pitch = pitch;
a.target = target;
@ -1248,6 +1256,8 @@ Class BiosparkBeam : Actor
b.pitch = asin(-invoker.nextdir.z);
b.target = target;
b.special1 = special1+1;
b.bMISSILEMORE = bMISSILEMORE;
b.bMISSILEEVENMORE = bMISSILEEVENMORE;
}
action void A_Fade()
@ -1804,6 +1814,7 @@ Class BiosparkCore : Actor
s.angle = atan2(dir.y,dir.x);
s.pitch = asin(-dir.z);
s.special1 = special1;
s.bMISSILEMORE = bMISSILEMORE;
}
void A_SparkExplode()
{