ACTOR Guncaster : PlayerPawn
{
	Game Heretic
	Health 100
   	player.maxhealth 100
	Radius 16
	Height 56
	Mass 100
	PainChance 255
    player.soundclass "Guncaster"
    player.forwardmove 1.33
	player.sidemove 1.33
	Player.JumpZ 14.0
	Player.GruntSpeed 24.0
	Player.ViewHeight 51
	Player.AttackZOffset 20
	Player.DisplayName "Cygnis"
	Player.Face "DRG"
	Player.ColorRange 209,224
	Player.FlechetteType "CasterPoisonBag"
	Player.SpawnClass Any

	Player.StartItem VisionToggler
	Player.StartItem MenuWheelToggler
	Player.StartItem GuncasterTauntItem
	Player.StartItem SheepGuidance
	Player.StartItem DynamiteQuickToss
	
	Player.StartItem DynamiteWeapon
	Player.StartItem FirebreathTome
	Player.StartItem Longhorn
	Player.StartItem LonghornAmmo 20
	Player.StartItem Dergfist
	Player.StartItem Mana 100
	//Player.StartItem Dosh 400
	Player.StartItem HammerSpaceCounter 10
	Player.StartItem FirebreathActive
	Player.StartItem TurretLimitCounter 3
	Player.StartItem AltModeItem
	Player.StartItem FirePayload

	Player.WeaponSlot 1, "DynamiteWeapon", "Dergfist"
	Player.WeaponSlot 2, "Longhorn", "Longhorn2"
	Player.WeaponSlot 3, "Strucker", "Ironblast", "Strucker2", "Ironblast2"
	Player.WeaponSlot 4, "Pulverizer", "Pulverizer2"
	Player.WeaponSlot 5, "Sovereign","Sovereign2", "Matriarch", "Matriarch2"
	Player.WeaponSlot 6, "Cauterizer", "Cauterizer2"
	Player.WeaponSlot 7, "Old Dreadful", "Old Dreadful2"
	Player.WeaponSlot 9, "ATotallyUselessSomething"
	
	var int user_spellbuttons[4]; //The quick-selection thingamajib
	var int user_amuletopen;
	var int User_TurretIDs[3];
	var int User_Ouch; //To determine for the Carlton Dance if you didn't get hit.
	var int User_Carlton; //It's not unusual to be loved by anyone~
	
	+THRUSPECIES
	+DONTBLAST
	
	Species "Rrerr"
	
	//General damage types
	DamageFactor "Fire", 0.5 //That's a dragon - he should shrug it off. I actually should make him completely immune from all the fire attacks, but let's not go completely crazy due to balance reasons.
	DamageFactor "Ice", 1.25 //BAAAAD!
	DamageFactor "Falling", 0.0 //Apparently some levels, even if you have falling damage off, are complete dicks, and still make you suffer from that shit. This guy laughs at your smelly falling damage!

	//Spell damage types
	DamageFactor "Matriarch", 0.1 //Did someone say... cannon jumps? Well, not like he needs them... or that they work with such air control... but it's still awesome, hee.
	DamageFactor "Slime", 0.75 //Heavy boots, that is.
	DamageFactor "AcidReflux", 0.0 //Don't let the rain get you down...
	
	//Doom damage types
	DamageFactor "FuckRevenants", 0.5 //What says on the tin!
	DamageFactor "Bueller", 0.85 //Dem hitscanners should DIE.
	
	Player.Colorset 0, "Cygnis", 145, 160, 154
	Player.Colorset 1, "Neymathir", 113, 128, 128
	Player.Colorset 2, "Vermathin", 36, 47, 41
	Player.Colorset 3, "Surtra", 145, 152, 150
	Player.Colorset 4, "Azaron", 209, 218, 215, 225, 240, 185, 200//, 225, 240, 185, 196, 0, 35, 66, 80
	Player.Colorset 5, "Leurith", 0, 15, 0, 225, 240, 66, 79
	Player.Colorset 6, "Blain", 185, 200, 195
	Player.Colorset 7, "Xaeratustra", 169, 176, 173
	Player.Colorset 8, "Sealia", 194, 204, 202
	
	States
	{
	Spawn:
		CBGG A 0 A_JumpIfInventory("PowerSuitToken",1,3)
		UBGG A 0 A_JumpIfInventory("PowerSuitProtect",1,2)
		CYGG A 0
		"####" "#" 1
		"####" "#" 0 A_Jump(256,"Spawn")
		Goto Spawn
	CarltonDragon:
		"####" A 0 A_JumpIfInventory("HexenCounter",1,"Hexen")
		"####" A 0 A_JumpIfInventory("DoomCounter",1,"Doom")
	Heretic:
		CBDG A 0 A_JumpIfInventory("PowerSuitToken",1,3)
		UBDG A 0 A_JumpIfInventory("PowerSuitProtect",1,2)
		CYDG A 0
		"####" "#" 0
		Goto Main
	Doom:
		CBD2 A 0 A_JumpIfInventory("PowerSuitToken",1,3)
		UBD2 A 0 A_JumpIfInventory("PowerSuitProtect",1,2)
		CYD2 A 0
		"####" "#" 0
		Goto Main
	Hexen:
		CBD3 A 0 A_JumpIfInventory("PowerSuitToken",1,3)
		UBD3 A 0 A_JumpIfInventory("PowerSuitProtect",1,2)
		CYD3 A 0
		"####" "#" 0
	Main:
		"####" CDEF 3
		"####" GH 6
		"####" FEDC 3
		"####" AB 6
		Loop
	See:
		"####" A 0 A_JumpIfInventory("PowerSuitToken",1,"SeeSuit")
		"####" A 0 A_JumpIfInventory("PowerBerserkDamage",1,"SeeBerserk") 
		
		"####" A 0 A_JumpIfInventory("ThreadingNotSoLightly",1,7) 
		"####" A 0 A_GiveInventory("ThreadingNotSoLightly",1)
		"####" A 0 A_PlaySound("Guncaster/Move",0,0.3)
		"####" AB 5
 		"####" A 0 A_SpawnItemEx("GuncasterStep", 0, 0, 0, 0, 0, -10, 0,0, 0)
		"####" A 0 A_Jump(256,"Spawn") //So retarded inherited playerclasses for doom and hexen will work correctly.
		Goto Spawn
		"####" A 0 A_TakeInventory("ThreadingNotSoLightly",1)
		"####" A 0 A_PlaySound("Guncaster/Move",0,0.3)
		"####" CD 5
 		"####" C 0 A_SpawnItemEx("GuncasterStep", 0, 0, 0, 0, 0, -10, 0,0, 0)
		"####" A 0 A_Jump(256,"Spawn")
		Goto Spawn
		
	SeeBerserk: 
		"####" A 0 A_JumpIfInventory("ThreadingNotSoLightly",1,7) 
		"####" A 0 A_GiveInventory("ThreadingNotSoLightly",1)
		"####" A 0 A_PlaySound("Guncaster/Move",0,0.3)
		"####" AB 5
 		"####" A 0 A_SpawnItemEx("BerserkStep", 0, 0, 0, 0, 0, -10, 0,0, 0)
		"####" A 0 A_Jump(256,"Spawn")
		Goto Spawn
		"####" A 0 A_TakeInventory("ThreadingNotSoLightly",1)
		"####" A 0 A_PlaySound("Guncaster/Move",0,0.3)
		"####" CD 5
 		"####" C 0 A_SpawnItemEx("BerserkStep", 0, 0, 0, 0, 0, -10, 0,0, 0)
		"####" A 0 A_Jump(256,"Spawn")
		Goto Spawn
		
	SeeSuit:
		"####" A 0 A_JumpIfInventory("PowerBerserkDamage",1,"SeeSuitBerserk")
		"####" A 0 A_JumpIfInventory("ThreadingNotSoLightly",1,10) 
		"####" A 0 A_GiveInventory("ThreadingNotSoLightly",1)
		"####" A 0 A_CheckFloor("RightWhiz")
		"####" A 0 A_Jump(256,"RightNoes")
	RightWhiz:
		"####" A 0 A_PlaySound("Bishop/Move",0,0.6)
		"####" A 0 A_Jump(256,"RightNoes")
	RightNoes:
		"####" AB 7
 		"####" A 0 A_SpawnItemEx("BishopStepRight", 0, 0, 0, 0, 0, -10, 0,0, 0)
		"####" A 0 A_Jump(256,"Spawn")
		Goto Spawn
		"####" A 0 A_TakeInventory("ThreadingNotSoLightly",1)
		"####" A 0 A_CheckFloor("LeftWhiz")
		"####" A 0 A_Jump(256,"LeftNoes")
	LeftWhiz:
		"####" A 0 A_PlaySound("Bishop/Move",0,0.6)
		"####" A 0 A_Jump(256,"LeftNoes")
	LeftNoes:
		"####" CD 7
 		"####" C 0 A_SpawnItemEx("BishopStepLeft", 0, 0, 0, 0, 0, -10, 0,0, 0)
		"####" A 0 A_Jump(256,"Spawn")
		Goto Spawn
		
	SeeSuitBerserk:
		"####" A 0 A_JumpIfInventory("ThreadingNotSoLightly",1,10) 
		"####" A 0 A_GiveInventory("ThreadingNotSoLightly",1)
		"####" A 0 A_CheckFloor("ZerkRightWhiz")
		"####" A 0 A_Jump(256,"ZerkRightNoes")
	ZerkRightWhiz:
		"####" A 0 A_PlaySound("Bishop/Move",0,0.6)
		"####" A 0 A_Jump(256,"ZerkRightNoes")
	ZerkRightNoes:
		"####" AB 7
 		"####" A 0 A_SpawnItemEx("BishopZerkStepRight", 0, 0, 0, 0, 0, -10, 0,0, 0)
		"####" A 0 A_Jump(256,"Spawn")
		Goto Spawn
		"####" A 0 A_TakeInventory("ThreadingNotSoLightly",1)
		"####" A 0 A_CheckFloor("ZerkLeftWhiz")
		"####" A 0 A_Jump(256,"ZerkLeftNoes")
    ZerkLeftWhiz:
		"####" A 0 A_PlaySound("Bishop/Move",0,0.6)
		"####" A 0 A_Jump(256,"ZerkLeftNoes")
	ZerkLeftNoes:
		"####" CD 7
 		"####" C 0 A_SpawnItemEx("BishopZerkStepLeft", 0, 0, 0, 0, 0, -10, 0,0, 0)
		"####" A 0 A_Jump(256,"Spawn")
		Goto Spawn
	Melee:
		"####" F 6 Bright
		"####" A 0 A_Jump(256,"Missile")
		Goto Missile
	Missile:
		"####" E 12
		"####" A 0 A_Jump(256,"Spawn")
		Goto Spawn
	Pain.Crow:
	Pain.Crow2:
		"####" "#" 0 A_SetBlend("Black",0.8,35)
		Goto Pain
	Pain:
		"####" G 0 A_JumpIfInventory("PowerSuitToken",1,6)
		"####" G 0 A_SetUserVar("User_Ouch",1)
		"####" G 6 A_Pain
		"####" G 6
		"####" G 0 A_SetUserVar("User_Ouch",0)
		"####" A 0 A_Jump(256,"Spawn")
		Goto Spawn
		"####" G 0 A_PlaySound("Bishop/Pain",0,0.8)
		"####" G 0 A_JumpIf(Health < 50, 2)
		"####" G 0 A_Jump(128,"Spawn")
		"####" G 0 A_SetUserVar("User_Ouch",1)
		"####" G 6 A_Pain
		"####" G 6
		"####" G 0 A_SetUserVar("User_Ouch",0)
		"####" A 0 A_Jump(256,"Spawn")
		Goto Spawn
	Death:
	AltSkinDeath:
		"####" H 5
		"####" I 5 A_PlayerScream
		"####" J 5 A_NoBlocking
		"####" K 5
		"####" L -1
		Stop
	XDeath:
	AltSkinXDeath:
		"####" H 5
		"####" I 5 A_PlayerScream
		"####" J 5 A_NoBlocking
		"####" K 5
		"####" L -1
		Stop
	Death.Acid:
		"####" G 1
		"####" "#" 1 A_Playsound("Gumpop/Expand",5)
		"####" "###################################" 1 A_SetScale(ScaleX+frandom(0.01,0.025))
		"####" "#" 1 A_Playsound("Gumpop/Pop",5)
		TNT1 AAAAAA 0 A_CustomMissile ("CeilBloodLauncherLong", 0, 0, random (0, 360), 2, random (50, 130))
		TNT1 AA 0 A_CustomMissile ("XDeath1", 32, 0, random (0, 360), 2, random (0, 160))
		TNT1 AA 0 A_CustomMissile ("XDeath2", 32, 0, random (0, 360), 2, random (0, 160))
		TNT1 AA 0 A_CustomMissile ("XDeath3", 32, 0, random (0, 360), 2, random (0, 160))
		TNT1 A 0 A_CustomMissile ("XDeath4", 32, 0, random (0, 360), 2, random (0, 160))
		TNT1 AAAAAAAA 0 A_CustomMissile ("SuperWallRedBlood", 40, 0, random (0, 360), 2, random (-5, 5))
		TNT1 AAAA 0 A_CustomMissile ("Instestin", 32, 0, random (0, 360), 2, random (0, 160))
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAA 0 A_CustomMissile ("Brutal_FlyingBlood", 35, 0, random (0, 360), 2, random (0, 160))
		TNT1 AAAAAA 0 A_CustomMissile ("SuperGoreSpawner", 32, 0, random (0, 360), 2, random (50, 130))
		TNT1 A 0 A_ChangeFlag("SOLID", 0)
		TNT1 A 0 A_ChangeFlag("FLOORCLIP", 1)
		XMED ABCDE 5
		Wait
	}
}

