First!
This commit is contained in:
commit
22dac448ea
918 changed files with 2378 additions and 0 deletions
185
zscript/stinger.zsc
Normal file
185
zscript/stinger.zsc
Normal file
|
|
@ -0,0 +1,185 @@
|
|||
Class StingerAmmo : Ammo
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "Tarydium Shards";
|
||||
Inventory.Icon "I_Stingr";
|
||||
Inventory.PickupMessage "You picked up 40 Tarydium Shards.";
|
||||
Inventory.Amount 40;
|
||||
Inventory.MaxAmount 200;
|
||||
Ammo.BackpackAmount 80;
|
||||
Ammo.BackpackMaxAmount 400;
|
||||
Ammo.DropAmount 10;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
SAMO A -1;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class StingerProjectile : Actor
|
||||
{
|
||||
Default
|
||||
{
|
||||
Obituary "%o was perforated by %k's Stinger.";
|
||||
DamageType 'shot';
|
||||
DamageFunction Random[Stinger](15,25);
|
||||
Speed 40;
|
||||
Radius 2;
|
||||
Height 2;
|
||||
PROJECTILE;
|
||||
+SKYEXPLODE;
|
||||
+BLOODSPLATTER;
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
TPRJ A -1 Bright;
|
||||
Stop;
|
||||
Death:
|
||||
TNT1 A 0
|
||||
{
|
||||
if ( !Random[Stinger](0,2) ) A_PlaySound("stinger/hit2",CHAN_BODY,0.5);
|
||||
else A_PlaySound("stinger/hit",CHAN_BODY,0.6);
|
||||
}
|
||||
TPRJ BCDEFG 2 Bright;
|
||||
Stop;
|
||||
XDeath:
|
||||
TNT1 A 1 A_PlaySound("stinger/flesh");
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
Class Stinger : UnrealWeapon
|
||||
{
|
||||
Default
|
||||
{
|
||||
Tag "Stinger";
|
||||
Inventory.PickupMessage "You picked up the Stinger.";
|
||||
Weapon.UpSound "stinger/select";
|
||||
Weapon.SlotNumber 3;
|
||||
Weapon.SelectionOrder 7;
|
||||
Weapon.AmmoType "StingerAmmo";
|
||||
Weapon.AmmoUse 1;
|
||||
Weapon.AmmoType2 "StingerAmmo";
|
||||
Weapon.AmmoUse2 1;
|
||||
Weapon.AmmoGive 40;
|
||||
}
|
||||
action void A_StingerFire()
|
||||
{
|
||||
Weapon weap = Weapon(invoker);
|
||||
if ( !weap ) return;
|
||||
if ( weap.Ammo1.Amount <= 0 ) return;
|
||||
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
||||
UnrealMainHandler.DoFlash(self,Color(16,0,64,255),1);
|
||||
A_AlertMonsters();
|
||||
A_QuakeEx(1,1,1,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
||||
Vector3 x, y, z;
|
||||
[x, y, z] = Matrix4.GetAxes(pitch,angle,roll);
|
||||
Vector3 origin = (pos.x,pos.y,player.viewz)+10.0*x+8.0*y-9.0*z;
|
||||
Actor p = Spawn("StingerProjectile",origin);
|
||||
p.angle = angle;
|
||||
p.pitch = BulletSlope();
|
||||
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*p.speed;
|
||||
p.target = self;
|
||||
}
|
||||
action void A_StingerAltFire()
|
||||
{
|
||||
Weapon weap = Weapon(invoker);
|
||||
if ( !weap ) return;
|
||||
if ( weap.Ammo1.Amount <= 0 ) return;
|
||||
UnrealMainHandler.DoFlash(self,Color(16,0,64,255),1);
|
||||
A_AlertMonsters();
|
||||
A_QuakeEx(1,1,1,4,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1);
|
||||
Vector3 x, y, z;
|
||||
[x, y, z] = Matrix4.GetAxes(pitch,angle,roll);
|
||||
Vector3 origin = (pos.x,pos.y,player.viewz)+10.0*x+8.0*y-9.0*z;
|
||||
[x, y, z] = Matrix4.GetAxes(BulletSlope(),angle,roll);
|
||||
A_PlaySound("stinger/altfire",CHAN_WEAPON);
|
||||
Actor p;
|
||||
double a, s;
|
||||
Vector3 dir;
|
||||
for ( int i=0; i<4; i++ )
|
||||
{
|
||||
if ( weap.Ammo1.Amount <= 0 ) return;
|
||||
if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return;
|
||||
a = FRandom[Stinger](0,360);
|
||||
s = FRandom[Stinger](0,0.08);
|
||||
dir = (x+y*cos(a)*s+z*sin(a)*s).unit();
|
||||
p = Spawn("StingerProjectile",origin);
|
||||
p.angle = atan2(dir.y,dir.x);
|
||||
p.pitch = asin(-dir.z);
|
||||
p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*p.speed;
|
||||
p.target = self;
|
||||
}
|
||||
}
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
STNP A -1;
|
||||
Stop;
|
||||
STNP B -1;
|
||||
Stop;
|
||||
Select:
|
||||
STNS A 1 A_Raise(int.max);
|
||||
Wait;
|
||||
Ready:
|
||||
STNS ABCDEFGHIJKLMNOPQRSTU 1 A_WeaponReady(WRF_NOFIRE);
|
||||
Idle:
|
||||
STNI A 1
|
||||
{
|
||||
A_CheckReload();
|
||||
A_WeaponReady();
|
||||
}
|
||||
Wait;
|
||||
Fire:
|
||||
STNF A 2
|
||||
{
|
||||
A_PlaySound("stinger/fire",CHAN_WEAPON);
|
||||
A_StingerFire();
|
||||
A_Overlay(PSP_FLASH,"MFlash");
|
||||
A_OverlayFlags(PSP_FLASH,PSPF_RenderStyle,true);
|
||||
A_OverlayRenderstyle(PSP_FLASH,STYLE_Add);
|
||||
}
|
||||
STNF BC 2;
|
||||
STNI A 3;
|
||||
STNI A 0 A_Refire(1);
|
||||
Goto Idle;
|
||||
STNI A 0 A_PlaySound("stinger/hold",CHAN_WEAPON,1.0,true);
|
||||
Hold:
|
||||
STNH A 1
|
||||
{
|
||||
A_StingerFire();
|
||||
A_Overlay(PSP_FLASH,"MFlashHold");
|
||||
A_OverlayFlags(PSP_FLASH,PSPF_RenderStyle,true);
|
||||
A_OverlayRenderstyle(PSP_FLASH,STYLE_Add);
|
||||
}
|
||||
STNH BCDEFG 1;
|
||||
STNH A 0 A_Refire();
|
||||
STNH A 2 A_PlaySound("stinger/release",CHAN_WEAPON);
|
||||
Goto Idle;
|
||||
AltFire:
|
||||
STNF A 2
|
||||
{
|
||||
A_StingerAltFire();
|
||||
A_Overlay(PSP_FLASH,"MFlash");
|
||||
A_OverlayFlags(PSP_FLASH,PSPF_RenderStyle,true);
|
||||
A_OverlayRenderstyle(PSP_FLASH,STYLE_Add);
|
||||
}
|
||||
STNF BC 2;
|
||||
STNI A 35; // yes, 1 second cooldown
|
||||
Goto Idle;
|
||||
Deselect:
|
||||
STND ABCDEFGHIJK 1;
|
||||
STND K 1 A_Lower(int.max);
|
||||
Wait;
|
||||
MFlash:
|
||||
STFF ABC 2 Bright;
|
||||
Stop;
|
||||
MFlashHold:
|
||||
STFH ABCDEFG 1 Bright;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue