mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-27 22:33:17 +00:00
0770c0022c
Many uses of random() & value have been turned into random(0, value). This is not only more efficient, it also ensures better random distribution because the parameter-less variant only returns values between 0 and 255.
149 lines
2.4 KiB
Text
149 lines
2.4 KiB
Text
// --------------------------------------------------------------------------
|
|
//
|
|
// Plasma rifle
|
|
//
|
|
// --------------------------------------------------------------------------
|
|
|
|
class PlasmaRifle : DoomWeapon
|
|
{
|
|
Default
|
|
{
|
|
Weapon.SelectionOrder 100;
|
|
Weapon.AmmoUse 1;
|
|
Weapon.AmmoGive 40;
|
|
Weapon.AmmoType "Cell";
|
|
Inventory.PickupMessage "$GOTPLASMA";
|
|
Tag "$TAG_PLASMARIFLE";
|
|
}
|
|
States
|
|
{
|
|
Ready:
|
|
PLSG A 1 A_WeaponReady;
|
|
Loop;
|
|
Deselect:
|
|
PLSG A 1 A_Lower;
|
|
Loop;
|
|
Select:
|
|
PLSG A 1 A_Raise;
|
|
Loop;
|
|
Fire:
|
|
PLSG A 3 A_FirePlasma;
|
|
PLSG B 20 A_ReFire;
|
|
Goto Ready;
|
|
Flash:
|
|
PLSF A 4 Bright A_Light1;
|
|
Goto LightDone;
|
|
PLSF B 4 Bright A_Light1;
|
|
Goto LightDone;
|
|
Spawn:
|
|
PLAS A -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
class PlasmaBall : Actor
|
|
{
|
|
Default
|
|
{
|
|
Radius 13;
|
|
Height 8;
|
|
Speed 25;
|
|
Damage 5;
|
|
Projectile;
|
|
+RANDOMIZE
|
|
+ZDOOMTRANS
|
|
RenderStyle "Add";
|
|
Alpha 0.75;
|
|
SeeSound "weapons/plasmaf";
|
|
DeathSound "weapons/plasmax";
|
|
Obituary "$OB_MPPLASMARIFLE";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
PLSS AB 6 Bright;
|
|
Loop;
|
|
Death:
|
|
PLSE ABCDE 4 Bright;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
// --------------------------------------------------------------------------
|
|
//
|
|
// BFG 2704
|
|
//
|
|
// --------------------------------------------------------------------------
|
|
|
|
class PlasmaBall1 : PlasmaBall
|
|
{
|
|
Default
|
|
{
|
|
Damage 4;
|
|
BounceType "Classic";
|
|
BounceFactor 1.0;
|
|
Obituary "$OB_MPBFG_MBF";
|
|
}
|
|
States
|
|
{
|
|
Spawn:
|
|
PLS1 AB 6 Bright;
|
|
Loop;
|
|
Death:
|
|
PLS1 CDEFG 4 Bright;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
class PlasmaBall2 : PlasmaBall1
|
|
{
|
|
States
|
|
{
|
|
Spawn:
|
|
PLS2 AB 6 Bright;
|
|
Loop;
|
|
Death:
|
|
PLS2 CDE 4 Bright;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
|
|
//===========================================================================
|
|
//
|
|
// Code (must be attached to StateProvider)
|
|
//
|
|
//===========================================================================
|
|
|
|
extend class StateProvider
|
|
{
|
|
|
|
//===========================================================================
|
|
//
|
|
// A_FirePlasma
|
|
//
|
|
//===========================================================================
|
|
|
|
action void A_FirePlasma()
|
|
{
|
|
if (player == null)
|
|
{
|
|
return;
|
|
}
|
|
Weapon weap = player.ReadyWeapon;
|
|
if (weap != null && invoker == weap && stateinfo != null && stateinfo.mStateType == STATE_Psprite)
|
|
{
|
|
if (!weap.DepleteAmmo (weap.bAltFire, true, 1))
|
|
return;
|
|
|
|
State flash = weap.FindState('Flash');
|
|
if (flash != null)
|
|
{
|
|
player.SetSafeFlash(weap, flash, random[FirePlasma](0, 1));
|
|
}
|
|
|
|
}
|
|
|
|
SpawnPlayerMissile ("PlasmaBall");
|
|
}
|
|
}
|