//This is probably the weirdest way to handle taunt buttons... but whatever. If it works, it ain't stupid!

actor GuncasterTauntTimer : Inventory { Inventory.MaxAmount 999 }

actor GuncasterTauntItem : CustomInventory
{
  Inventory.Amount 1
  -INVBAR
  states
  {
  Spawn:
	TNT1 A -1
	Stop
  Use:
   	TNT1 A 0 A_JumpIfInventory("GuncasterTauntTimer",1,"Nope")
	TNT1 A 0 A_Jump(256,"Taunt01","Taunt02","Taunt03","Taunt04","Taunt05",
	"Taunt06","Taunt07","Taunt08","Taunt09","Taunt10","Taunt11","Taunt12",
	"Taunt13","Taunt14","Taunt15","Taunt16","Taunt17","Taunt18","Taunt19",
	"Taunt20","Taunt21","Taunt22","Taunt23","Taunt24","Taunt25","Taunt26",
	"Taunt27","Taunt28","Taunt29","Taunt30","Taunt31","Taunt32","Taunt33",
	"Taunt34","Taunt35")
  Taunt01:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",4)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt01",2)
	Fail
  Taunt02:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",6)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt02",2)
	Fail
  Taunt03:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",5)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt03",2)
	Fail
  Taunt04:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",3)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt04",2)
	Fail
  Taunt05:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",6)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt05",2)
	Fail
  Taunt06:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",3)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt06",2)
	Fail
  Taunt07:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",4)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt07",2)
	Fail
  Taunt08:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",5)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt08",2)
	Fail
  Taunt09:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",5)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt09",2)
	Fail
  Taunt10:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",4)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt10",2)
	Fail
  Taunt11:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",5)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt11",2)
	Fail
  Taunt12:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",4)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt12",2)
	Fail
  Taunt13:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",4)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt13",2)
	Fail
  Taunt14:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",2)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt14",2)
	Fail
  Taunt15:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",4)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt15",2)
	Fail
  Taunt16:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",5)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt16",2)
	Fail
  Taunt17:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",5)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt17",2)
	Fail
  Taunt18:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",2)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt18",2)
	Fail
  Taunt19:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",2)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt19",2)
	Fail
  Taunt20:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",2)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt20",2)
	Fail
  Taunt21:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",4)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt21",2)
	Fail
  Taunt22:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",6)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt22",2)
	Fail
  Taunt23:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",5)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt23",2)
	Fail
  Taunt24:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",11)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt24",2)
	Fail
  Taunt25:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",4)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt25",2)
	Fail
  Taunt26:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",6)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt26",2)
	Fail
  Taunt27:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",5)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt27",2)
	Fail
  Taunt28:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",4)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt28",2)
	Fail
  Taunt29:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",1)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt29",2)
	Fail
  Taunt30:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",2)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt30",2)
	Fail
  Taunt31:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",3)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt21",2)
	Fail
  Taunt32:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",2)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt22",2)
	Fail
  Taunt33:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",3)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt23",2)
	Fail
  Taunt34:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",3)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt34",2)
	Fail
  Taunt35:
	TNT1 A 0 A_GiveInventory("GuncasterTauntTimer",4)
	TNT1 A 0 A_PlaySound("Guncaster/Taunt35",2)
	Fail
  Nope:
	TNT1 A 0
	Fail
  }
}

