mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-12-12 05:32:03 +00:00
a638cfbd6e
As a consequence it must return null in the failure case instead of asserting and all calls to this function must check for the failure case.
83 lines
1.8 KiB
Text
83 lines
1.8 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_StartSound ("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');
|
|
let psp = player.GetPSprite(PSP_WEAPON);
|
|
if (psp) State cur = psp.CurState;
|
|
int theflash = atk == cur? 0:1;
|
|
player.SetSafeFlash(weap, flash, theflash);
|
|
}
|
|
}
|
|
player.mo.PlayAttacking2 ();
|
|
|
|
GunShot (!player.refire, "BulletPuff", BulletSlope ());
|
|
}
|
|
}
|