// Assault Gun -------------------------------------------------------------- class AssaultGun : StrifeWeapon { Default { +FLOORCLIP Weapon.SelectionOrder 600; Weapon.AmmoUse1 1; Weapon.AmmoGive1 20; Weapon.AmmoType1 "ClipOfBullets"; Inventory.Icon "RIFLA0"; Tag "$TAG_ASSAULTGUN"; Inventory.PickupMessage "$TXT_ASSAULTGUN"; Obituary "$OB_MPASSAULTGUN"; } States { Spawn: RIFL A -1; Stop; Ready: RIFG A 1 A_WeaponReady; Loop; Deselect: RIFG B 1 A_Lower; Loop; Select: RIFG A 1 A_Raise; Loop; Fire: RIFF AB 3 A_FireAssaultGun; RIFG D 3 A_FireAssaultGun; RIFG C 0 A_ReFire; RIFG B 2 A_Light0; Goto Ready; } } extend class StateProvider { //============================================================================ // // A_FireAssaultGun // //============================================================================ void A_FireAssaultGun() { if (player == null) { return; } A_PlaySound ("weapons/assaultgun", CHAN_WEAPON); Weapon weapon = player.ReadyWeapon; if (weapon != null) { if (!weapon.DepleteAmmo (weapon.bAltFire)) return; } player.mo.PlayAttacking2 (); int damage = 4*(random[StrifeGun]() % 3 + 1); double ang = angle; if (player.refire) { ang += Random2[StrifeGun]() * (22.5 / 256) * AccuracyFactor(); } LineAttack (ang, PLAYERMISSILERANGE, BulletSlope (), damage, 'Hitscan', "StrifePuff"); } } // Standing variant of the assault gun -------------------------------------- class AssaultGunStanding : WeaponGiver { Default { DropItem "AssaultGun"; Inventory.PickupMessage "$TXT_ASSAULTGUN"; } States { Spawn: RIFL B -1; Stop; } }