actor CarltonDragonating : Inventory { Inventory.MaxAmount 1 }

actor CarltonSpawner : CustomInventory
{
  Inventory.MaxAmount 1
  +INVENTORY.AUTOACTIVATE
  -INVBAR
  states
  {
  Spawn:
	TNT1 A -1
	Stop
  Use:
	TNT1 A 0 A_SpawnItemEx("CarltonDragon",40,0,0,0,0,0,0,SXF_TRANSFERTRANSLATION)
	TNT1 A 1
	Stop
  }
}

actor CarltonDragon
{
	Radius 16
	Height 56
	+FLOORCLIP
	/*+ACTIVATEMCROSS
	+SHOOTABLE
	+SOLID
	+WINDTHRUST*/
	states
	{
	Spawn:
		CYD3 A 0 NoDelay A_JumpIfInTargetInventory("HexenCounter",1,"Main")
		CYD2 A 0 A_JumpIfInTargetInventory("DoomCounter",1,"Main")
		CYDG A 0
	Main:
		"####" CDEF 3
		"####" GH 6
		"####" FEDC 3
		"####" AB 6
		Loop
	}
}

actor GuncasterStep
{
	PROJECTILE
	+NOBLOOD
	+DONTBLAST
	-ACTIVATEMCROSS
	-ACTIVATEIMPACT
	damage 0
	radius 10
	//deathsound "Guncaster/Step"
	States
	{
	Spawn:
		TNT1 A 1 NoDelay
		Stop
	Death:
		TNT1 A 0 A_SpawnItemEx("GuncasterStepConnect",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
		Stop
	}
}
actor GuncasterStepConnect
{
	+NOINTERACTION
	//+NOTONAUTOMAP
	var int User_Counter;
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_SetUserVar("User_Counter",25)
		TNT1 A 0 A_PlaySound("Guncaster/Step")
	Looplet:
		TNT1 A 0 A_JumpIf(User_Counter <= 0, "Null")
		TNT1 A 0 A_SetUserVar("User_Counter", User_Counter - 1)
		TNT1 A 1 A_Warp(AAPTR_TARGET,0,0,-10.0,0,WARPF_NOCHECKPOSITION)
		Loop
	}
}

