swwmgz_m/zscript/weapons/swwm_sparkyboi.zsc
Marisa the Magician aaa65af795 Add A_CanBob() function to weapons to force-enable bobbing within a state.
Use it sparingly in places where it should have been needed (Hellblazer and
Biospark pre/post fire, Hammer alt charge, MR overpressure charge).
Also, replace all instances of A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH) with it,
since that was basically the same thing but with extra steps (and with the side
effect of potentially resetting psprite offsets).
2024-01-24 13:32:24 +01:00

611 lines
16 KiB
Text

// Decade Mechanics Model S-5 Biospark Carbine aka "Legacy Sparkster" (from UnSX series, also featured in SWWM series)
// Slot 7, replaces Plasma Rifle, Hellstaff, Arc of Death
Class Sparkster : SWWMWeapon
{
int clipcount;
bool doublestacc;
bool nomag;
Property ClipCount : clipcount;
transient int failtime;
override bool CheckAmmo( int fireMode, bool autoSwitch, bool requireAmmo, int ammocount )
{
if ( sv_infiniteammo || Owner.FindInventory('PowerInfiniteAmmo',true) ) return true;
if ( (fireMode == PrimaryFire) || (fireMode == AltFire) ) return ((clipcount > 0) || (Ammo1.Amount > 0));
return Super.CheckAmmo(firemode,autoswitch,requireammo,ammocount);
}
override bool ReportHUDAmmo()
{
if ( clipcount > 0 ) return true;
return Super.ReportHUDAmmo();
}
override Vector3 GetTraceOffset( int index )
{
return (10.,4.5,-5.);
}
action void A_FireSpark( int mode )
{
int scnt = invoker.clipcount%4;
if ( mode == 2 )
{
if ( invoker.clipcount > 4 ) invoker.clipcount = 4;
else invoker.clipcount = 0;
}
else invoker.clipcount = max(0,invoker.clipcount-1);
Vector3 dir;
Vector3 x = SWWMUtility.GetPlayerViewDir(self);
Vector3 origin = SWWMUtility.GetFireOffset(self,10,4.5,-5);
let [x2, y2, z2] = SWWMUtility.GetPlayerAxesAutoAimed(self);
double a, s;
Actor p;
switch ( mode )
{
case 0:
// spark
A_StartSound("biospark/fire",CHAN_WEAPON,CHANF_OVERLAP,attenuation:.7);
A_QuakeEx(2.,2.,2.,5,0,8,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.2);
A_BumpFOV(.96);
A_BumpView(-.5);
A_SWWMFlash();
SWWMHandler.DoFlash(self,Color(64,192,255,96),3);
A_AlertMonsters(swwm_uncapalert?0:5000);
A_PlayerFire();
a = FRandom[Spread](0,360);
s = FRandom[Spread](0,.007);
dir = SWWMUtility.ConeSpread(x2,y2,z2,a,s);
p = Spawn("BiosparkBall",origin);
p.target = self;
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
A_StartSound("biospark/altfire",CHAN_WEAPON,CHANF_OVERLAP,attenuation:.8);
A_QuakeEx(3.,3.,3.,5,0,8,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.3);
A_BumpFOV(.95);
A_BumpView(-.6);
A_SWWMFlash();
SWWMHandler.DoFlash(self,Color(64,192,255,96),3);
A_AlertMonsters(swwm_uncapalert?0:4000);
A_PlayerFire();
a = FRandom[Spread](0,360);
s = FRandom[Spread](0,.003);
dir = SWWMUtility.ConeSpread(x2,y2,z2,a,s);
p = Spawn("BiosparkBeam",origin);
p.target = self;
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
A_StartSound("biospark/thirdfire",CHAN_WEAPON,CHANF_OVERLAP,attenuation:1.5);
A_QuakeEx(5.,5.,5.,10,0,8,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.6);
A_BumpFOV(.94);
A_BumpView(-.8);
A_AlertMonsters(swwm_uncapalert?0:1200);
A_PlayerFire();
SWWMUtility.DoKnockback(self,-x,2500.);
a = FRandom[Spread](0,360);
s = FRandom[Spread](0,.012);
dir = SWWMUtility.ConeSpread(x2,y2,z2,a,s);
p = Spawn("BiosparkCore",origin);
p.target = self;
p.angle = atan2(dir.y,dir.x);
p.pitch = asin(-dir.z);
p.vel = dir*p.speed;
p.vel.z += 3.5;
p.special1 = scnt;
if ( invoker.doublestacc )
{
p.bMISSILEMORE = true;
p.ReactionTime -= 10;
}
break;
}
}
action void A_DropMag( bool stacc = false )
{
if ( swwm_nomagdrop ) return;
let [x, y, z] = SWWMUtility.GetPlayerAxes(self);
Vector3 origin = SWWMUtility.GetFireOffset(self,10,-2,-10);
let c = Spawn("SparksterMag",origin);
c.angle = angle;
c.pitch = pitch;
c.vel = x*FRandom[Junk](-.5,.5)+y*FRandom[Junk](-1.2,.3)-(0,0,FRandom[Junk](2,3));
c.vel += vel*.5;
if ( !stacc ) return;
origin = SWWMUtility.GetFireOffset(self,8,-2,-12);
c = Spawn("SparksterMag",origin);
c.angle = angle;
c.pitch = pitch;
c.vel = x*FRandom[Junk](-.5,.5)+y*FRandom[Junk](-1.2,.3)-(0,0,FRandom[Junk](2,3));
c.vel += vel*.5;
}
override void Travelled()
{
Super.Travelled();
if ( Owner.player && (Owner.player.Readyweapon == self) )
{
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()
{
invoker.failtime = gametic+48;
A_StartSound("biospark/fail",CHAN_WEAPON,CHANF_OVERLAP);
}
action void A_UpdatePickup()
{
frame = invoker.doublestacc;
}
override void MarkPrecacheSounds()
{
Super.MarkPrecacheSounds();
MarkSound("biospark/select");
MarkSound("biospark/deselect");
MarkSound("biospark/fire1");
MarkSound("biospark/fire2");
MarkSound("biospark/fire3");
MarkSound("biospark/altfire1");
MarkSound("biospark/altfire2");
MarkSound("biospark/altfire3");
MarkSound("biospark/thirdfire");
MarkSound("biospark/meleestart");
MarkSound("biospark/meleeend");
MarkSound("biospark/idle");
MarkSound("biospark/idle2");
MarkSound("biospark/magout");
MarkSound("biospark/magin");
MarkSound("biospark/spark");
MarkSound("biospark/hit1");
MarkSound("biospark/hit2");
MarkSound("biospark/hit3");
MarkSound("biospark/beamhit1");
MarkSound("biospark/beamhit2");
MarkSound("biospark/deploy1");
MarkSound("biospark/deploy2");
MarkSound("biospark/deploy3");
MarkSound("biospark/bighit1");
MarkSound("biospark/bighit2");
MarkSound("biospark/bigspark");
MarkSound("biospark/arc1");
MarkSound("biospark/arc2");
MarkSound("biospark/arc3");
MarkSound("biospark/arc4");
MarkSound("biospark/bigarc1");
MarkSound("biospark/bigarc2");
MarkSound("biospark/bigarc3");
MarkSound("biospark/bigarc4");
MarkSound("biospark/hugearc1");
MarkSound("biospark/hugearc2");
MarkSound("biospark/hugearc3");
MarkSound("biospark/zap1");
MarkSound("biospark/zap2");
MarkSound("biospark/zap3");
MarkSound("biospark/zap4");
MarkSound("biospark/zap5");
MarkSound("biospark/zap6");
MarkSound("biospark/prefire");
MarkSound("biospark/prethird");
MarkSound("biospark/hiss");
MarkSound("biospark/fail");
MarkSound("biospark/checkout");
}
Default
{
Tag "$T_SPARKSTER";
Inventory.Icon "graphics/HUD/Icons/W_Sparkster.png";
Inventory.PickupMessage "$I_SPARKSTER";
Obituary "$O_SPARKSTER";
SWWMWeapon.Tooltip "$TT_SPARKSTER";
SWWMWeapon.GetLine "getsparkster";
Weapon.SlotNumber 7;
Weapon.UpSound "biospark/select";
Weapon.SelectionOrder 600;
Stamina 200000;
Weapon.AmmoType1 "SparkUnit";
Weapon.AmmoGive1 1;
SWWMWeapon.DropAmmoType "SWWMCellAmmoSmall";
Sparkster.ClipCount 4;
+SWWMWEAPON.NOFIRSTGIVE;
+WEAPON.EXPLOSIVE;
}
States
{
Spawn:
XZW1 A -1 NoDelay A_UpdatePickup();
Stop;
Select:
XZW2 G 2
{
invoker.nomag = false;
A_FullRaise();
A_StartSound("biospark/idle",CHAN_WEAPONEXTRA,CHANF_LOOP,.4,4.);
return A_JumpIf(invoker.doublestacc,"DoubleSelect");
}
XZW2 HIJKLM 2;
Goto Ready;
DoubleSelect:
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:
XZW2 A 2
{
A_StartSound("biospark/deselect",CHAN_WEAPON,CHANF_OVERLAP);
return A_JumpIf(invoker.doublestacc,"DoubleDeselect");
}
XZW2 BCDEF 2;
XZW2 G -1
{
A_StopSound(CHAN_WEAPONEXTRA);
A_FullLower();
}
Stop;
DoubleDeselect:
XZW5 Z 2;
XZW6 STUVW 2;
XZW6 X -1
{
A_StopSound(CHAN_WEAPONEXTRA);
A_StopSound(CHAN_WEAPONEXTRA2);
A_FullLower();
}
Stop;
Ready:
XZW2 A 1
{
A_WeaponReady(WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWRELOAD);
if ( player.cmd.buttons&(BT_ATTACK|BT_ALTATTACK|BT_ZOOM) )
invoker.CheckAmmo(EitherFire,true);
}
Wait;
DoubleReady:
XZW5 Z 1
{
A_WeaponReady(WRF_ALLOWZOOM|WRF_ALLOWUSER1|WRF_ALLOWRELOAD);
if ( player.cmd.buttons&(BT_ATTACK|BT_ALTATTACK|BT_ZOOM) )
invoker.CheckAmmo(EitherFire,true);
}
Wait;
Fire:
XZW2 A 0 A_JumpIf(invoker.ClipCount<=0,"Reload");
XZW2 A 1
{
A_StartSound("biospark/prefire",CHAN_WEAPON,CHANF_OVERLAP);
return A_JumpIf(invoker.doublestacc,"DoubleFire");
}
XZW4 Y 12 A_CanBob();
XZW4 Y 1 A_FireSpark(0);
XZW2 NOPQ 2;
Goto PreVent;
DoubleFire:
XZW5 Z 1;
XZW8 L 12 A_CanBob();
XZW8 L 1 A_FireSpark(0);
XZW7 EFGH 2;
Goto DoublePreVent;
AltFire:
XZW2 A 0 A_JumpIf(invoker.ClipCount<=0,"Reload");
XZW2 A 1
{
A_StartSound("biospark/prefire",CHAN_WEAPON,CHANF_OVERLAP);
return A_JumpIf(invoker.doublestacc,"DoubleAltFire");
}
XZW4 Z 12 A_CanBob();
XZW4 Z 1 A_FireSpark(1);
XZW2 RSTU 2;
Goto PreVent;
DoubleAltFire:
XZW5 Z 1;
XZW8 M 12 A_CanBob();
XZW8 M 1 A_FireSpark(1);
XZW7 IJKL 2;
Goto DoublePreVent;
PreVent:
XZW2 AAAAAAAA 1
{
A_CanBob();
if ( invoker.ClipCount > 0 )
{
if ( player.cmd.buttons&BT_ATTACK )
return ResolveState("Refire");
if ( player.cmd.buttons&BT_ALTATTACK )
return ResolveState("AltRefire");
}
return ResolveState(null);
}
Goto Vent;
DoublePreVent:
XZW5 ZZZZZZZZ 1
{
A_CanBob();
if ( (invoker.ClipCount > 0) && (invoker.ClipCount%4) )
{
if ( player.cmd.buttons&BT_ATTACK )
return ResolveState("DoubleRefire");
if ( player.cmd.buttons&BT_ALTATTACK )
return ResolveState("DoubleAltRefire");
}
return ResolveState(null);
}
Goto DoubleVent;
Refire:
XZW2 A 1;
XZW4 Y 3;
Goto Fire+3;
DoubleRefire:
XZW5 Z 1;
XZW8 L 3;
Goto DoubleFire+2;
AltRefire:
XZW2 A 1;
XZW4 Y 3;
Goto AltFire+3;
DoubleAltRefire:
XZW5 Z 1;
XZW8 M 3;
Goto DoubleAltFire+2;
Vent:
XZW2 A 8
{
A_CanBob();
A_Overlay(PSP_WEAPON+2,"VentFlash");
A_OverlayFlags(PSP_WEAPON+2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
A_OverlayRenderStyle(PSP_WEAPON+2,STYLE_Add);
A_StartSound("biospark/hiss",CHAN_WEAPON,CHANF_OVERLAP);
}
Goto Ready;
DoubleVent:
XZW5 Z 8
{
A_CanBob();
A_Overlay(PSP_WEAPON+2,"VentFlash");
A_OverlayFlags(PSP_WEAPON+2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true);
A_OverlayRenderStyle(PSP_WEAPON+2,STYLE_Add);
A_StartSound("biospark/hiss",CHAN_WEAPON,CHANF_OVERLAP);
}
Goto DoubleReady;
VentFlash:
XZWY ABCDEFGHIJKLMNOPQRSTUVWX 1;
Stop;
Zoom:
XZW2 A 0 A_JumpIf(invoker.ClipCount<=0,"Reload");
XZW2 A 0 A_JumpIf(invoker.doublestacc,"DoubleZoom");
XZW2 A 0 A_JumpIf(invoker.ClipCount<2,"NoZoom");
XZW2 A 1 A_StartSound("biospark/prethird",CHAN_WEAPON,CHANF_OVERLAP);
XZW5 A 12 A_CanBob();
XZW5 A 1 A_FireSpark(2);
XZW2 VWXYZ 2;
Goto Ready;
DoubleZoom:
XZW5 Z 0 A_JumpIf((invoker.ClipCount<2)||((invoker.ClipCount>4)&&(invoker.ClipCount<6)),"DoubleNoZoom");
XZW5 Z 1 A_StartSound("biospark/prethird",CHAN_WEAPON,CHANF_OVERLAP);
XZW8 N 12 A_CanBob();
XZW8 N 1 A_FireSpark(2);
XZW7 MNOPQ 2;
Goto DoubleReady;
NoZoom:
XZW2 A 1 A_StartSound("biospark/prethird",CHAN_WEAPON,CHANF_OVERLAP);
XZW5 A 12 A_CanBob();
XZW5 A 8 A_FailZoom();
XZW2 A 20 A_CanBob();
Goto Ready;
DoubleNoZoom:
XZW5 Z 1 A_StartSound("biospark/prethird",CHAN_WEAPON,CHANF_OVERLAP);
XZW8 N 12 A_CanBob();
XZW8 N 8 A_FailZoom();
XZW5 Z 20 A_CanBob();
Goto DoubleReady;
Reload:
XZW2 A 0
{
if ( invoker.clipcount > 0 )
{
if ( !invoker.doublestacc && ((invoker.Ammo1.Amount > 0) || sv_infiniteammo || FindInventory('PowerInfiniteAmmo')) )
return ResolveState("AttachExtra");
return ResolveState("Idle");
}
if ( (invoker.Ammo1.Amount <= 0) && !sv_infiniteammo && !FindInventory('PowerInfiniteAmmo') )
return ResolveState("Idle");
if ( invoker.doublestacc )
return ResolveState("UnloadExtra");
return ResolveState(null);
}
XZW2 A 2
{
A_StartSound("biospark/meleestart",CHAN_WEAPON,CHANF_OVERLAP);
A_PlayerReload();
}
XZW3 ABCDE 2;
XZW3 F 2
{
invoker.clipcount = 0;
invoker.nomag = true;
A_BumpView(1);
A_QuakeEx(.3,.3,.3,6,0,15,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.1);
A_StartSound("biospark/magout",CHAN_WEAPON,CHANF_OVERLAP);
A_StopSound(CHAN_WEAPONEXTRA);
}
XZW3 GHIJKL 2;
XZW3 M 2 A_DropMag();
Goto Reload2;
UnloadExtra:
XZW5 Z 2
{
A_StartSound("biospark/meleestart",CHAN_WEAPON,CHANF_OVERLAP);
A_PlayerReload();
}
XZW9 MNOPQ 2;
XZW9 R 2
{
invoker.clipcount = 0;
invoker.nomag = true;
invoker.doublestacc = false;
A_BumpView(1);
A_QuakeEx(.3,.3,.3,6,0,15,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.1);
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);
XZW9 Z 0;
Goto Reload2;
Reload2:
XZW3 NOPQR 2;
XZW3 S 2
{
if ( !sv_infiniteammo && !FindInventory('PowerInfiniteAmmo',true) )
invoker.Ammo1.Amount = max(0,invoker.Ammo1.Amount-1);
invoker.clipcount = invoker.default.clipcount;
invoker.nomag = false;
A_BumpView(-1.5);
A_QuakeEx(.6,.6,.6,8,0,15,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.2);
A_StartSound("biospark/magin",CHAN_WEAPON,CHANF_OVERLAP);
A_StartSound("biospark/idle",CHAN_WEAPONEXTRA,CHANF_LOOP,.4,4.);
}
XZW3 UV 2;
XZW3 W 0 A_JumpIf((player.cmd.buttons&BT_RELOAD)&&((invoker.Ammo1.Amount>0)||sv_infiniteammo||FindInventory('PowerInfiniteAmmo')),"DoubleStacc");
Goto Reload3;
Reload3:
XZW3 W 2;
XZW3 X 2 A_StartSound("biospark/meleeend",CHAN_WEAPON,CHANF_OVERLAP);
XZW3 YZ 2;
XZW4 ABCD 2;
Goto Vent;
DoubleStacc:
XZWA ABCDEFG 2;
XZWA H 2
{
if ( !sv_infiniteammo && !FindInventory('PowerInfiniteAmmo',true) )
invoker.Ammo1.Amount = max(0,invoker.Ammo1.Amount-1);
invoker.clipcount += invoker.default.clipcount;
invoker.doublestacc = true;
A_BumpView(-2);
A_QuakeEx(.75,.75,.75,8,0,15,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.25);
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);
XZWA NOPQRS 2;
Goto DoubleVent;
AttachExtra:
XZW2 A 2
{
A_StartSound("biospark/meleestart",CHAN_WEAPON,CHANF_OVERLAP);
A_PlayerReload();
}
XZW6 ABCDEFGHI 2;
XZW6 J 2
{
if ( !sv_infiniteammo && !FindInventory('PowerInfiniteAmmo',true) )
invoker.Ammo1.Amount = max(0,invoker.Ammo1.Amount-1);
invoker.clipcount += invoker.default.clipcount;
invoker.doublestacc = true;
A_BumpView(-.8);
A_QuakeEx(.6,.6,.6,8,0,15,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.2);
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);
XZW6 MNOPQR 2;
Goto DoubleVent;
Idle:
XZW2 A 2
{
A_StartSound("biospark/checkout",CHAN_WEAPON,CHANF_OVERLAP);
A_PlayerCheckGun();
return A_JumpIf(invoker.doublestacc,"DoubleIdle");
}
XZW5 BCDE 2;
XZW5 FGHI 3;
XZW5 JKLM 2;
XZW5 NOPQ 3;
XZW5 RST 2;
XZW5 UVWXY 3;
Goto Ready;
DoubleIdle:
XZW5 Z 2;
XZW8 OPQR 2;
XZW8 STUV 3;
XZW8 WXYZ 2;
XZW9 ABCD 3;
XZW9 EFG 2;
XZW9 HIJKL 3;
Goto DoubleReady;
User1:
XZW2 A 2
{
A_StartSound("demolitionist/wswing",CHAN_WEAPON,CHANF_OVERLAP);
A_StartSound("biospark/meleestart",CHAN_WEAPON,CHANF_OVERLAP);
A_PlayerMelee();
return A_JumpIf(invoker.doublestacc,"DoubleUser1");
}
XZW4 EFG 2 A_BumpView(1,tics:2);
XZW4 H 1
{
A_BumpFOV(.98);
A_QuakeEx(.8,.8,.8,8,0,15,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.3);
A_Parry(9);
}
XZW4 IJ 1 A_BumpView(-4);
XZW4 K 2 A_Melee(60,"demolitionist/whitm",1.,1.1,1.1);
XZW4 LMNOPQ 2;
XZW4 R 2 A_StartSound("biospark/meleeend",CHAN_WEAPON,CHANF_OVERLAP);
XZW4 STUVWX 2;
Goto Ready;
DoubleUser1:
XZW5 Z 2;
XZW7 RST 2 A_BumpView(1,tics:2);
XZW7 U 1
{
A_BumpFOV(.98);
A_QuakeEx(.8,.8,.8,8,0,15,"",QF_RELATIVE|QF_SCALEDOWN|QF_3D,rollIntensity:.3);
A_Parry(9);
}
XZW7 VW 1 A_BumpView(-4);
XZW7 X 2 A_Melee(60,"demolitionist/whitm",1.,1.1);
XZW7 YZ 2;
XZW8 ABCD 2;
XZW8 E 2 A_StartSound("biospark/meleeend",CHAN_WEAPON,CHANF_OVERLAP);
XZW8 FGHIJK 2;
Goto DoubleReady;
Flash:
XZWZ A 2 Bright
{
let l = Spawn("SWWMWeaponLight",pos);
l.args[0] = 192;
l.args[1] = 255;
l.args[2] = 96;
l.target = self;
}
Stop;
}
}