mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-12-11 13:11:48 +00:00
82 lines
1.7 KiB
Text
82 lines
1.7 KiB
Text
// --------------------------------------------------------------------------
|
|
//
|
|
// Chaingun
|
|
//
|
|
// --------------------------------------------------------------------------
|
|
|
|
class Chaingun : DoomWeapon
|
|
{
|
|
Default
|
|
{
|
|
Weapon.SelectionOrder 700;
|
|
Weapon.AmmoUse 1;
|
|
Weapon.AmmoGive 20;
|
|
Weapon.AmmoType "Clip";
|
|
Inventory.PickupMessage "$GOTCHAINGUN";
|
|
Obituary "$OB_MPCHAINGUN";
|
|
Tag "$TAG_CHAINGUN";
|
|
}
|
|
States
|
|
{
|
|
Ready:
|
|
CHGG A 1 A_WeaponReady;
|
|
Loop;
|
|
Deselect:
|
|
CHGG A 1 A_Lower;
|
|
Loop;
|
|
Select:
|
|
CHGG A 1 A_Raise;
|
|
Loop;
|
|
Fire:
|
|
CHGG AB 4 A_FireCGun;
|
|
CHGG B 0 A_ReFire;
|
|
Goto Ready;
|
|
Flash:
|
|
CHGF A 5 Bright A_Light1;
|
|
Goto LightDone;
|
|
CHGF B 5 Bright A_Light2;
|
|
Goto LightDone;
|
|
Spawn:
|
|
MGUN A -1;
|
|
Stop;
|
|
}
|
|
}
|
|
|
|
//===========================================================================
|
|
//
|
|
// Code (must be attached to StateProvider)
|
|
//
|
|
//===========================================================================
|
|
|
|
extend class StateProvider
|
|
{
|
|
action void A_FireCGun()
|
|
{
|
|
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;
|
|
|
|
A_PlaySound ("weapons/chngun", CHAN_WEAPON);
|
|
|
|
State flash = weap.FindState('Flash');
|
|
if (flash != null)
|
|
{
|
|
// Removed most of the mess that was here in the C++ code because SetSafeFlash already does some thorough validation.
|
|
State atk = weap.FindState('Fire');
|
|
State cur = player.GetPSprite(PSP_WEAPON).CurState;
|
|
int theflash = atk == cur? 0:1;
|
|
player.SetSafeFlash(weap, flash, theflash);
|
|
}
|
|
}
|
|
player.mo.PlayAttacking2 ();
|
|
|
|
GunShot (!player.refire, "BulletPuff", BulletSlope ());
|
|
}
|
|
}
|