actor BerserkStep : GuncasterStep
{
	States
	{
	Spawn:
		TNT1 A 1 NoDelay //A_SetUserVar("User_Counter",25)
		Stop
	Death:
		TNT1 A 0 A_Quake(1,4,0,128,"none")
		TNT1 AAAAAA 0 A_SpawnItemEx("BerserkStep_Effect",frandom(3.0,-3.0),frandom(3.0,-3.0),frandom(3.0,-3.0),frandom(0.2,-0.2),frandom(0.2,-0.2),frandom(0.5,0.1),frandom(0.0,360.0),SXF_CLIENTSIDE,0)
		TNT1 A 4 A_SpawnItemEx("GuncasterZerkStepConnect",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)
		Stop
	}
}

actor GuncasterZerkStepConnect
{
	+NOINTERACTION
	//+NOTONAUTOMAP
	var int User_Counter;
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_SetUserVar("User_Counter",25)
		TNT1 A 0 A_PlaySound("Berserk/Step")
	Looplet:
		TNT1 A 0 A_JumpIf(User_Counter <= 0, "Null")
		TNT1 A 0 A_SetUserVar("User_Counter", User_Counter - 1)
		TNT1 A 1 A_Warp(AAPTR_TARGET,0,0,-10.0,0,WARPF_NOCHECKPOSITION)
		Loop
	}
}

