Actor SMGDualGiver : CustomInventory
{ //Scripted (Can break multiplayer weapon spawner)
Scale 0.75
-COUNTITEM
+INVENTORY.BIGPOWERUP
+INVENTORY.AUTOACTIVATE
+INVENTORY.IGNORESKILL
Inventory.PickupSound "items/assaultrifle"
Inventory.PickupMessage "Dual Submachine guns!"
States
{
   Spawn:
     TNT1 A 1
	 TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("CheckWeaponWorldSpawn") == 1,"SpawnDropped")
	 TNT1 A 1 ACS_NamedExecuteAlways("SpawnWeaponActive",0,0,1)
	 SMGP B -1
	 Wait
   SpawnDropped:
     TNT1 A 1 A_SpawnItem("SMGDualGiverDropped")
	 Stop
   Pickup:
	 TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("MPWeaponCheck") == 2,"PickupMP")
	 TNT1 A 0 A_GiveInventory("BulletMag",32)
	 TNT1 A 0 A_GiveInventory("Submachine gun",1)
	 TNT1 A 0 A_JumpIfInventory("SMGDualToken",1,"pickup2")
	 TNT1 A 0 A_GiveInventory("MP40DualMag",64)
	 TNT1 A 0 A_GiveInventory("SMGDualToken",1)
	 TNT1 A 1 A_GiveInventory("SMGSwitched",1)
	 Stop
   PickupMP:
     TNT1 A 0 A_JumpIfInventory("SMGDualToken",1,"Nope")
	 TNT1 A 0 A_GiveInventory("BulletMag",32)
	 TNT1 A 0 A_GiveInventory("MP40DualMag",64)
	 TNT1 A 0 A_GiveInventory("SMGDualToken",1)
	 TNT1 A 0 A_GiveInventory("SMGSwitched",1)
	 TNT1 A 1 ACS_NamedExecuteAlways("SpawnWeaponActive",0,0,1)
	 Fail
   Pickup2:
	 TNT1 A 1
	 Stop
   Nope:
     SMGP B 1
	 Fail
	 }
}

Actor SMGDualGiverMP : SMGDualGiver
{ 
States 
{ 
  Spawn:
  TNT1 A 0
  TNT1 A 1 ACS_NamedExecuteAlways("SpawnWeaponActive",0,0,1)
  SMGP B -1
  Loop 
  } 
}

Actor SMGDualGiverDropped : SMGDualGiver
{
+INVENTORY.TOSSED
+INVENTORY.NEVERRESPAWN
States
{
  Spawn:
   SMGP B -1
   Loop
  Pickup:
   TNT1 A 0 A_GiveInventory("BulletMag",32)
   TNT1 A 0 A_GiveInventory("Submachine gun",1)
   TNT1 A 0 A_JumpIfInventory("SMGDualToken",1,"pickup2")
   TNT1 A 0 A_GiveInventory("SMGDualToken",1)
   TNT1 A 0 A_GiveInventory("MP40DualMag",64)
   TNT1 A 1 A_GiveInventory("SMGSwitched",1)
   Stop
   }
}


ACTOR SMGSwitched : Inventory {Inventory.MaxAmount 1 Inventory.InterhubAmount 1}
ACTOR SMGDualToken : Inventory {Inventory.MaxAmount 1 Inventory.InterhubAmount 1}
ACTOR SMGDualCounter : Inventory {Inventory.MaxAmount 32}

