actor Sidekick : Weapon replaces Pistol
{
  Game Doom
  Weapon.AmmoUse 1
  Weapon.AmmoGive 0
  Weapon.AmmoGive2 0
  Weapon.AmmoType "SidekickClip"
  Weapon.AmmoType2 "BulletAmmo"
  Weapon.SlotNumber 2
  Weapon.SelectionOrder 7
  Weapon.UpSound "Sidekick/Up"
  Weapon.Kickback 50
  Inventory.PickupSound "misc/w_pkup"
  Inventory.PickupMessage "Got yourself a Type 45. ''Sidekick'' combat pistol! Never get into fights without your trusty friend! (2)"
  Obituary "%k was assisted by ''Sidekick'' in the process of killing %o."
  Weapon.BobStyle InverseSmooth
  Weapon.BobSpeed 2.1
  Weapon.BobRangeY 0.3
  Weapon.BobRangeX 0.6
  +NOALERT
  +NOAUTOFIRE
  +AMMO_CHECKBOTH
  //+NOAUTOAIM
  States
  {
  Ready:
    TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,2)
	SDKU A 1 A_JumpIf(Health<75,1)
	SDKU B 1
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,2)
	SDKU C 1 A_JumpIf(Health<50,1)
	SDKU D 1
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,2)
	SDKU E 1 A_JumpIf(Health<25,1)
	SDKU F 1
  ReadyMain:
	SDKG A 0 A_JumpIfInventory("SidekickZoomed",1,"ZoomedReady")
	SDKG A 0 A_SetCrosshair(0)
   	SDKG A 0 A_JumpIfInventory("MacheteGoesFast",1,"CaberToss")
    SDKG A 1 A_WeaponReady(WRF_ALLOWRELOAD|WRF_ALLOWZOOM)
    Loop
  AltFire:
    SDKZ A 0 A_PlaySound("Sights/Weapon",5,0.8)
    SDKZ A 0 A_JumpIfInventory("SidekickZoomed",1,"UnZoom")
	SDKZ A 0 A_ZoomFactor(2.5)
	SDKZ A 0 A_SetCrosshair(77)
    SDKZ ABCDEF 1
    SDZG A 1 A_GiveInventory("SidekickZoomed",1)
	Goto ZoomedReady
  UnZoom:
	SDKZ A 0 A_ZoomFactor(1)
    SDKZ FEDCBA 1
    SDKG A 1 A_TakeInventory("SidekickZoomed",1)
	Goto ReadyMain
  ZoomedReady:
    SDZG A 1 A_WeaponReady(WRF_ALLOWRELOAD)
	Goto ReadyMain
  DryFire:
	SDKG A 0 A_PlaySound("Sidekick/Dry",4,0.6)
	SDKG A 1
	SDKT ABBA 1
	SDKG A 1
	Goto ReadyMain
  ZoomedDryFire:
	SDZG A 0 A_PlaySound("Sidekick/Dry",4,0.8) //Louder in ironsights. DETAILS!
	SDZT ABCBA 1
	SDZG A 1
	Goto ReadyMain
  Deselect:
    SDKU A 0 A_JumpIfInventory("SidekickZoomed",1,"ZoomedDeselect")
	SDKU A 0 A_ZoomFactor(1)
	SDKU A 0 A_SetCrosshair(0)
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,2)
	SDKU F 1 A_JumpIf(Health<75,1)
	SDKU E 1
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,2)
	SDKU D 1 A_JumpIf(Health<50,1)
	SDKU C 1
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,2)
	SDKU B 1 A_JumpIf(Health<25,1)
	SDKU A 1
    TNT1 A 0 SetPlayerProperty(0, 0, PROP_INSTANTWEAPONSWITCH)
    TNT1 AAAAAAAAAAAAAAA 0 A_Lower
    TNT1 A 1 A_Lower
    Wait
  ZoomedDeselect:
    SDKZ A 0 A_PlaySound("Sights/Weapon",5,0.8)
	SDKZ A 0 A_ZoomFactor(1)
	SDKZ A 0 A_SetCrosshair(0)
    SDKZ FEDCBA 1
    SDKG A 2 A_TakeInventory("SidekickZoomed",1)
    Goto Deselect
  Select:
    TNT1 A 0 SetPlayerProperty(0, 1, PROP_INSTANTWEAPONSWITCH)
    TNT1 A 0 A_Raise
    TNT1 A 1 A_Raise
    Loop
  Fire:
    SDKF A 0 A_JumpIfInventory("SidekickZoomed",1,"ZoomedFire")
    SDKF A 0 A_JumpIfInventory("SidekickClip",1,1)
	Goto DryFire
	SDKF A 0 A_PlaySound("Sidekick/Fire",1,0.8)
	SDKF A 0 A_PlaySound("Sidekick/Add",5,0.8)
	SDKF A 0 A_FireCustomMissile("GunsmokeSpawner_Small",0,0,8,1)
    SDKF A 0 A_FireBullets(1.0, 0.25, 1, 7, "BulletPuff")
	SDKF A 0 A_AlertMonsters
	SDKF A 0 A_GunFlash
    SDKF A 1 Bright A_SetPitch(pitch-0.2)
	SDKF B 1 Bright A_SetPitch(pitch-0.1)
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,2)
	SDKF C 1 A_JumpIf(Health<66,1)
	SDKF D 1 A_FireCustomMissile("BuellerCasingSpawner2",0,0,2,4) //I wanted to use spawnitemex, but then I realised it doesn't take player's pitch into account at all. I guess that flag is for projectiles, not player entities, sigh. Gonna leave it here just in case somebody will figure that one out. //A_SpawnItemEx("BuellerCasing",-12,21,30,0.1*frandom(-20,-30),0,0.1*frandom(5,15),random(90,100),SXF_TRANSFERPITCH,0)
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,2)
	SDKF E 1 A_JumpIf(Health<33,1)
	SDKG A 1
	SDKG A 0 A_ReFire
	Goto ReadyMain
  ZoomedFire:
    SDZF A 0 A_JumpIfInventory("SidekickClip",1,1)
	Goto ZoomedDryFire
	SDZF A 0 A_PlaySound("Sidekick/Fire",1,0.9)
	SDKF A 0 A_PlaySound("Sidekick/Add",5,0.9) //Louder in ironsights. DETAILS!
	SDZF A 0 A_FireCustomMissile("GunsmokeSpawner_Small",0,0,0,6)
	SDZF A 0 A_FireBullets(0.25, 0.0625, 1, 7, "BulletPuff") //Precision!
	SDZF A 0 A_AlertMonsters
	SDZF A 0 A_GunFlash
    SDZF A 1 Bright A_SetPitch(pitch-0.1)
	SDZF A 0 A_ZoomFactor(2.48)
	SDZF B 1 Bright A_SetPitch(pitch-0.1)
	SDZF A 0 A_ZoomFactor(2.49)
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,2)
	SDZF C 1 A_JumpIf(Health<66,1)
	SDZF C 0 A_ZoomFactor(2.5)
	SDZF C 0 A_SetPitch(pitch+0.2)
	SDZF D 1 A_FireCustomMissile("BuellerCasingSpawner3",0,0,-2,8)
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,2)
	SDZF E 1 A_JumpIf(Health<33,1)
	SDZG A 1
	SDZG A 0 A_ReFire
	SDZG A 2
	Goto ReadyMain
  ZoomedReload:
    SDKZ A 0 A_PlaySound("Sights/Weapon",5,0.8)
	SDKZ A 0 A_ZoomFactor(1)
    SDKZ FEDCBA 1
    SDKG A 2 A_TakeInventory("SidekickZoomed",1)
    SDKG A 0 A_GiveInventory("SidekickZoomReload",1)
  Reload:
    SDKG A 0 A_JumpIfInventory("SidekickZoomed",1,"ZoomedReload")
	SDKG A 0 A_JumpIfInventory("SidekickClip",0,"ReadyMain")
	SDKG A 0 A_JumpIfInventory("BulletAmmo",1,1)
	Goto ReadyMain
	SDKG A 0 A_JumpIfInventory("SidekickClip",1,"ReloadMain")
  GetToDaChoppa:
	SDKG A 0 A_GiveInventory("SidekickEmptiedToken",1)
  ReloadMain:
	SDKG A 0 A_PlaySound("Sidekick/Out",4)
	//SDKO ABCDEF 1
	//SDKO G 5 A_SpawnItemEx("SidekickClipDrop",0,0,20)
	/*SDKC ABCDEFGHIJKLMNOPQ 1
	SDKN ABCDEFGHIJ 1*/
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,3)
	SDKN A 1 A_JumpIf(Health<75,2)
	SDKN BC 1
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,3)
	SDKN D 1 A_JumpIf(Health<50,2)
	SDKN E 1
	SDKN F 1 A_SpawnItemEx("SidekickClipDrop",0,0,20)
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,3)
	SDKN G 1 A_JumpIf(Health<25,2)
	SDKN HI 1
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,3)
	SDKN J 1 A_JumpIf(Health<75,2)
	SDKN K 1
	SDKL A 0 A_PlaySound("Sidekick/In",4)
	SDKL A 1
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,3)
	SDKL B 1 A_JumpIf(Health<50,2)
	SDKL CD 1
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,3)
	SDKL E 1 A_JumpIf(Health<25,2)
	SDKL F 1
  ReloadWorking:
	TNT1 A 0 A_TakeInventory("BulletAmmo",1,TIF_NOTAKEINFINITE)
	TNT1 A 0 A_GiveInventory("SidekickClip", 1)
	TNT1 A 0 A_JumpIfInventory("SidekickClip",0,2)
	TNT1 A 0 A_JumpIfInventory("BulletAmmo",1,2)
	TNT1 A 0
	Goto ReloadFinish
	TNT1 A 0
	Goto ReloadWorking
  ReloadFinish:
	SDKL FGHIJ 1
	SDKG A 0 A_JumpIfInventory("SidekickEmptiedToken",1,"Kaczink")
	SDKG A 2
    SDKG A 0 A_JumpIfInventory("SidekickZoomReload",1,"Derp")
	Goto ReadyMain
  Kaczink:
    FMGG A 0 A_TakeInventory("SidekickEmptiedToken",1)
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,3)
	SDKS A 1 A_JumpIf(Health<75,2)
	SDKS BC 1
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,3)
	SDKS D 1 A_JumpIf(Health<50,2)
	SDKS EF 1
	SDKS F 0 A_PlaySound("Sidekick/Cock",4)
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,3)
	SDKS G 1 A_JumpIf(Health<25,2)
	SDKS HI 1
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,3)
	SDKS J 1 A_JumpIf(Health<75,2)
	SDKS KL 1
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,3)
	SDKS M 1 A_JumpIf(Health<50,2)
	SDKS NO 1
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,2)
	SDKG A 1 A_JumpIf(Health<25,1)
	SDKG A 1
    FMGF A 0 A_JumpifInventory("SidekickZoomReload",1,"Derp")
	Goto ReadyMain
  Derp:
    SDKG A 0 A_TakeInventory("SidekickZoomReload",1)
	Goto AltFire
  Zoom:
	QML1 A 0 A_Gunflash("PunchFlash", GFF_NOEXTCHANGE)
	QML1 A 0 A_JumpIfInventory("PowerStrength2",1,2)
    QML1 A 0 A_Jump(256,3)
  	FML1 A 0 A_SetBlend("Orange",0.05,10)
	FML1 A 0 A_PlaySound("Melee/Firepunch",0)
	"####" A 0 A_JumpIfInventory("PowerBlazing",1,3)
	"####" A 0 A_JumpIf(Health<75,2)
	"####" A 1 A_SetPitch(pitch-0.3)
	"####" B 1 A_SetPitch(pitch-0.3)
	"####" A 0 A_JumpIfInventory("PowerBlazing",1,3)
	"####" A 0 A_JumpIf(Health<50,2)
	"####" C 1 A_SetPitch(pitch-0.3)
	"####" D 1 A_SetPitch(pitch-0.3)
	"####" A 0 A_JumpIfInventory("PowerStrength2",1,3)
	"####" A 0 A_CustomPunch(30, 1, 0, "PunchCracker", 100)
	"####" A 0 A_Jump(256,2)
	"####" A 0 A_CustomPunch(90, 1, 0, "FlamePunchCracker", 150)
	"####" A 0 A_JumpIfInventory("PowerBlazing",1,3)
	"####" A 0 A_JumpIf(Health<25,2)
	"####" E 1 A_SetPitch(pitch+0.3)
	"####" F 1 A_SetPitch(pitch+0.3)
	"####" A 0 A_JumpIfInventory("PowerBlazing",1,3)
	"####" A 0 A_JumpIf(Health<75,2)
	"####" G 1 A_SetPitch(pitch+0.3)
	"####" H 1 A_SetPitch(pitch+0.3)
	"####" A 0 A_JumpIfInventory("PowerBlazing",1,3)
	"####" A 0 A_JumpIf(Health<50,2)
	"####" I 1
	"####" J 1
	"####" A 0 A_JumpIfInventory("PowerBlazing",1,3)
	"####" A 0 A_JumpIf(Health<25,2)
	"####" K 1
	TNT1 A 5
	Goto ReadyMain
  Flash:
    TNT1 A 2 A_Light1
    TNT1 A 4 A_Light2
    TNT1 A 0 A_Light0
    Stop
  PunchFlash:
	SDKG A 1 A_PlaySound("Punch/Swing",6,1.0)
	SDKP ABC 1
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,3)
	TNT1 A 0 A_JumpIf(Health<75,2)
	SDKP DE 1
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,3)
	TNT1 A 0 A_JumpIf(Health<50,2)
	SDKP FE 1
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,3)
	TNT1 A 0 A_JumpIf(Health<25,2)
	SDKP DC 1
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,3)
	TNT1 A 0 A_JumpIf(Health<75,2)
	SDKP BA 1
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,3)
	TNT1 A 0 A_JumpIf(Health<50,2)
	SDKG AA 1
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,3)
	TNT1 A 0 A_JumpIf(Health<25,2)
	SDKG AA 1
	Stop
  CaberToss:
    SDKG A 1 A_JumpIfInventory("MacheteAmmo",1,1)
	Goto ReadyMain
	MCHT A 0 A_TakeInventory("MacheteAmmo",1)
	SDKU ECA 1
	
    TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,2)
	TNT1 A 1 A_JumpIf(Health<75,1)
	TNT1 A 1
    TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,2)
	TNT1 A 1 A_JumpIf(Health<50,1)
	TNT1 A 1
    TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,2)
	TNT1 A 1 A_JumpIf(Health<25,1)
	TNT1 A 1
    MC4S A 0 A_PlaySound("Machete1/Slash",1,0.9)
    MC4S A 0 A_PlaySound("Machete2/Slash",5,0.2)
	MCHT ABC 1
	TNT1 A 0 A_JumpIfInventory("PowerStrength2",1,3)
	MCHT A 0 A_SpawnItemEX("MacheterangProjectile",cos(-pitch)*48,0,32+(sin(-pitch)*48),cos(-pitch)*35,0,sin(-pitch)*35,0,SXF_NOCHECKPOSITION|SXF_TRANSFERPITCH)
	TNT1 A 0 A_Jump(256,2)
	MCHT A 0 A_SpawnItemEX("MacheterangBerserkProjectile",cos(-pitch)*48,0,32+(sin(-pitch)*48),cos(-pitch)*25,0,sin(-pitch)*25,0,SXF_NOCHECKPOSITION|SXF_TRANSFERPITCH)
	// This solution is ten times better. Just let it bouncecount out.
    TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,2)
	MCHT D 1 A_JumpIf(Health<75,1)
	MCHT E 1
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,2)
	MCHT F 1 A_JumpIf(Health<50,1)
	MCHT G 1
	TNT1 A 0 A_JumpIfInventory("PowerBlazing",1,2)
	MCHT H 1 A_JumpIf(Health<25,1)
	MCHT I 1
	TNT1 A 3

	SDKU BDF 1
	Goto ReadyMain
  Spawn:
    SDKG X -1
    Stop
  }
}

ACTOR SidekickClip : Ammo
{
   Inventory.MaxAmount 16
   Inventory.Icon SDKGX0
   +IGNORESKILL
}

ACTOR SidekickEmptiedToken : Inventory { Inventory.MaxAmount 1 }
ACTOR SidekickZoomed : Inventory { Inventory.MaxAmount 1 }
ACTOR SidekickZoomReload : Inventory { Inventory.MaxAmount 1 }
ACTOR ZoomReFire : Inventory { Inventory.MaxAmount 1 }