//Powersuit
actor BishopStepRight
{
	PROJECTILE
	-ACTIVATEMCROSS
	-ACTIVATEIMPACT
	+NOBLOOD
	+DONTBLAST
	radius 10
	States
	{
	Spawn:
		TNT1 A 1 NoDelay
		Stop
	Death:
		TNT1 A 0 A_SpawnItemEx("BishopStepConnectRight",0,5,0,0,0,0,0,SXF_TRANSFERPOINTERS)
		Stop
	}
}

actor BishopStepLeft : BishopStepRight
{
	States
	{
	Death:
		TNT1 A 0 A_SpawnItemEx("BishopStepConnectLeft",0,-5,0,0,0,0,0,SXF_TRANSFERPOINTERS)
		Stop
	}
}

ACTOR BishopStepConnectRight
{
	+NOINTERACTION
	//+NOTONAUTOMAP
	var int User_Counter;
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_SpawnItemEx("BishopFootprintRight",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_Jump(256,"Rest")
	Rest:
		TNT1 A 0 A_SetUserVar("User_Counter",25)
		TNT1 A 0 A_PlaySound("Bishop/Step",6,0.3)
		//TNT1 A 0 A_PlaySound("Bishop/Hydraulics",6)
		TNT1 A 0 A_PlaySound("Bishop/Thud",5,0.3)
		TNT1 A 0 A_SpawnItemEx("BishopStepDustSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_QuakeEx(1,1,1,15,0,128,"none",QF_SCALEDOWN)
	Looplet:
		TNT1 A 0 A_JumpIf(User_Counter <= 0, "Null")
		TNT1 A 0 A_SetUserVar("User_Counter", User_Counter - 1)
		TNT1 A 1 A_Warp(AAPTR_TARGET,0,0,-25.0,0,WARPF_NOCHECKPOSITION)
		Loop
	}
}

ACTOR BishopStepConnectLeft : BishopStepConnectRight
{
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_SpawnItemEx("BishopFootprintLeft",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_Jump(256,"Rest")
	}
}

//Powersuit zerk
actor BishopZerkStepRight : BishopStepRight
{
	States
	{
	Spawn:
		TNT1 A 1 NoDelay
		Stop
	Death:
		TNT1 A 0 A_SpawnItemEx("BishopZerkStepConnectRight",0,5,0,0,0,0,0,SXF_TRANSFERPOINTERS)
		Stop
	}
}

actor BishopZerkStepLeft : BishopStepRight
{
	States
	{
	Death:
		TNT1 A 0 A_SpawnItemEx("BishopZerkStepConnectLeft",0,-5,0,0,0,0,0,SXF_TRANSFERPOINTERS)
		Stop
	}
}

ACTOR BishopZerkStepConnectRight
{
	+NOINTERACTION
	//+NOTONAUTOMAP
	var int User_Counter;
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_SpawnItemEx("BishopFootprintRight",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_Jump(256,"Rest")
	Rest:
		TNT1 A 0 A_SetUserVar("User_Counter",25)
		TNT1 A 0 A_PlaySound("Bishop/Step",6,0.3)
		//TNT1 A 0 A_PlaySound("Bishop/Hydraulics",6)
		TNT1 A 0 A_PlaySound("Bishop/Thud",5,0.3)
		TNT1 AAAAAA 0 A_SpawnItemEx("BerserkStep_Effect",frandom(3.0,-3.0),frandom(3.0,-3.0),frandom(3.0,-3.0),frandom(0.2,-0.2),frandom(0.2,-0.2),frandom(0.5,0.1),frandom(0.0,360.0),SXF_TRANSFERPOINTERS)
		TNT1 A 0 A_SpawnItemEx("BishopStepDustSpawner",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_QuakeEx(1,1,1,15,0,128,"none",QF_SCALEDOWN)
	Looplet:
		TNT1 A 0 A_JumpIf(User_Counter <= 0, "Null")
		TNT1 A 0 A_SetUserVar("User_Counter", User_Counter - 1)
		TNT1 A 1 A_Warp(AAPTR_TARGET,0,0,-25.0,0,WARPF_NOCHECKPOSITION)
		Loop
	}
}

ACTOR BishopZerkStepConnectLeft : BishopZerkStepConnectRight
{
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_SpawnItemEx("BishopFootprintLeft",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
		TNT1 A 0 A_Jump(256,"Rest")
	}
}

//Stuff
ACTOR BishopFootprintRight
{
	Renderstyle Translucent
	Alpha 0.6
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_JumpIf(CallACS("WaterBollocks") == True, "Null")
		TNT1 A 0 A_JumpIf(CallACS("FrostbiteBollocks") >= 1, "Null")
		BTPR A 105 A_CheckSight("Null")
		Loop
	}
}

ACTOR BishopFootprintLeft
{
	Renderstyle Translucent
	Alpha 0.6
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_JumpIf(CallACS("WaterBollocks") == True, "Null")
		TNT1 A 0 A_JumpIf(CallACS("FrostbiteBollocks") >= 1, "Null")
		BTPR A 105 A_CheckSight("Null")
		Loop
	}
}