Actor "Submachine gun" : Weapon 30266
{ //Scripted (due to ammo change between one or two weapons)
//Creator: Fluffy
//Origin: Nexus Infinity
//Sprite: ZG11
//Title: "Submachine gun" 
SpawnID 54
Scale 0.95
Decal "BulletChip"
Weapon.SelectionOrder 4801
Weapon.KickBack 50
Weapon.AmmoUse 1
Weapon.AmmoGive 32
Weapon.AmmoGive2 20
Weapon.AmmoType "SMGMagazine"
Weapon.AmmoType2 "BulletMag"
Inventory.PickupSound "items/assaultrifle"
Inventory.PickupMessage "Submachine gun"
Obituary "%o was perforated by %k's Submachine gun."
Weapon.PreferredSkin "AssaultRifle-Marine"
+WEAPON.NOALERT
+WEAPON.AMMO_OPTIONAL
+INVENTORY.UNDROPPABLE
States
{
  Spawn:
	SMGP A -1
	Loop
  Select:
	TNT1 A 0 A_Raise
	Wait
  Deselect:
    TNT1 A 0 A_JumpIfInventory("SMGSwitched",1,"DeselectDual")
	TNT1 A 0 A_PlayWeaponSound("weapons/weapondown")
  DeselectLoop:
	TNT1 A 0 A_Lower
	ZG11 A 1 A_Lower
	Loop
  DeselectDual:
	TNT1 A 0 A_PlayWeaponSound("smg/holster")
    ZG14 JKLMN 1
	TNT1 A 0 A_Lower
	TNT1 A 1 A_Lower
	Goto DeselectDual+6
  Ready:
    TNT1 A 1 A_TakeInventory("RailgunAction",1)
	TNT1 A 0 A_PlayWeaponSound("smg/draw")
	TNT1 A 0 A_JumpIfInventory("SMGSwitched",1,"DualReady")
	ZG10 ABCDEFG 1
  ReadyLoop:
	ZG11 A 1 A_WeaponReady
	TNT1 A 0 A_JumpIfInventory("SMGSwitched",1,"ChangeWeaponReally")
	TNT1 A 0 A_JumpIfInventory("RailgunAction",1,"Zoom")
	TNT1 A 0 A_JumpIfInventory("HandGrenadeAction",1,"GrenadeCheck")
	TNT1 A 0 A_JumpIfInventory("MineAction",1,"MineCheck")
	Loop
  DualReady:
    ZG14 MLKJ 1
  DualReadyLoop:
    ZG14 A 1 A_WeaponReady
	TNT1 A 0 A_JumpIfInventory("RailgunAction",1,"Zoom")
	TNT1 A 0 A_JumpIfInventory("HandGrenadeAction",1,"GrenadeCheck2")
	TNT1 A 0 A_JumpIfInventory("MineAction",1,"MineCheck2")
	Loop
  Fire:
    TNT1 A 0 A_JumpIfInventory("SMGSwitched",1,"DualFire")
	TNT1 A 0 A_JumpIfNoAmmo("Empty")
	TNT1 A 0 A_PlayWeaponSound("smg/fire")
	TNT1 A 0 A_AlertMonsters	
	TNT1 A 0 A_GunFlash
	TNT1 A 0 Radius_Quake(1,2,0,1,0)
	TNT1 A 0 A_SpawnItemEx("RifleCasing",30,3,25,Random(2,4),Random(3,6),Random(3,6),0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
	TNT1 A 0 A_Light1
	ZG11 B 1 Bright A_FireBullets(4.2,2.5,-1,Random(5,7),"ModdedBulletPuff")
	TNT1 A 0 A_Light0
	ZG11 CD 1
	TNT1 A 0 A_JumpIfInventory("SMGMagazine",1,"Fire2")
	ZG11 EF 1 A_Refire
	Goto ReadyLoop
  DualFire:
	TNT1 A 0 A_JumpIfNoAmmo("Empty2")
	TNT1 A 0 A_PlayWeaponSound("smg/fire")
	TNT1 A 0 A_AlertMonsters	
	TNT1 A 0 A_GunFlash
	TNT1 A 0 Radius_Quake(1,2,0,1,0)
	TNT1 A 0 A_SpawnItemEx("RifleCasing",30,-20,25,Random(2,4),Random(-3,-6),Random(3,6),0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0) //A_SpawnItemEx("RifleCasing",30,3,25,Random(2,4),Random(3,6),Random(3,6),0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
	TNT1 A 0 A_Light1
	ZG14 B 1 Bright A_FireBullets(4.2,2.5,-1,Random(5,7),"ModdedBulletPuff")
	ZG14 C 1 Bright
	TNT1 A 0 A_Light0
	TNT1 A 0 A_JumpIfNoAmmo("DualDryFire")
	TNT1 A 0 A_PlaySound("smg/fire",6)
	TNT1 A 0 A_AlertMonsters	
	TNT1 A 0 A_GunFlash
	TNT1 A 0 Radius_Quake(1,2,0,1,0)
	TNT1 A 0 A_SpawnItemEx("RifleCasing",30,20,25,Random(2,4),Random(3,6),Random(3,6),0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
	TNT1 A 0 A_Light1
	TNT1 A 0 A_TakeInventory("SMGDualCounter",1,TIF_NOTAKEINFINITE)
	ZG14 D 1 Bright A_FireBullets(4.2,2.5,-1,Random(5,7),"ModdedBulletPuff")
	ZG14 E 1 Bright
	TNT1 A 0 A_Light0
	TNT1 A 0 A_JumpIfNoAmmo("DualDryFire")
	TNT1 A 0 A_Refire("DualFireLoop")
	ZG14 H 2
	ZG14 I 2 A_Refire("DualFire")
	Goto DualReadyLoop
  DualFireLoop:
	TNT1 A 0 A_PlayWeaponSound("smg/fire")
	TNT1 A 0 A_AlertMonsters	
	TNT1 A 0 A_GunFlash
	TNT1 A 0 Radius_Quake(1,2,0,1,0)
	TNT1 A 0 A_SpawnItemEx("RifleCasing",30,-20,25,Random(2,4),Random(-3,-6),Random(3,6),0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
	TNT1 A 0 A_Light1
	ZG14 F 1 Bright A_FireBullets(4.2,2.5,-1,Random(5,7),"ModdedBulletPuff")
	ZG14 G 1 Bright
	TNT1 A 0 A_Light0
	TNT1 A 0 A_JumpIfNoAmmo("Empty2")
	TNT1 A 0 A_PlaySound("smg/fire",6)
	TNT1 A 0 A_AlertMonsters	
	TNT1 A 0 A_GunFlash
	TNT1 A 0 Radius_Quake(1,2,0,1,0)
	TNT1 A 0 A_SpawnItemEx("RifleCasing",30,20,25,Random(2,4),Random(3,6),Random(3,6),0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
	TNT1 A 0 A_Light1
	TNT1 A 0 A_TakeInventory("SMGDualCounter",1,TIF_NOTAKEINFINITE)
	ZG14 D 1 Bright A_FireBullets(4.2,2.5,-1,Random(5,7),"ModdedBulletPuff")
	ZG14 E 1 Bright
	TNT1 A 0 A_Light0
	TNT1 A 0 A_JumpIfNoAmmo("DualDryFire")
	TNT1 A 0 A_Refire("DualFireLoop")
	ZG14 H 2
	ZG14 I 2 A_Refire("DualFire")
	Goto DualReadyLoop
  DualDryFire:
    ZG14 H 2 A_PlaySound("smg/empty",CHAN_AUTO)
	ZG14 I 2
	Goto AltFire2
  Fire2:
	TNT1 A 0 A_PlayWeaponSound("smg/fire")
	TNT1 A 0 A_AlertMonsters	
	TNT1 A 0 A_GunFlash
	TNT1 A 0 Radius_Quake(1,2,0,1,0)
	TNT1 A 0 A_SpawnItemEx("RifleCasing",30,3,25,Random(2,4),Random(3,6),Random(3,6),0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
	TNT1 A 0 A_Light2
	ZG11 B 1 Bright A_FireBullets(4.2,2.5,-1,Random(5,7),"ModdedBulletPuff")
	TNT1 A 0 A_Light0
	ZG11 CD 1
	ZG11 EF 1 A_Refire("Fire")
	Goto ReadyLoop
  Empty:
	TNT1 A 0 A_PlaySound("smg/empty",CHAN_AUTO)
	ZG11 EEEFFFAAA 1 A_WeaponReady(WRF_NOFIRE)
	Goto AltFire
  AltFire:
    TNT1 A 0 A_JumpIfInventory("SMGSwitched",1,"AltFire2")
	TNT1 A 0 A_JumpIfInventory("SMGMagazine",32,2)
	TNT1 A 0 A_JumpIfInventory("BulletMag",1,"Reload")
	ZG11 A 1 A_WeaponReady(WRF_NOFIRE)
	Goto ReadyLoop
  Reload:
	ZG11 G 1 A_PlaySound("smg/woosh",CHAN_AUTO)
	ZG11 HIJKLMNOPQ 1
	ZG11 R 1 A_PlaySound("smg/magout",CHAN_AUTO)
	ZG11 STU 1
	ZG11 V 2 A_FireCustomMissile("AREmptyMagSpawner",0,0,0,1)
	ZG11 WXYZ 2
	ZG12 ABCD 1
  ReloadWeapon:
	TNT1 A 0 A_TakeInventory("BulletMag",1,TIF_NOTAKEINFINITE)
	TNT1 A 0 A_GiveInventory("SMGMagazine",1)
	TNT1 A 0 A_JumpIfInventory("SMGMagazine",32,2)
	TNT1 A 0 A_JumpIfInventory("BulletMag",1,"ReloadWeapon")
	ZG12 E 1 A_PlaySound("smg/magin",CHAN_AUTO)
	ZG12 FGHIJKLMNOP 1
	ZG11 IHG 1
	Goto ReadyLoop
  Empty2:
	TNT1 A 0 A_PlaySound("smg/empty",CHAN_AUTO)
	ZG14 AAAAAAAAA 1 A_WeaponReady(WRF_NOFIRE)
  AltFire2:
	TNT1 A 0 A_JumpIfInventory("SMGMagazine",64,2)
	TNT1 A 0 A_JumpIfInventory("BulletMag",1,"Reload2")
	ZG14 A 1 A_WeaponReady(WRF_NOFIRE)
	Goto DualReadyLoop
  Reload2:
	TNT1 A 0 A_PlayWeaponSound("smg/holster")
    ZG14 JKLMN 1
	TNT1 A 5
	ZG14 NOPQ 1
	ZG11 MNOPQ 1
	ZG11 R 1 A_PlaySound("smg/magout",CHAN_AUTO)
	ZG11 STU 1
	ZG11 V 2 A_FireCustomMissile("AREmptyMagSpawner",0,0,0,1)
	ZG11 WXYZ 2
	ZG12 ABCD 1
	ZG12 E 1 A_PlaySound("smg/magin",CHAN_AUTO)
	ZG12 FGHI 1
	ZG14 RSTUVWXY 1
	TNT1 A 10
	ZG14 NOPQ 1
	ZG11 MNOPQ 1
	ZG11 R 1 A_PlaySound("smg/magout",CHAN_AUTO)
	ZG11 STU 1
	ZG11 V 2 A_FireCustomMissile("AREmptyMagSpawner",0,0,0,1)
	ZG11 WXYZ 2
	ZG12 ABCD 1
  ReloadWeapon2:
	TNT1 A 0 A_TakeInventory("BulletMag",1,TIF_NOTAKEINFINITE)
	TNT1 A 0 A_GiveInventory("SMGMagazine",1)
	TNT1 A 0 A_JumpIfInventory("SMGMagazine",64,2)
	TNT1 A 0 A_JumpIfInventory("BulletMag",1,"ReloadWeapon2")
	TNT1 A 0 ACS_NamedExecuteAlways("DualReloadFinished",0)
	ZG12 E 1 A_PlaySound("smg/magin",CHAN_AUTO)
	ZG12 FGHI 1
	ZG14 RSTUVWXY 1
	TNT1 A 0 A_PlayWeaponSound("smg/draw")
	Goto DualReady
  GrenadeCheck:
	TNT1 A 0 A_JumpIfInventory("HandGrenadeAmmo",1,"GrenadeToss")
	TNT1 A 0 A_TakeInventory("HandGrenadeAction",1)
	Goto ReadyLoop
  GrenadeCheck2:
	TNT1 A 0 A_JumpIfInventory("HandGrenadeAmmo",1,"GrenadeToss2")
	TNT1 A 0 A_TakeInventory("HandGrenadeAction",1)
	Goto DualReadyLoop
  GrenadeToss2:
    TNT1 A 0 A_PlayWeaponSound("smg/holster")
    ZG14 JKLMN 1
    Goto GrenadeToss+10
  GrenadeToss:
	TNT1 A 0 A_PlayWeaponSound("smg/woosh") 
	ZG11 GHIJK 1
	ZG10 HIJK 1
	TNT1 A 4
	HGRN ABCDEFGHI 1
	TNT1 A 0 A_PlayWeaponSound("weapons/hgrenadepin")
	HGRN JKLM 2
	TNT1 A 11
	TNT1 A 0 A_PlayWeaponSound("weapons/hgrenadethrow")
	TNT1 A 0 A_TakeInventory("HandGrenadeAmmo",1,TIF_NOTAKEINFINITE)
	HGRN N 1 A_FireCustomMissile("ThrownGrenade",0,0,0,0)
	HGRN OPQRS 1
	HGRN TU 2
	TNT1 A 6 A_TakeInventory("HandGrenadeAction",1)
	Goto Ready
  MineCheck:
	TNT1 A 0 A_JumpIfInventory("MineAmmo",1,"MineToss")
	TNT1 A 0 A_TakeInventory("MineAction",1)
	Goto ReadyLoop
  MineCheck2:
	TNT1 A 0 A_JumpIfInventory("HandGrenadeAmmo",1,"MineToss2")
	TNT1 A 0 A_TakeInventory("HandGrenadeAction",1)
	Goto DualReadyLoop
  MineToss2:
    TNT1 A 0 A_PlayWeaponSound("smg/holster")
    ZG14 JKLMN 1
    Goto MineToss+10
  MineToss:
	TNT1 A 0 A_PlayWeaponSound("smg/woosh") 
	ZG11 GHIJK 1
	ZG10 HIJK 1
	TNT1 A 8
	TNT1 A 0 A_PlayWeaponSound("weapons/hgrenadethrow")
	MINE ABCDEF 1
	TNT1 A 0 A_TakeInventory("MineAmmo",1,TIF_NOTAKEINFINITE)
	MINE G 1 A_FireCustomMissile("ThrownMine",0,0,0,0,false)
	MINE HI 1
	MINE JKLM 1
	TNT1 A 5 A_TakeInventory("MineAction",1)
	Goto Ready
  Zoom:
    TNT1 A 0
	TNT1 A 0 A_TakeInventory("RailgunAction",1)
	TNT1 A 0 A_JumpIfInventory("SMGDualToken",1,1)
	Goto DualFail
  ChangeWeapon:
    TNT1 A 0 A_JumpIfInventory("SMGSwitched",1,"ChangeWeapon2")
	TNT1 A 0 A_GiveInventory("SMGSwitched",1)
  ChangeWeaponReally:
	TNT1 A 0 ACS_NamedExecuteAlways("DualCalculator",0,1)
    TNT1 A 0 A_PlayWeaponSound("smg/switch")
	ZG13 ABCDEFGH 1
	ZG13 IJKL 1
	Goto DualReadyLoop
  ChangeWeapon2:
    TNT1 A 0 A_TakeInventory("SMGSwitched",1)
	TNT1 A 0 ACS_NamedExecuteAlways("DualCalculator",0)
    TNT1 A 0 A_PlayWeaponSound("smg/woosh")
	ZG13 LKJI 1
	ZG13 HGFEDCBA 1
	Goto ReadyLoop
  DualFail:
    TNT1 A 0 A_Print("You need two SMGs for dual mode!")
    ZG11 A 1 A_WeaponReady(WRF_NOFIRE)
	Goto ReadyLoop
	}
}

ACTOR SMGMagazine : Ammo
{
Inventory.Amount 0
Inventory.MaxAmount 64
Ammo.BackpackAmount 0
Ammo.BackpackMaxAmount 64
Inventory.Icon "SMGPA0"
+IGNORESKILL
}

ACTOR MP40DualMag : Ammo
{
Inventory.Amount 0
Inventory.MaxAmount 64
Ammo.BackpackAmount 0
Ammo.BackpackMaxAmount 64
Inventory.Icon "MP4PA0"
+IGNORESKILL
}

ACTOR MP40Switched : SMGSwitched {}
ACTOR MP40DualCounter : SMGDualCounter {}
ACTOR MP40EmptyMagToken : Inventory {Inventory.MaxAmount 1}
ACTOR MP40StartToken : Inventory {Inventory.MaxAmount 1}

ACTOR MP40DualToken : Inventory {Inventory.MaxAmount 1 Inventory.InterhubAmount 1}

Actor MP40DualGiver : CustomInventory
{ //Scripted (Can break multiplayer weapon spawner)
Scale 0.45
-COUNTITEM
+INVENTORY.BIGPOWERUP
+INVENTORY.AUTOACTIVATE
+INVENTORY.IGNORESKILL
Inventory.PickupSound "MP40/PickDraw"
Inventory.PickupMessage "Dual MP-40s!"
States
{
   Spawn:
     TNT1 A 1
	 TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("CheckWeaponWorldSpawn") == 1,"SpawnDropped")
	 TNT1 A 1 ACS_NamedExecuteAlways("SpawnWeaponActive",0,1,1)
	 MP4P B -1
	 Wait
   SpawnDropped:
     TNT1 A 1 A_SpawnItem("MP40DualGiverDropped")
	 Stop
   Pickup:
	 TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("MPWeaponCheck") == 2,"PickupMP")
	 TNT1 A 0 A_GiveInventory("BulletMag",32)
	 TNT1 A 0 A_GiveInventory("MP40Dual",1)
	 TNT1 A 0 A_JumpIfInventory("MP40DualToken",1,"pickup2")
	 TNT1 A 0 A_GiveInventory("MP40DualMag",64)
	 TNT1 A 0 A_GiveInventory("MP40DualToken",1)
	 TNT1 A 1 A_GiveInventory("MP40Switched",1)
	 Stop
   PickupMP:
     TNT1 A 0 A_JumpIfInventory("MP40DualToken",1,"Nope")
	 TNT1 A 0 A_GiveInventory("BulletMag",32)
	 TNT1 A 0 A_GiveInventory("MP40DualMag",64)
	 TNT1 A 0 A_GiveInventory("MP40DualToken",1)
	 TNT1 A 1 A_GiveInventory("MP40Switched",1)
	 TNT1 A 1 ACS_NamedExecuteAlways("SpawnWeaponActive",0,1,1)
	 Fail
   Pickup2:
	 TNT1 A 1
	 Stop
   Nope:
     MP4P B 1
	 Fail
	 }
}

Actor MP40DualGiverMP : MP40DualGiver
{ 
States 
{ 
  Spawn:
  TNT1 A 0
  TNT1 A 1 ACS_NamedExecuteAlways("SpawnWeaponActive",0,1,1)
  MP4P B -1
  Loop 
  } 
}

Actor MP40DualGiverDropped : MP40DualGiver
{
+INVENTORY.TOSSED
+INVENTORY.NEVERRESPAWN
States
{
  Spawn:
   MP4P B -1
   Loop
  Pickup:
   TNT1 A 0 A_GiveInventory("BulletMag",32)
   TNT1 A 0 A_GiveInventory("MP40Dual",1)
   TNT1 A 0 A_JumpIfInventory("MP40DualToken",1,"pickup2")
   TNT1 A 0 A_GiveInventory("MP40DualToken",1)
   TNT1 A 0 A_GiveInventory("MP40DualMag",64)
   TNT1 A 1 A_GiveInventory("MP40Switched",1)
   Stop
   }
}

Actor MP40Dual : "Submachine gun" Replaces "MP-40" 30267 //use alternative fire
{ //Scripted (due to ammo change between one or two weapons)
Scale 0.45
Weapon.AmmoGive 0
Weapon.PreferredSkin "MP40-Marine"
Weapon.SelectionOrder 7990
Weapon.AmmoType "MP40DualMag"
Inventory.PickupSound "MP40/PickDraw"
Inventory.PickupMessage "MP40"
Obituary "%o was perforated by %k's MP40."
Tag "MP-40"
States
{
  Spawn:
	MP4P A -1
	Loop
  Select:
	TNT1 A 0 A_Raise
	Wait
  Deselect:
	TNT1 A 0 A_PlayWeaponSound("weapons/weapondown")
	TNT1 A 0 A_JumpIfInventory("MP40Switched",1,"DeselectDual")
  DeselectLoop:
	TNT1 A 0 A_Lower
	MS42 A 1 A_Lower
	Loop
  DeselectDual:
    MS43 ABCDE 1
	TNT1 A 0 A_Lower
	TNT1 A 1 A_Lower
	Goto DeselectDual+5
  Ready:
    TNT1 A 1 A_TakeInventory("RailgunAction",1)
	TNT1 A 0 A_TakeInventory("MP40EmptyMagToken",1)
	TNT1 A 0 A_JumpIfInventory("MP40StartToken",1,1)
	Goto Startup
	TNT1 A 0 A_JumpIfInventory("MP40Switched",1,"DualReady")
	TNT1 A 0 A_PlayWeaponSound("MP40/PickDraw")
	MS41 ABCDEFGH 1
  ReadyLoop:
	MS42 A 1 A_WeaponReady
	TNT1 A 0 A_JumpIfInventory("MP40Switched",1,"ChangeWeaponReally")
	TNT1 A 0 A_JumpIfInventory("RailgunAction",1,"Zoom")
	TNT1 A 0 A_JumpIfInventory("HandGrenadeAction",1,"GrenadeCheck")
	TNT1 A 0 A_JumpIfInventory("MineAction",1,"MineCheck")
	Loop
  Startup:
    TNT1 A 0 A_GiveInventory("MP40StartToken",1)
	TNT1 A 0 A_JumpIfInventory("BulletMag",1,1)
	Goto Ready+3
	TNT1 A 0 A_GiveInventory("MP40EmptyMagToken",1)
	TNT1 A 0 A_JumpIfInventory("MP40Switched",1,"DualReady")
    MS44 KLMS 1
	MS43 S 1
	Goto Reload+14
  DualReady:
    TNT1 A 0 A_PlayWeaponSound("mp40/drawdual")
    MS43 EDCBA 1
  DualReadyLoop:
    MS42 Q 1 A_WeaponReady
	TNT1 A 0 A_JumpIfInventory("RailgunAction",1,"Zoom")
	TNT1 A 0 A_JumpIfInventory("HandGrenadeAction",1,"GrenadeCheck2")
	TNT1 A 0 A_JumpIfInventory("MineAction",1,"MineCheck2")
	Loop
  Fire:
    TNT1 A 0 A_JumpIfInventory("MP40Switched",1,"DualFire")
	TNT1 A 0 A_JumpIfNoAmmo("Empty")
	TNT1 A 0 A_AlertMonsters
	TNT1 A 0 A_GunFlash
	TNT1 A 0 Radius_Quake(1,2,0,1,0)
	TNT1 A 0 A_Light1
	TNT1 A 0 A_SpawnItemEx("BulletCasing",30,0,30,Random(2,4),Random(3,6),Random(3,6),0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
	TNT1 A 0 A_PlayWeaponSound("MP40/Fire")
	MS42 B 2 Bright A_FireBullets(3.6,2.3,-1,Random(8,10),"ModdedBulletPuff")
	MS42 C 1 A_Light0
	MS42 D 1
	MS42 EF 1 A_ReFire
	Goto ReadyLoop
	/*
  DualFire: //Alternative fire
	TNT1 A 0 A_JumpIfNoAmmo("Empty2")
	TNT1 A 0 A_AlertMonsters
	TNT1 A 0 A_GunFlash
	TNT1 A 0 Radius_Quake(2,2,0,1,0)
	TNT1 A 0 A_Light1
	TNT1 A 0 A_SpawnItemEx("BulletCasing",30,-20,25,Random(2,4),Random(-3,-6),Random(3,6),0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
	TNT1 A 0 A_PlayWeaponSound("MP40/Fire")
	TNT1 A 0 A_FireBullets(3.6,2.3,-1,Random(8,10),"ModdedBulletPuff")
	MS44 F 1 Bright A_FireBullets(3.6,2.3,-1,Random(8,10),"ModdedBulletPuff")
	TNT1 A 0 A_SpawnItemEx("BulletCasing",30,20,25,Random(2,4),Random(3,6),Random(3,6),0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
	TNT1 A 0 A_TakeInventory("MP40DualCounter",1,TIF_NOTAKEINFINITE)
	MS44 G 1 Bright A_PlaySound("MP40/Fire",6)
	MS44 H 1 A_Light0
	MS44 I 1
	MS44 J 1 A_ReFire("DualFire")
	Goto DualReadyLoop
	*/
  DualFire:
	TNT1 A 0 A_JumpIfNoAmmo("Empty2")
	TNT1 A 0 A_AlertMonsters	
	TNT1 A 0 A_GunFlash
	TNT1 A 0 Radius_Quake(1,2,0,1,0)
	TNT1 A 0 A_SpawnItemEx("BulletCasing",30,-20,25,Random(2,4),Random(-3,-6),Random(3,6),0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
	TNT1 A 0 A_PlayWeaponSound("MP40/Fire")
	TNT1 A 0 A_Light1
	MS42 R 2 Bright A_FireBullets(3.6,2.3,-1,Random(8,10),"ModdedBulletPuff")
	MS42 S 1 Bright
	TNT1 A 0 A_Light0
	TNT1 A 0 A_JumpIfNoAmmo("DualDryFire")
	TNT1 A 0 A_PlaySound("MP40/Fire",6)
	TNT1 A 0 A_AlertMonsters	
	TNT1 A 0 A_GunFlash
	TNT1 A 0 Radius_Quake(1,2,0,1,0)
	TNT1 A 0 A_SpawnItemEx("BulletCasing",30,20,25,Random(2,4),Random(3,6),Random(3,6),0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
	TNT1 A 0 A_PlaySound("MP40/Fire",6)
	TNT1 A 0 A_Light1
	TNT1 A 0 A_TakeInventory("MP40DualCounter",1,TIF_NOTAKEINFINITE)
	MS42 T 1 Bright A_FireBullets(3.6,2.3,-1,Random(8,10),"ModdedBulletPuff")
	MS42 U 1 Bright
	TNT1 A 0 A_Light0
	MS42 V 1
	TNT1 A 0 A_JumpIfNoAmmo("DualDryFire")
	TNT1 A 0 A_Refire("DualFireLoop")
	MS42 "Y" 2
	MS42 "Z" 2 A_Refire("DualFire")
	Goto DualReadyLoop
  DualFireLoop:
	TNT1 A 0 A_PlayWeaponSound("smg/fire")
	TNT1 A 0 A_AlertMonsters	
	TNT1 A 0 A_GunFlash
	TNT1 A 0 Radius_Quake(1,2,0,1,0)
	TNT1 A 0 A_SpawnItemEx("BulletCasing",30,-20,25,Random(2,4),Random(-3,-6),Random(3,6),0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
	TNT1 A 0 A_PlayWeaponSound("MP40/Fire")
	TNT1 A 0 A_Light1
	MS42 W 1 Bright A_FireBullets(3.6,2.3,-1,Random(8,10),"ModdedBulletPuff")
	MS42 "X" 2 Bright
	TNT1 A 0 A_Light0
	TNT1 A 0 A_JumpIfNoAmmo("Empty2")
	TNT1 A 0 A_PlaySound("smg/fire",6)
	TNT1 A 0 A_AlertMonsters	
	TNT1 A 0 A_GunFlash
	TNT1 A 0 Radius_Quake(1,2,0,1,0)
	TNT1 A 0 A_SpawnItemEx("BulletCasing",30,20,25,Random(2,4),Random(3,6),Random(3,6),0,SXF_NOCHECKPOSITION|SXF_CLIENTSIDE,0)
	TNT1 A 0 A_PlaySound("MP40/Fire",6)
	TNT1 A 0 A_Light1
	TNT1 A 0 A_TakeInventory("MP40DualCounter",1,TIF_NOTAKEINFINITE)
	MS42 T 1 Bright A_FireBullets(3.6,2.3,-1,Random(8,10),"ModdedBulletPuff")
	MS42 U 1 Bright
	TNT1 A 0 A_Light0
	MS42 V 1
	TNT1 A 0 A_JumpIfNoAmmo("DualDryFire")
	TNT1 A 0 A_Refire("DualFireLoop")
	MS42 "Y" 2
	MS42 "Z" 2 A_Refire("DualFire")
	Goto DualReadyLoop
  DualDryFire:
    MS42 "Y" 2 A_PlaySound("smg/empty",CHAN_AUTO)
	MS42 "Z" 2
	Goto AltFire2
  Empty:
	TNT1 A 0 A_PlayWeaponSound("weapons/click")
	MS42 EEEFFFAAA 1 A_WeaponReady(WRF_NOFIRE)
	Goto AltFire
  AltFire:
    TNT1 A 0 A_JumpIfInventory("MP40Switched",1,"AltFire2")
	TNT1 A 0 A_JumpIfInventory("MP40DualMag",32,2)
	TNT1 A 0 A_JumpIfInventory("BulletMag",1,"Reload")
	MS42 A 1 A_WeaponReady(WRF_NOFIRE)
	Goto ReadyLoop
  Reload:
    TNT1 A 0 A_JumpIfInventory("MP40DualMag",1,2)
    TNT1 A 0 A_GiveInventory("MP40EmptyMagToken",1)
	MS43 FGHKLMN 1
	MS43 O 2 A_PlayWeaponSound("MP40/MagOut")
	MS43 PQR 2
	MS43 S 10 A_FireCustomMissile("MP40EmptyMagSpawner",0,0,0,1)
	MS43 RQP 2
	MS43 O 1
  ReloadWeapon:
	TNT1 A 0 A_TakeInventory("BulletMag",1,TIF_NOTAKEINFINITE)
	TNT1 A 0 A_GiveInventory("MP40DualMag",1)
	TNT1 A 0 A_JumpIfInventory("MP40DualMag",32,2)
	TNT1 A 0 A_JumpIfInventory("BulletMag",1,"ReloadWeapon")
	MS43 N 1 A_PlayWeaponSound("MP40/MagIn")
	MS43 M 6
	TNT1 A 0 A_JumpIfInventory("MP40EmptyMagToken",1,"LoadFull")
	MS43 LKHGF 1
	Goto ReadyLoop
  LoadFull:
    TNT1 A 0 A_TakeInventory("MP40EmptyMagToken",1)
	MS43 TUV 2
	MS43 WXY 1
	MS43 "Z" 1 A_PlayWeaponSound("MP40/Cock")
	MS44 ABCDDCBA 2
	MS43 ZYXWVUT 1
	MS44 E 1
	MS43 KHGF 1
	Goto ReadyLoop
  Empty2:
	TNT1 A 0 A_PlaySound("smg/empty",CHAN_AUTO)
	MS42 QQQQQ 2 A_WeaponReady(WRF_NOFIRE) //I'm feeling lucky!
  AltFire2:
	TNT1 A 0 A_JumpIfInventory("MP40DualMag",64,2)
	TNT1 A 0 A_JumpIfInventory("BulletMag",1,"Reload2")
	MS42 Q 1 A_WeaponReady(WRF_NOFIRE)
	Goto DualReadyLoop
  Reload2:
    TNT1 A 0 A_JumpIfInventory("MP40DualMag",1,2)
    TNT1 A 0 A_GiveInventory("MP40EmptyMagToken",1)
	TNT1 A 0 A_PlayWeaponSound("weapons/weapondown")
	MS43 ABCDE 1
	MS43 IJKLMN 1
	MS43 O 2 A_PlayWeaponSound("MP40/MagOut")
	MS43 PQR 2
	MS43 S 10 A_FireCustomMissile("MP40EmptyMagSpawner",0,0,0,1)
	MS43 RQP 2
	MS43 O 1
	MS43 N 1 A_PlayWeaponSound("MP40/MagIn")
	MS43 M 6
	TNT1 A 0 A_JumpIfInventory("MP40EmptyMagToken",1,1)
	Goto Reload3
	MS43 TUV 2
	MS43 WXY 1
	MS43 "Z" 1 A_PlayWeaponSound("MP40/Cock")
	MS44 ABCDDCBA 2
	MS43 ZYXWVUT 1
	MS44 E 1
	MS43 K 1
	Goto Reload3+2
  Reload3:
    MS43 LKJI 1
	TNT1 A 10
	MS43 IJKLMN 1
	MS43 O 2 A_PlayWeaponSound("MP40/MagOut")
	MS43 PQR 2
	MS43 S 10 A_FireCustomMissile("MP40EmptyMagSpawner",0,0,0,1)
	MS43 RQP 2
	MS43 O 1
  ReloadWeapon2:
	TNT1 A 0 A_TakeInventory("BulletMag",1,TIF_NOTAKEINFINITE)
	TNT1 A 0 A_GiveInventory("MP40DualMag",1)
	TNT1 A 0 A_JumpIfInventory("MP40DualMag",64,2)
	TNT1 A 0 A_JumpIfInventory("BulletMag",1,"ReloadWeapon2")
	TNT1 A 0 ACS_NamedExecuteAlways("DualReloadFinished",0)
	MS43 N 1 A_PlayWeaponSound("MP40/MagIn")
	MS43 M 6
	TNT1 A 0 A_JumpIfInventory("MP40EmptyMagToken",1,1)
	Goto ReloadDualFinish
	TNT1 A 0 A_TakeInventory("MP40EmptyMagToken",1)
	MS43 TUV 2
	MS43 WXY 1
	MS43 "Z" 1 A_PlayWeaponSound("MP40/Cock")
	MS44 ABCDDCBA 2
	MS43 ZYXWVUT 1
	MS44 E 1
	MS43 K 1
	Goto ReloadDualFinish+2
  ReloadDualFinish:
	MS43 LKJI 1
	TNT1 A 0 A_PlayWeaponSound("mp40/drawdual")
	Goto DualReady
  GrenadeCheck:
	TNT1 A 0 A_JumpIfInventory("HandGrenadeAmmo",1,"GrenadeToss")
	TNT1 A 0 A_TakeInventory("HandGrenadeAction",1)
	Goto ReadyLoop
  GrenadeCheck2:
	TNT1 A 0 A_JumpIfInventory("HandGrenadeAmmo",1,"GrenadeToss2")
	TNT1 A 0 A_TakeInventory("HandGrenadeAction",1)
	Goto DualReadyLoop
  GrenadeToss2:
    TNT1 A 0 A_PlayWeaponSound("weapons/weapondown")
    MS43 ABCDE 1
    Goto GrenadeToss+9
  GrenadeToss:
	TNT1 A 0 A_PlayWeaponSound("weapons/weapondown")
	MS41 HGFEDCBA 1
	TNT1 A 4
	HGRN ABCDEFGHI 1
	TNT1 A 0 A_PlayWeaponSound("weapons/hgrenadepin")
	HGRN JKLM 2
	TNT1 A 11
	TNT1 A 0 A_PlayWeaponSound("weapons/hgrenadethrow")
	TNT1 A 0 A_TakeInventory("HandGrenadeAmmo",1,TIF_NOTAKEINFINITE)
	HGRN N 1 A_FireCustomMissile("ThrownGrenade",0,0,0,0)
	HGRN OPQRS 1
	HGRN TU 2
	TNT1 A 6 A_TakeInventory("HandGrenadeAction",1)
	TNT1 A 0 A_JumpIfInventory("MP40Switched",1,"Ready")
	MS41 ABCDEFGH 1
	Goto ReadyLoop
  MineCheck:
	TNT1 A 0 A_JumpIfInventory("MineAmmo",1,"MineToss")
	TNT1 A 0 A_TakeInventory("MineAction",1)
	Goto ReadyLoop
  MineCheck2:
	TNT1 A 0 A_JumpIfInventory("HandGrenadeAmmo",1,"MineToss2")
	TNT1 A 0 A_TakeInventory("HandGrenadeAction",1)
	Goto DualReadyLoop
  MineToss2:
    TNT1 A 0 A_PlayWeaponSound("weapons/weapondown")
    MS43 ABCDE 1
    Goto MineToss+9
  MineToss:
	TNT1 A 0 A_PlayWeaponSound("weapons/weapondown") 
	MS41 HGFEDCBA 1
	TNT1 A 8
	TNT1 A 0 A_PlayWeaponSound("weapons/hgrenadethrow")
	MINE ABCDEF 1
	TNT1 A 0 A_TakeInventory("MineAmmo",1,TIF_NOTAKEINFINITE)
	MINE G 1 A_FireCustomMissile("ThrownMine",0,0,0,0,false)
	MINE HI 1
	MINE JKLM 1
	TNT1 A 5 A_TakeInventory("MineAction",1)
	TNT1 A 0 A_JumpIfInventory("MP40Switched",1,"Ready")
	MS41 ABCDEFGH 1
	Goto ReadyLoop
  Zoom:
    TNT1 A 0
	TNT1 A 0 A_TakeInventory("RailgunAction",1)
	TNT1 A 0 A_JumpIfInventory("MP40DualToken",1,1)
	Goto DualFail
  ChangeWeapon:
    TNT1 A 0 A_JumpIfInventory("MP40Switched",1,"ChangeWeapon2")
	TNT1 A 0 A_GiveInventory("MP40Switched",1)
  ChangeWeaponReally:
	TNT1 A 0 ACS_NamedExecuteAlways("DualCalculator",0,1)
    TNT1 A 0 A_PlayWeaponSound("smg/switch")
	MS42 GHIJKLMNOP 1
	Goto DualReadyLoop
  ChangeWeapon2:
    TNT1 A 0 A_TakeInventory("MP40Switched",1)
	TNT1 A 0 ACS_NamedExecuteAlways("DualCalculator",0)
    TNT1 A 0 A_PlayWeaponSound("smg/woosh")
	MS42 PONMLKJIHG 1
	Goto ReadyLoop
  DualFail:
    TNT1 A 0 A_Print("You need two MP-40s for dual mode!")
    MS42 A 1 A_WeaponReady(WRF_NOFIRE)
	Goto ReadyLoop
	}
}