ACTOR DualMP40Left : Ammo
{
  Inventory.Amount 1
  Inventory.MaxAmount 48
  Inventory.Icon "CLIPA0"
  +INVENTORY.IGNORESKILL
}

ACTOR DualMP40Right : Ammo
{
  Inventory.Amount 1
  Inventory.MaxAmount 48
  Inventory.Icon "CLIPA0"
  +INVENTORY.IGNORESKILL
}

ACTOR DualMP40Secondary : Ammo
{
  Inventory.PickupMessage "You picked up a mag of Order Pistol ammunition." // "Picked up a clip."
  Inventory.PickupSound "bullpup/magin"
  Inventory.Amount 10
  Inventory.MaxAmount 240
  Ammo.BackpackAmount 64
  Ammo.BackpackMaxAmount 240
  Inventory.Icon "CLIPA0"
  +INVENTORY.IGNORESKILL
  States
  {
  Spawn:
    CLIP A -1
    Stop
  }
}

ACTOR DualMP40s : Weapon
{
  Weapon.AmmoUse 0
  Weapon.AmmoUse2 0
  Weapon.AmmoGive 0
  Weapon.AmmoGive2 0
  Weapon.AmmoType "DualMP40Left"
  Weapon.AmmoType2 "DualMP40Right"
  Obituary "%k showed %o the power of the Dual MP40s."
  Inventory.Pickupmessage "You picked up the Dual MP40s."
  Inventory.PickupSound "ppsh/pickup"
  Tag "Dual MP40s"
  Scale 0.75
  States
  {
  //=================================================================
  // GUN FLASHES - USED FOR DUAL WIELDING
  //------------------------------------------------
  DualPistols:
	DPIR A 0
  RIdle:
	DPIR A 0 A_JumpIfInventory("SynthFireRight",1,"RFire")
	DM4R A 1
    Loop
  RSelect:
	D4SR ABC 1
	Goto RIdle
  RDeselect:
	D4SR CBA 1
	Stop
  RReloadFlash:
	TNT1 A 1
	Stop
	
  //=================================================================
  // -- RELOAD CHECKS
  
  ToCR:
	TNT1 A 0 A_JumpIfInventory("Perk_Commando",1,"CheckRightPerk")
	Goto CheckRight
  
  CheckRight:
	// Check if right MP40 is full
	TNT1 A 0 A_JumpIfInventory("DualMP40Right",32,"ToCL")
	Goto DoReload
  CheckRightPerk:
	TNT1 A 0 A_JumpIfInventory("PerkLevel",10,"CheckRightPerk10")
	TNT1 A 0 A_JumpIfInventory("DualMP40Right",40,"ToCL")
	Goto DoReload
  CheckRightPerk10:
	TNT1 A 0 A_JumpIfInventory("DualMP40Right",48,"ToCL")
	Goto DoReload
	
	
	
	
  ToCL:
	TNT1 A 0 A_JumpIfInventory("Perk_Commando",1,"CheckLeftPerk")
	Goto CheckLeft
  CheckLeft:
	// Check if right MP40 is full
	TNT1 A 0 A_JumpIfInventory("DualMP40Left",32,1)
	Goto DoReload
	TNT1 A 0
	Goto LIdle
  CheckLeftPerk:
	TNT1 A 0 A_JumpIfInventory("PerkLevel",10,"CheckLeftPerk10")
	// Check if right MP40 is full
	TNT1 A 0 A_JumpIfInventory("DualMP40Left",40,1)
	Goto DoReload
	TNT1 A 0
	Goto LIdle
  CheckLeftPerk10:
	// Check if right MP40 is full
	TNT1 A 0 A_JumpIfInventory("DualMP40Left",48,1)
	Goto DoReload
	TNT1 A 0
	Goto LIdle
  
  //------------------------------------------------
  // DRY FIRES
  //------------------------------------------------
  DryFireR:
	TNT1 A 0 A_TakeInventory("SynthFireRight",1)
	TNT1 A 0 A_JumpIfInventory("OrderDualPrimary",1,"RIdle")
	NULL A 0 A_PlaySoundEx("orderpistol/dryfire","SoundSlot6")
	Goto RIdle
  GiveBothReload:
	TNT1 A 0 A_TakeInventory("IsReloading",1)
	TNT1 A 0 A_TakeInventory("RightMagFull",1)
	TNT1 A 0 A_TakeInventory("LeftMagFull",1)
	Goto ToCR
	
  DoReload:
	TNT1 A 0 A_JumpIfInventory("DualMP40Secondary",1,1)
	Goto LIdle
	D4RL A 0 A_GunFlash("RReloadFlash")
	D4RL ABCD 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	D4RL E 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	D4RL F 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	40RL I 0 A_PlaySoundEx("mp40/magout","SoundSlot6")
	BPSS A 0 A_FireCustomMissile("PistolMagShooter",5,0,16,-3)
	BPSS A 0 A_FireCustomMissile("PistolMagShooter",5,0,-16,-3)
	D4RL FGHI 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	D4RL J 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	D4RL K 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	D4RL L 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	D4RL MNOPQRS 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	D4RL T 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	D4RL U 8 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	D4RL VWX 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	40RL I 0 A_PlaySoundEx("mp40/magin","SoundSlot6")
	D4RL YZ 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	D4RM A 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	D4RM B 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	D4RM C 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	D4RM D 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	D4RM E 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	D4RM F 3 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	D4RM G 2 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	D4RM HI 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	D4RL FEDCBA 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	ORDS A 0 A_GunFlash("RIdle")
	Goto CalculateCheckR
	
	
//=============================================================================
// -- AMMO CALCULATION

  CalculateCheckR:
	 TNT1 A 0
	 TNT1 A 0 A_JumpIfInventory("Perk_Commando",1,"LevelCheckR")			// If we're a rifleman then give us an ammo boost
	 Goto CalculateAmmoRight
  LevelCheckR:
	 TNT1 A 0 A_JumpIfInventory("PerkLevel",10,"CalculateAmmoRightPerk10")
	 Goto CalculateAmmoRightPerk
  CalculateAmmoRight:
	DPIS A 0 A_JumpIfInventory("DualMP40Right",32,"CalculateCheckL")
	DPIS A 0 A_JumpIfInventory("DualMP40Secondary",1,1)
	Goto RIdle
	DPIS A 0 A_TakeInventory("DualMP40Secondary",1)
	DPIS A 0 A_GiveInventory("DualMP40Right",1)
	Loop
  CalculateAmmoRightPerk:
	DPIS A 0 A_JumpIfInventory("DualMP40Right",40,"CalculateCheckL")
	DPIS A 0 A_JumpIfInventory("DualMP40Secondary",1,1)
	Goto RIdle
	DPIS A 0 A_TakeInventory("DualMP40Secondary",1)
	DPIS A 0 A_GiveInventory("DualMP40Right",1)
	Loop
  CalculateAmmoRightPerk10:
	DPIS A 0 A_JumpIfInventory("DualMP40Right",48,"CalculateCheckL")
	DPIS A 0 A_JumpIfInventory("DualMP40Secondary",1,1)
	Goto RIdle
	DPIS A 0 A_TakeInventory("DualMP40Secondary",1)
	DPIS A 0 A_GiveInventory("DualMP40Right",1)
	Loop
	
	
  CalculateCheckL:
	 TNT1 A 0
	 TNT1 A 0 A_JumpIfInventory("Perk_Commando",1,"LevelCheckL")
	 Goto CalculateAmmoLeft
  LevelCheckL:
	 TNT1 A 0 A_JumpIfInventory("PerkLevel",10,"CalculateAmmoLeftPerk10")
	 Goto CalculateAmmoLeftPerk
  CalculateAmmoLeft:
	DPIS A 0 A_JumpIfInventory("DualMP40Left",32,"LIdle")
	DPIS A 0 A_JumpIfInventory("DualMP40Secondary",1,1)
	Goto LIdle
	DPIS A 0 A_TakeInventory("DualMP40Secondary",1)
	DPIS A 0 A_GiveInventory("DualMP40Left",1)
	Loop
  CalculateAmmoLeftPerk:
	DPIS A 0 A_JumpIfInventory("DualMP40Left",40,"LIdle")
	DPIS A 0 A_JumpIfInventory("DualMP40Secondary",1,1)
	Goto LIdle
	DPIS A 0 A_TakeInventory("DualMP40Secondary",1)
	DPIS A 0 A_GiveInventory("DualMP40Left",1)
	Loop
  CalculateAmmoLeftPerk10:
	DPIS A 0 A_JumpIfInventory("DualMP40Left",48,"LIdle")
	DPIS A 0 A_JumpIfInventory("DualMP40Secondary",1,1)
	Goto LIdle
	DPIS A 0 A_TakeInventory("DualMP40Secondary",1)
	DPIS A 0 A_GiveInventory("DualMP40Left",1)
	Loop
	
  //=================================================================
  Ready:
	PPSS A 0
	PPSS A 0 A_TakeInventory("SynthFireLeft",1)
	PPSS A 0 A_TakeInventory("SynthFireRight",1)
	Goto LIdle
  LIdle:
	PPSS A 0 A_JumpIfInventory("IsReloading",1,"GiveBothReload")
	PPSS A 0 A_JumpIfInventory("SynthFireLeft",1,"LFire")
	PPSS A 0 A_JumpIfInventory("DoBlocking",1,"QuickMelee")
    PPSS A 0 //A_JumpIfInventory("QuickGrenading",1,"ToGrenade")
	//PPSS A 0 A_JumpIfInventory("ReloadingL",1,"LReload")
	PPSS A 0 A_TakeInventory("BackToEmpty",1)
    DM4L A 1 A_WeaponReady(12)
    Loop
  ToGrenade:
	//PPSS A 0 ACS_ExecuteAlways(558,0,0,0,1)
	ORDD A 1
	Goto Ready
  Profanity:
	9MRL A 0 ACS_ExecuteAlways(820,0,2,0,0)
	ORFU ABC 2
	ORFU D 26
	ORFU CBA 2
	PPFU A 0 A_TakeInventory("FuckYou",1)
	Goto Ready
  QuickMelee:
	ORDM A 0 A_JumpIfInventory("OrderDualPrimary",1,1)
	Goto QMEmpty
	ORDM A 0 A_PlaySoundEx("fist/swing","Weapon")
	ORDM ABCDF 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	PPBL D 0 A_CustomPunch (random(4,5),1,0,"BlockPuff")
	ORDM HIJKL 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	TNT1 A 2
	ORDS ABCD 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	PPBL A 0 A_TakeInventory("DoBlocking",1)
	Goto Ready
  QMEmpty:
	ORDN A 0 A_PlaySoundEx("fist/swing","Weapon")
	ORDN ABCDF 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	PPBL D 0 A_CustomPunch (random(4,5),1,0,"BlockPuff")
	ORDN HIJKL 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	TNT1 A 2
	ORDS EFGH 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	PPBL A 0 A_TakeInventory("DoBlocking",1)
	Goto Ready
  ToReady:
	NULL A 0
	Goto Ready
	NULL AAA 0
	NULL A 0 A_PlaySoundEx("orderpistol/dryfire","SoundSlot6")
	PPFI A 0 A_TakeInventory("SynthFireLeft",1)
	Goto Ready
  NullFlash:
	TNT1 A 0
	Stop
  Deselect:
	 TNT1 A 0 A_GunFlash("RDeselect")
	 D4SL CBA 1
	 TNT1 A 0 A_TakeInventory("SynthFireActive",1)
     TNT1 AAAAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
	 TNT1 A 1 A_Lower
     Goto Deselect+13
  Select:
	 TNT1 A 0 A_SetCrosshair(7)
	 TNT1 AA 0 A_Raise
	 TNT1 A 0 A_GiveInventory("SynthFireActive",1)
	 TNT1 A 1 A_WeaponReady
	 TNT1 A 0 A_PlaySoundEx("orderpistol/select","SoundSlot6")
	 Goto SelectAnim
  SelectAnim:
	ORDS A 0 A_GunFlash("RSelect")
	D4SL ABC 1 A_WeaponReady(WRF_NOFIRE | WRF_NOSWITCH)
	TNT1 A 0 ACS_ExecuteAlways(560,0,0,0,0)
	TNT1 A 0 ACS_ExecuteAlways(561,0,0,0,0)
	//TNT1 A 0 A_Gunflash("DualPistols")
	Goto Ready
  AltFire:
  Fire:
	TNT1 A 0
	Stop
  RFire:
	 PPFI A 0 A_JumpIfInventory("DualMP40Right",1,1)
	 Goto DryFireR
	 PPFI A 0 A_TakeInventory("DualMP40Right",1)
	 PPFI A 0 A_AlertMonsters
	 PPFI A 0 A_FireBullets (ACS_ExecuteWithResult(566,4,0,0), ACS_ExecuteWithResult(566,6,0,0), 1, 5, "BulletPuff2")
	 BPSS A 0 A_FireCustomMissile("LongRifleCaseSpawn",5,0,16,-3)
	 PPFI A 0 A_PlaySoundEx("mp40/fire", "SoundSlot6")
	 TNT1 A 0 A_SpawnItemEx("ShooterLight",0,0,0)
	 PPFI A 0 A_FireCustomMissile("MuzzleSmokeFX",0,0,12,0)
	 PPFI A 0 A_SetPitch(pitch-1.5)
	 DM4R B 1 bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 PPFI A 0 A_SetPitch(pitch+1.0)
	 DM4R CD 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 DM4R E 0 A_JumpIfInventory("SynthFireRight",1,"RFire")
	 PPFI A 0 A_TakeInventory("SynthFireRight",1)
	 Goto RIdle
  LFire:
	 PPFI A 0 A_JumpIfInventory("DualMP40Left",1,1)
	 Goto ToReady+2
	 PPFI A 0 A_TakeInventory("DualMP40Left",1)
	 PPFI A 0 A_AlertMonsters
	 PPFI A 0 A_FireBullets (ACS_ExecuteWithResult(566,4,0,0), ACS_ExecuteWithResult(566,4,0,0), 1, 5, "BulletPuff2")
	 BPSS A 0 A_FireCustomMissile("LongRifleCaseSpawn",5,0,-12,-3)
	 PPFI A 0 A_PlaySoundEx("mp40/fire", "SoundSlot7")
	 PPFI A 0 A_FireCustomMissile("MuzzleSmokeFX",0,0,-12,0)
	 TNT1 A 0 A_SpawnItemEx("ShooterLight",0,0,0)
	 PPFI A 0 A_SetPitch(pitch-1.5)
	 DM4L B 1 bright A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 PPFI A 0 A_SetPitch(pitch+1.0)
	 DM4L CD 1 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
	 DM4L E 0 A_JumpIfInventory("SynthFireLeft",1,"LFire")
	 PPFI A 0 A_TakeInventory("SynthFireLeft",1)
	 Goto LIdle
  Spawn:
    PPSH F -1
    Stop
  }
}