ACTOR BishopStepDustSpawner
{
	+NOINTERACTION
	var int User_Counter;
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_SetUserVar("User_Counter",random(10,15))
	Phase1:
		TNT1 A 0 A_SetUserVar("User_Counter", User_Counter - 1)
		TNT1 A 0 A_SpawnItemEx("WalkerDust",0,0,0,frandom(2.0,1.0),0,frandom(1.0,0.5),frandom(0.0,360.0),SXF_CLIENTSIDE,20)
		TNT1 A 0 A_JumpIf(User_Counter >= 1, "Phase1")
	Phase2Setup:
		TNT1 A 0 A_SetUserVar("User_Counter",random(2,7))
	Phase2:
		TNT1 A 0 A_SetUserVar("User_Counter", User_Counter - 1)
		TNT1 A random(1,2) A_SpawnItemEx("WalkerDust",0,0,0,frandom(2.0,1.0),0,frandom(1.0,0.5),frandom(0.0,360.0),SXF_CLIENTSIDE,20)
		TNT1 A 0 A_JumpIf(User_Counter >= 1, "Phase2")
		Stop
	}
}

ACTOR WalkerDust
{
	Radius 4
	Height 8
	Speed 20
	BounceFactor 0.6
	WallBounceFactor 0.6
	+BOUNCEONWALLS
	+THRUACTORS
	Scale 0.0
	Alpha 0.0
	Renderstyle Translucent
	Projectile
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_ScaleVelocity(frandom(0.8,1.2))
		TNT1 A 0 A_FadeIn(frandom(0.1,0.2))
		TNT1 A 0 A_SetScale(frandom(0.1,0.15))
	FrameSetup:
		TNT1 A 0 A_Jump(256,"FrameA","FrameB","FrameC","FrameD")
	FrameA:
		DUST A 0
	FrameB:
		DUST B 0
	FrameC:
		DUST C 0
	FrameD:
		DUST D 0
	Main:
		"####" "#" 0 A_SetScale(ScaleX + frandom(0.002,0.005))
		"####" "#" 1 A_FadeOut(frandom(0.004,0.007))
		Loop
	}
}

//Powersuit Jet
Actor Rocketpack_Emitter : CustomInventory
{
	Inventory.MaxAmount 0
	+Inventory.Autoactivate
	States
	{
	Spawn:
		TNT1 A 0
		Stop
	Use:
		TNT1 A 0 A_SpawnItemEx("Rocketpack_Flare",-55+frandom(1.0,-1.0),frandom(1.0,-1.0),25+frandom(1.0,-1.0),0,0,0,0,SXF_CLIENTSIDE,20)
		TNT1 A 0 A_SpawnItemEx("Rocketpack_Cloud",-55+frandom(5.0,-5.0),frandom(5.0,-5.0),25+frandom(5.0,-5.0),frandom(-1.0,1.0),frandom(1.0,-1.0),frandom(-2.0,-6.0),0,SXF_CLIENTSIDE,20)
		TNT1 A 0 A_SpawnItemEx("Rocketpack_Smoke",-55+frandom(5.0,-5.0),frandom(5.0,-5.0),25+frandom(5.0,-5.0),frandom(-1.0,1.0),frandom(1.0,-1.0),frandom(-2.0,-6.0),0,SXF_CLIENTSIDE,20)
		TNT1 A 0 A_SpawnItemEx("Rocketpack_Ember",-55+frandom(5.0,-5.0),frandom(5.0,-5.0),25+frandom(5.0,-5.0),frandom(-1.0,1.0),frandom(1.0,-1.0),frandom(-2.0,-6.0),0,SXF_CLIENTSIDE,224)
		TNT1 A 0 A_SpawnItemEx("Rocketpack_GLDEF",frandom(5.0,-5.0),frandom(5.0,-5.0),frandom(5.0,-5.0),frandom(-3.0,-1.0),frandom(1.0,-1.0),frandom(1.0,-1.0),0,SXF_CLIENTSIDE)
		Stop
	}
}

Actor Rocketglide_Emitter : CustomInventory
{
	Inventory.MaxAmount 0
	+Inventory.Autoactivate
	States
	{
	Spawn:
		TNT1 A 0
		Stop
	Use:
		TNT1 A 0 A_SpawnItemEx("Rocketpack_Flare",-55+frandom(3.0,-3.0),frandom(3.0,-3.0),25+frandom(3.0,-3.0),0,0,0,0,SXF_CLIENTSIDE,20)
		TNT1 A 0 A_SpawnItemEx("Rocketpack_Cloud",-55+frandom(5.0,-5.0),frandom(5.0,-5.0),25+frandom(5.0,-5.0),frandom(-6.0,-2.0),frandom(1.0,-1.0),frandom(1.0,-1.0),0,SXF_CLIENTSIDE,20)
		TNT1 A 0 A_SpawnItemEx("Rocketpack_Smoke",-55+frandom(5.0,-5.0),frandom(5.0,-5.0),25+frandom(5.0,-5.0),frandom(-6.0,-2.0),frandom(1.0,-1.0),frandom(1.0,-1.0),0,SXF_CLIENTSIDE,20)
		TNT1 A 0 A_SpawnItemEx("Rocketpack_Ember",-55+frandom(5.0,-5.0),frandom(5.0,-5.0),25+frandom(5.0,-5.0),frandom(-6.0,-2.0),frandom(1.0,-1.0),frandom(1.0,-1.0),0,SXF_CLIENTSIDE,224)
		TNT1 A 0 A_SpawnItemEx("Rocketpack_GLDEF",frandom(5.0,-5.0),frandom(5.0,-5.0),frandom(5.0,-5.0),frandom(-3.0,-1.0),frandom(1.0,-1.0),frandom(1.0,-1.0),0,SXF_CLIENTSIDE)
		Stop
	}
}

Actor Rocketkick_Emitter
{
	Projectile
	+NOINTERACTION
	var int User_Counter;
	States
	{
	Spawn:
		TNT1 A 0 NoDelay A_SetUserVar("User_Counter", 15)
	Looplet:
		TNT1 A 0 A_SetUserVar("User_Counter", User_Counter - 1)
		TNT1 A 0 A_JumpIf(User_Counter <= 0, "Null")
		TNT1 A 0 A_Warp(AAPTR_MASTER,0,0,0,0,WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
		TNT1 A 0 A_SpawnItemEx("Rocketpack_Flare",-55+frandom(3.0,-3.0),frandom(3.0,-3.0),25+frandom(3.0,-3.0),0,0,0,0,SXF_CLIENTSIDE,20)
		TNT1 A 0 A_SpawnItemEx("Rocketpack_Cloud",-55+frandom(5.0,-5.0),frandom(5.0,-5.0),25+frandom(5.0,-5.0),frandom(-6.0,-2.0),frandom(1.0,-1.0),frandom(1.0,-1.0),0,SXF_CLIENTSIDE,20)
		TNT1 A 0 A_SpawnItemEx("Rocketpack_Smoke",-55+frandom(5.0,-5.0),frandom(5.0,-5.0),25+frandom(5.0,-5.0),frandom(-6.0,-2.0),frandom(1.0,-1.0),frandom(1.0,-1.0),0,SXF_CLIENTSIDE,20)
		TNT1 A 0 A_SpawnItemEx("Rocketpack_Ember",-55+frandom(5.0,-5.0),frandom(5.0,-5.0),25+frandom(5.0,-5.0),frandom(-6.0,-2.0),frandom(1.0,-1.0),frandom(1.0,-1.0),0,SXF_CLIENTSIDE,224)
		TNT1 A 1 A_SpawnItemEx("Rocketpack_GLDEF",frandom(5.0,-5.0),frandom(5.0,-5.0),frandom(5.0,-5.0),frandom(-3.0,-1.0),frandom(1.0,-1.0),frandom(1.0,-1.0),0,SXF_CLIENTSIDE)
		Loop
	}
}

Actor Rocketpack_Flare
{
	+NOGRAVITY
	+NOINTERACTION
	+THRUGHOST
	+DONTSPLASH
	RenderStyle Add
	Scale 0.25
	Alpha 0.95
	States
	{
		Spawn:
			FLAR A 1 Bright A_FadeOut(0.3)
			FLAR A 0 A_SetScale(ScaleX - FRandom(0.005, 0.0075))
			FLAR A 0 A_JumpIf(ScaleX <= 0.0, "NULL")
			Loop
	}
}

Actor Rocketpack_Cloud
{
	+NOINTERACTION
	+NOGRAVITY
	+FORCEXYBILLBOARD
	+NOTONAUTOMAP
	Alpha 0.65
	RenderStyle Add
	States
	{
		Spawn:
			TNT1 A 0 NoDelay A_Jump(256, "SpriteA", "SpriteB", "SpriteC", "SpriteD",
								 "SpriteE", "SpriteF", "SpriteG", "SpriteH")
		SpriteA:
			CLOD A 0 A_Jump(256, "FadeIn")
			Goto SpriteA
		SpriteB:
			CLOD B 0 A_Jump(256, "FadeIn")
			Goto SpriteB
		SpriteC:
			CLOD C 0 A_Jump(256, "FadeIn")
			Goto SpriteC
		SpriteD:
			CLOD D 0 A_Jump(256, "FadeIn")
			Goto SpriteD
		SpriteE:
			CLOD E 0 A_Jump(256, "FadeIn")
			Goto SpriteE
		SpriteF:
			CLOD F 0 A_Jump(256, "FadeIn")
			Goto SpriteF
		SpriteG:
			CLOD G 0 A_Jump(256, "FadeIn")
			Goto SpriteG
		SpriteH:
			CLOD H 0 A_Jump(256, "FadeIn")
			Goto SpriteH
		FadeIn:
			"####" "#" 0 Bright A_SetScale(FRandom(0.5, 0.6))
			Goto Idle
		Idle:
			"####" "#" 2 Bright A_Jump(190, "FadeOut")
			Loop
		FadeOut:
			"####" "#" 1 Bright A_FadeOut(0.035)
			"####" "#" 0 A_ScaleVelocity(FRandom(1.01, 1.03))
			"####" "#" 0 A_SetScale(ScaleX - FRandom(0.01, 0.03))
			Loop
	}
}

Actor Rocketpack_Smoke : Rocketpack_Cloud
{
	Alpha 0.0
	RenderStyle Translucent
	States
	{
		Spawn:
		    TNT1 A 4
			TNT1 A 0 A_Jump(256, "SpriteA", "SpriteB", "SpriteC", "SpriteD")
		SpriteA:
			DYMI A 0 A_Jump(256, "FadeIn")
			Goto SpriteA
		SpriteB:
			DYMI B 0 A_Jump(256, "FadeIn")
			Goto SpriteB
		SpriteC:
			DYMI C 0 A_Jump(256, "FadeIn")
			Goto SpriteC
		SpriteD:
			DYMI D 0 A_Jump(256, "FadeIn")
			Goto SpriteD
		FadeIn:
			"####" "#" 0 A_SetScale(FRandom(0.3, 0.4))
			Goto RealFadeIn
		RealFadeIn:
			"####" "#" 1 A_FadeIn(FRandom(0.01, 0.03))
			"####" "#" 0 A_JumpIf(Alpha >= 0.35, "Idle")
			Loop
		Idle:
			"####" "#" 5 A_Jump(200, "FadeOut")
			Loop
		FadeOut:
			"####" "#" 1 A_FadeOut(FRandom(0.02,0.025))
			"####" "#" 0 A_ScaleVelocity(0.96)
			"####" "#" 0 A_SetScale(ScaleX + FRandom(0.02, 0.025))
			Loop
	}
}

Actor Rocketpack_Ember : Rocketpack_Cloud
{
	Alpha 0.99
	RenderStyle Add
	States
	{
		Spawn:
			TNT1 A 0 NoDelay A_Jump(256, "SpriteA", "SpriteB", "SpriteC", "SpriteD", "SpriteE", "SpriteF")
		SpriteA:
			EMBR A 0 A_Jump(256, "FadeIn")
			Goto SpriteA
		SpriteB:
			EMBR B 0 A_Jump(256, "FadeIn")
			Goto SpriteB
		SpriteC:
			EMBR C 0 A_Jump(256, "FadeIn")
			Goto SpriteC
		SpriteD:
			EMBR D 0 A_Jump(256, "FadeIn")
			Goto SpriteD
		SpriteE:
			EMBR E 0 A_Jump(256, "FadeIn")
			Goto SpriteE
		SpriteF:
			EMBR F 0 A_Jump(256, "FadeIn")
			Goto SpriteF
		FadeIn:
			"####" "#" 0 Bright A_SetScale(FRandom(0.035, 0.055))
			Goto Idle
		Idle:
			"####" "#" 2 Bright A_Jump(200, "FadeOut")
			Loop
		FadeOut:
			"####" "#" 1 Bright A_Weave(FRandom(0.9, 1.0), FRandom(0.9, 1.0),
										FRandom(70, 90), FRandom(70, 90))
			"####" "#" 0 A_JumpIf(ScaleX <= 0.0, "NULL")
			"####" "#" 0 A_ChangeVelocity(VelX * FRandom(0.93, 0.99),
										  VelY * FRandom(0.93, 0.99),
										  VelZ - FRandom(0.1, 0.2),
										  CVF_REPLACE)
			"####" "#" 0 A_SetScale(ScaleX - FRandom(0.0025, 0.0015))
			Loop
	}
}

Actor Rocketpack_GLDEF
{
	+NOINTERACTION
	States
	{
	Spawn:
	TNT1 A 15
	Stop
	}
}


actor StompCooldown : Inventory
{
	Inventory.MaxAmount 600
}

actor ThreadingNotSoLightly : Inventory { Inventory.MaxAmount 1 }
actor KickDummyForward : Inventory { Inventory.MaxAmount 1 }
actor KickDummyBackward : Inventory { Inventory.MaxAmount 1 }
actor KickDummyLeft : Inventory { Inventory.MaxAmount 1 }
actor KickDummyRight : Inventory { Inventory.MaxAmount 1 }