// indented with decorate indenter by IvanDobrovski
const int knight_shield_offx = 16;

Actor KnightCrushBoss : BaseMM8BDMWep_CBM {
	Tag "$TAGC_6D"
	Dropitem "KnightCrushWepCDropped"
	Weapon.AmmoUse 0
	Weapon.AmmoGive 28
	Obituary "$OB_KNIGHTCRUSH"
	Weapon.ammotype "KnightmanAmmo"
	States {
		Spawn:
			C_06 D 1
		Loop
		Ready:
			KNIA A 1 ACS_ExecuteAlways(998, 0, DYE_KNIGHTMAN)
			TNT1 A 0 A_GiveInventory("KnightmanShieldSpawner", 1)
		ReadyNext:
			KNIA A 0 A_TakeInventory("StopShield", 9)
		Goto Ready1
		Ready1:
			KNIA A 0 A_JumpIfInventory("KnightmanSuperFlag", 1, "Ready1.a")
			KNIA A 0 A_JumpIfInventory("KnightmanAmmo", 28, "Ready2")
			KNIA A 3 A_WeaponReady(8)
			KNIA A 0 A_GiveInventory("KnightmanAmmo", 1)
		Loop
		Ready2:
			KNIA A 0 A_JumpIfInventory("KnightmanSuperFlag", 1, "Ready2.a")
			KNIA A 3 A_WeaponReady
			KNIA A 0 A_GiveInventory("KnightmanAmmo", 1)
		Loop
		Ready1.a:
			KNIA A 0 A_JumpIfInventory("KnightmanAmmo", 28, "Ready2.a")
			KNIA A 3 A_WeaponReady(8)
			KNIA HH 0 A_SpawnItemEx("BassChargeFX",32,0,random(0,48),velx,vely,velz+12,random(0,360),SXF_TRANSFERTRANSLATION|SXF_ABSOLUTEMOMENTUM)
			KNIA A 0 A_GiveInventory("KnightmanAmmo", 1)
		Ready1.b:
			KNIA A 0 A_JumpIfInventory("KnightmanAmmo", 28, "Ready2.b")
			KNIC G 3 A_WeaponReady(8)
			KNIC HH 0 A_SpawnItemEx("BassChargeFX",32,0,random(0,48),velx,vely,velz+12,random(0,360),SXF_TRANSFERTRANSLATION|SXF_ABSOLUTEMOMENTUM)
			KNIA A 0 A_GiveInventory("KnightmanAmmo", 1)
		Goto Ready1.a
		Ready2.a:
			KNIA A 3 A_WeaponReady
			KNIA HH 0 A_SpawnItemEx("BassChargeFX",32,0,random(0,48),velx,vely,velz+12,random(0,360),SXF_TRANSFERTRANSLATION|SXF_ABSOLUTEMOMENTUM)
			KNIA A 0 A_GiveInventory("KnightmanAmmo", 1)
		Ready2.b:
			KNIC G 3 A_WeaponReady
			KNIC HH 0 A_SpawnItemEx("BassChargeFX",32,0,random(0,48),velx,vely,velz+12,random(0,360),SXF_TRANSFERTRANSLATION|SXF_ABSOLUTEMOMENTUM)
			KNIC A 0 A_GiveInventory("KnightmanAmmo", 1)
		Goto Ready2.a
		Deselect:
			KNIA A 0
			TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
			KNIA A 1 A_Lower
		Loop
		Select:
			TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
			KNIA A 1 A_Raise
		Loop
		Fire:
			KNIA PHF 1
			KNIA A 0 A_JumpIfInventory("KnightmanSuperFlag", 1, "FireSuper")
			KNIA W 0 A_Refire("FireCharge.a")
		Goto FireNormal
		FireCharge.a:
			KNIA B 0 //A_GiveInventory("StopShield",1)
			TNT1 A 0 ACS_ExecuteWithResult(512,1,-4)
			KNIA B 0 A_PlayWeaponSound("weapon/knightcrushspin")
			KNIC A 0 A_SpawnItemEx("KnightmanChargeFX",60,0,64,0,0,0,0,1)
			KNIC A 1 A_GiveInventory("KnightmanCharge",1)
			KNIC A 0 A_JumpIfInventory("KnightmanCharge", 56, 2)
			KNIC A 0 A_Refire("FireCharge.b")
		Goto FireNormal
			KNIC A 0 A_Refire("FireCharge.b")
		Goto FireCharged
		FireCharge.b:
			TNT1 A 0 ACS_ExecuteWithResult(512,1,-4)
			KNIC A 0 A_SpawnItemEx("KnightmanChargeFX",60,0,64,0,0,0,24,1)
			KNIC A 1 A_GiveInventory("KnightmanCharge",1)
			KNIC A 0 A_JumpIfInventory("KnightmanCharge", 56, 2)
			KNIC A 0 A_Refire("FireCharge.c")
		Goto FireNormal
			KNIC A 0 A_Refire("FireCharge.c")
		Goto FireCharged
		FireCharge.c:
			TNT1 A 0 ACS_ExecuteWithResult(512,1,-4)
			KNIC A 0 A_SpawnItemEx("KnightmanChargeFX",60,0,64,0,0,0,48,1)
			KNIC A 1 A_GiveInventory("KnightmanCharge",1)
			KNIC A 0 A_GiveInventory("KnightmanAmmo", 1)
			KNIC A 0 A_JumpIfInventory("KnightmanCharge", 56, 2)
			KNIC A 0 A_Refire("FireCharge.d")
		Goto FireNormal
			KNIC A 0 A_Refire("FireCharge.d")
		Goto FireCharged
		FireCharge.d:
			TNT1 A 0 ACS_ExecuteWithResult(512,1,-4)
			KNIC A 0 A_SpawnItemEx("KnightmanChargeFX",60,0,64,0,0,0,72,1)
			KNIC B 1 A_GiveInventory("KnightmanCharge",1)
			KNIC A 0 A_JumpIfInventory("KnightmanCharge", 56, 2)
			KNIC B 0 A_Refire("FireCharge.e")
		Goto FireNormal
			KNIC A 0 A_Refire("FireCharge.e")
		Goto FireCharged
		FireCharge.e:
			TNT1 A 0 ACS_ExecuteWithResult(512,1,-4)
			KNIC A 0 A_SpawnItemEx("KnightmanChargeFX",60,0,64,0,0,0,96,1)
			KNIC B 1 A_GiveInventory("KnightmanCharge",1)
			KNIC A 0 A_JumpIfInventory("KnightmanCharge", 56, 2)
			KNIC B 0 A_Refire("FireCharge.f")
		Goto FireNormal
			KNIC A 0 A_Refire("FireCharge.f")
		Goto FireCharged
		FireCharge.f:
			TNT1 A 0 ACS_ExecuteWithResult(512,1,-4)
			KNIC A 0 A_SpawnItemEx("KnightmanChargeFX",60,0,64,0,0,0,120,1)
			KNIC B 1 A_GiveInventory("KnightmanCharge",1)
			KNIC A 0 A_GiveInventory("KnightmanAmmo", 1)
			KNIC A 0 A_JumpIfInventory("KnightmanCharge", 56, 2)
			KNIC B 0 A_Refire("FireCharge.g")
		Goto FireNormal
			KNIC A 0 A_Refire("FireCharge.g")
		Goto FireCharged
		FireCharge.g:
			TNT1 A 0 ACS_ExecuteWithResult(512,1,-4)
			KNIC A 0 A_SpawnItemEx("KnightmanChargeFX",60,0,64,0,0,0,144,1)
			KNIC C 1 A_GiveInventory("KnightmanCharge",1)
			KNIC A 0 A_JumpIfInventory("KnightmanCharge", 56, 2)
			KNIC C 0 A_Refire("FireCharge.h")
		Goto FireNormal
			KNIC A 0 A_Refire("FireCharge.h")
		Goto FireCharged
		FireCharge.h:
			TNT1 A 0 ACS_ExecuteWithResult(512,1,-4)
			KNIC A 0 A_SpawnItemEx("KnightmanChargeFX",60,0,64,0,0,0,168,1)
			KNIC C 1 A_GiveInventory("KnightmanCharge",1)
			KNIC A 0 A_JumpIfInventory("KnightmanCharge", 56, 2)
			KNIC C 0 A_Refire("FireCharge.i")
		Goto FireNormal
			KNIC A 0 A_Refire("FireCharge.i")
		Goto FireCharged
		FireCharge.i:
			TNT1 A 0 ACS_ExecuteWithResult(512,1,-4)
			KNIC A 0 A_SpawnItemEx("KnightmanChargeFX",60,0,64,0,0,0,192,1)
			KNIC C 1 A_GiveInventory("KnightmanCharge",1)
			KNIC A 0 A_GiveInventory("KnightmanAmmo", 1)
			KNIC A 0 A_JumpIfInventory("KnightmanCharge", 56, 2)
			KNIC C 0 A_Refire("FireCharge.j")
		Goto FireNormal
			KNIC A 0 A_Refire("FireCharge.j")
		Goto FireCharged
		FireCharge.j:
			TNT1 A 0 ACS_ExecuteWithResult(512,1,-4)
			KNIC A 0 A_SpawnItemEx("KnightmanChargeFX",60,0,64,0,0,0,216,1)
			KNIC D 1 A_GiveInventory("KnightmanCharge",1)
			KNIC A 0 A_JumpIfInventory("KnightmanCharge", 56, 2)
			KNIC D 0 A_Refire("FireCharge.k")
		Goto FireNormal
			KNIC A 0 A_Refire("FireCharge.k")
		Goto FireCharged
		FireCharge.k:
			TNT1 A 0 ACS_ExecuteWithResult(512,1,-4)
			KNIC A 0 A_SpawnItemEx("KnightmanChargeFX",60,0,64,0,0,0,240,1)
			KNIC D 1 A_GiveInventory("KnightmanCharge",1)
			KNIC A 0 A_JumpIfInventory("KnightmanCharge", 56, 2)
			KNIC D 0 A_Refire("FireCharge.l")
		Goto FireNormal
			KNIC A 0 A_Refire("FireCharge.l")
		Goto FireCharged
		FireCharge.l:
			TNT1 A 0 ACS_ExecuteWithResult(512,1,-4)
			KNIC A 0 A_SpawnItemEx("KnightmanChargeFX",60,0,64,0,0,0,264,1)
			KNIC D 1 A_GiveInventory("KnightmanCharge",1)
			KNIC A 0 A_GiveInventory("KnightmanAmmo", 1)
			KNIC A 0 A_JumpIfInventory("KnightmanCharge", 56, 2)
			KNIC D 0 A_Refire("FireCharge.m")
		Goto FireNormal
			KNIC A 0 A_Refire("FireCharge.m")
		Goto FireCharged
		FireCharge.m:
			TNT1 A 0 ACS_ExecuteWithResult(512,1,-4)
			KNIC A 0 A_SpawnItemEx("KnightmanChargeFX",60,0,64,0,0,0,288,1)
			KNIC E 1 A_GiveInventory("KnightmanCharge",1)
			KNIC A 0 A_JumpIfInventory("KnightmanCharge", 56, 2)
			KNIC E 0 A_Refire("FireCharge.n")
		Goto FireNormal
			KNIC A 0 A_Refire("FireCharge.n")
		Goto FireCharged
		FireCharge.n:
			TNT1 A 0 ACS_ExecuteWithResult(512,1,-4)
			KNIC A 0 A_SpawnItemEx("KnightmanChargeFX",60,0,64,0,0,0,312,1)
			KNIC E 1 A_GiveInventory("KnightmanCharge",1)
			KNIC A 0 A_JumpIfInventory("KnightmanCharge", 56, 2)
			KNIC E 0 A_Refire("FireCharge.o")
		Goto FireNormal
			KNIC A 0 A_Refire("FireCharge.o")
		Goto FireCharged
		FireCharge.o:
			TNT1 A 0 ACS_ExecuteWithResult(512,1,-4)
			KNIC A 0 A_SpawnItemEx("KnightmanChargeFX",60,0,64,0,0,0,336,1)
			KNIC E 1 A_GiveInventory("KnightmanCharge",1)
			KNIC A 0 A_GiveInventory("KnightmanAmmo", 1)
			KNIC A 0 A_JumpIfInventory("KnightmanCharge", 56, 2)
			KNIC E 0 A_Refire("FireCharge.a")
		Goto FireNormal
			KNIC A 0 A_Refire("FireCharge.a")
		Goto FireCharged
		FireCharged:
			KNIA B 0 A_TakeInventory("StopShield",1)
			KNIA B 0 A_GiveInventory("KnightmanSuperFlag",1)
			TNT1 A 0 ACS_NamedExecute("BULL_SetState",0,1)
			KNIA B 0 A_PlaySoundEx("weapon/adapterreturn","Body")
			KNIA FG 2 ACS_ExecuteWithResult(CORE_ACS_191,APROP_Speed,1,1)
			KNIC F 0 A_GiveInventory("KnightmanCharge",1)
			KNIC F 2
			KNIA A 2
		FireChargedDone:
			KNIA B 0 A_TakeInventory("StopShield",1)
			KNIA A 3 A_GiveInventory("KnightmanAmmo", 1)
			KNIA A 0 ACS_ExecuteWithResult(CORE_ACS_191,APROP_Speed,1,1)
			KNIC G 3 A_GiveInventory("KnightmanAmmo", 1)
			//KNIC G 0 A_Refire("FireChargedDone")
		Goto Ready1
		FireNormal:
			KNIA B 0
			TNT1 A 0 ACS_ExecuteWithResult(CORE_ACS_191,APROP_Speed,1,1)
			KNIA W 1 ACS_NamedExecute("BULL_SetState",0,2)
			KNIA B 0 A_GiveInventory("StopShield",1)
			KNIA P 0 A_GiveInventory("KnightmanFlag",1)
			KNIA C 0 A_TakeInventory("KnightDouble",1)
			KNIA C 0 A_TakeInventory("KnightmanCharge",999)
			KNIA C 0 A_TakeInventory("KnightmanSuperFlag",999)
			KNIA C 1 A_PlaySoundEx("weapon/KnightShot","Weapon")
			KNIA D 2 A_GiveInventory("KnightmanMain2_CI",1)
			KNIA E 2
			KNIA T 4
		Goto Check
		FireSuper:
			KNIA B 0 A_GiveInventory("StopShield",1)
			KNIA P 1 A_GiveInventory("KnightmanFlag",1)
			KNIA HF 1
			TNT1 A 0 ACS_ExecuteWithResult(CORE_ACS_191,APROP_Speed,1,1)
			KNIA W 0 ACS_ExecuteWithResult(512,2,0)
			KNIA B 0 A_GiveInventory("StopShield",1)
			KNIA P 0 A_GiveInventory("KnightmanFlag",1)
			KNIA C 0 A_TakeInventory("KnightDouble",1)
			KNIA C 0 A_TakeInventory("KnightmanCharge",999)
			KNIA C 0 A_TakeInventory("KnightmanSuperFlag",999)
			KNIA C 0 A_PlaySoundEx("weapon/KnightShot","Weapon")
			KNIA C 0 A_PlaySoundEx("weapon/sunparry","Body")
			KNIA C 2 A_GiveInventory("KnightmanMain_CI",1)
			KNIA D 2
			KNIA E 2
			KNIA T 4
		Goto Check
		Check:
			KNIA D 0 A_JumpIfInventory("KnightDouble",1,"Return")
			KNIA U 1 A_GiveInventory("KnightFlag",1)
			KNIA D 0 A_JumpIfInventory("KnightFlag",70,"Return")
			KNIA D 0 A_JumpIfInventory("KnightDouble",1,"Return")
			KNIA U 1 A_GiveInventory("KnightFlag",1)
			KNIA D 0 A_JumpIfInventory("KnightFlag",70,"Return")
			KNIA D 0 A_JumpIfInventory("KnightDouble",1,"Return")
			KNIA U 1 A_GiveInventory("KnightFlag",1)
			KNIA D 0 A_JumpIfInventory("KnightFlag",70,"Return")
			KNIA D 0 A_JumpIfInventory("KnightDouble",1,"Return")
			KNIA U 1 A_GiveInventory("KnightFlag",1)
			KNIA D 0 A_JumpIfInventory("KnightFlag",70,"Return")
			KNIA D 0 A_JumpIfInventory("KnightDouble",1,"Return")
			KNIA U 1 A_GiveInventory("KnightFlag",1)
			KNIA D 0 A_JumpIfInventory("KnightFlag",70,"Return")
			KNIA D 0 A_JumpIfInventory("KnightDouble",1,"Return")
			KNIA U 1 A_GiveInventory("KnightFlag",1)
			KNIA D 0 A_JumpIfInventory("KnightFlag",70,"Return")
			KNIA A 0 A_GiveInventory("KnightmanAmmo", 1)
		loop
		Return:
			KNIA H 2 A_TakeInventory("KnightmanFlag",999)
			KNIA P 2
			KNIA A 2 A_TakeInventory("KnightFlag",999)
			KNIA A 2
		Goto ReadyNext
		AltFire:
			KNIA A 1 A_JumpIfInventory("KnightmanAmmo", 28, "ShieldCharge")
		Goto ReadyNext
		ShieldCharge:
			KNIA G 0 A_GiveInventory("VivifyDelay7",1)
			KNIA G 0 A_Refire(1)
			KNIA G 0 A_TakeInventory("KnightmanAmmo",99)
			KNIA G 0 A_PlaySoundEx("weapon/chargekick","Weapon")
			KNIA Q 1 SetPlayerProperty(0,1,0)
			KNIA N 1
			KNIA G 0 A_GiveInventory("StopShield",1)
			KNIA G 0 A_GiveInventory("InvulnerableOn_Pickup",1)
			KNIA O 1 A_ChangeVelocity(Cos(pitch)*6,0,-sin(pitch)*3,1)//A_Recoil(-6)
			KNIA H 0 A_FireCustomMissile("KnightRushX")
			KNIA H 0 A_GiveInventory("Repulsion",1)
			KNIA O 1 A_ChangeVelocity(Cos(pitch)*6,0,-sin(pitch)*3,1)
			KNIA H 0 A_FireCustomMissile("KnightRush")
			KNIA H 0 A_GiveInventory("Repulsion",1)
			KNIA O 1 A_ChangeVelocity(Cos(pitch)*6,0,-sin(pitch)*3,1)
			KNIA H 0 A_FireCustomMissile("KnightRush")
			KNIA H 0 A_GiveInventory("Repulsion",1)
			KNIA O 1 A_ChangeVelocity(Cos(pitch)*6,0,-sin(pitch)*3,1)
			KNIA H 0 A_FireCustomMissile("KnightRush")
			KNIA H 0 A_GiveInventory("Repulsion",1)
			KNIA O 1 SetPlayerProperty(0,0,0)
			KNIA G 0 A_GiveInventory("InvulnerableOff_Pickup",1)
			KNIA G 0 A_TakeInventory("StopShield",9)
			KNIA O 1 A_GunFlash
			KNIA NQ 1
		Goto Ready1
	}
}

Actor KnightmanShieldSpawner : CustomInventory {
	+ALWAYSPICKUP
	States {
		Pickup:
			TNT1 A 0 A_SpawnItemEx("KnightShieldHitbox_1")
			TNT1 A 0 A_SpawnItemEx("KnightShieldHitbox_2")
			TNT1 A 0 A_SpawnItemEx("KnightShieldHitbox_3")
			TNT1 A 0 A_SpawnItemEx("KnightShieldHitbox_4")
			TNT1 A 0 A_SpawnItemEx("KnightShieldHitbox_5")
			TNT1 A 0 A_SpawnItemEx("KnightShieldHitbox_6")
			TNT1 A 0 A_SpawnItemEx("KnightShieldHitbox_7")
		Stop
	}
}

Actor KnightmanAmmo : Ammo {
	Inventory.amount 1
	Inventory.maxamount 28
	+INVENTORY.IGNORESKILL
}

Actor KnightmanCharge : Ammo {
	Inventory.amount 1
	Inventory.maxamount 56
	+INVENTORY.IGNORESKILL
}

Actor KnightmanFlag : OnceC { }

Actor KnightmanSuperFlag : OnceC { }

Actor KnightmanCrusher {
	Translation "198:198=75:75"
	PROJECTILE
	Damagetype "KnightM_CastleCrush"
	Obituary "$OB_KNIGHTCRUSH"
	+RIPPER
	+DONTSPLASH
	+HEXENBOUNCE
	+SKYEXPLODE
	+THRUGHOST
	BounceFactor 1.0
	WallBounceFactor 1.0
	Damage (0)
	Radius 8
	Height 8
	Speed 60
	Scale 2.5
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteAlways("BULL_Tidifier", 0)
			SpawnLOOP:
			KNIA I 0
			KNIA IX 1 A_SpawnItemEx("KnightmanCrusherDamager", 0, 0, 0, momx, momy, momz, 0, 8, 0)
			KNIA I 0 A_ChangeFlag("THRUGHOST", 0)
			KNIA IXIXIXIXIXIXIX 1 A_SpawnItemEx("KnightmanCrusherDamager", 0, 0, 0, momx, momy, momz, 0, 8, 0)
			KNIA I 0 A_TakeFromTarget("KnightFlag", 999)
			KNIA IXIXIXIXIXIXIX 1 A_SpawnItemEx("KnightmanCrusherDamager", 0, 0, 0, momx, momy, momz, 0, 8, 0)
			KNIA I 0 A_SpawnItemEx("KnightmanCrusherReturn", 0, 0, 0, 0, 0, 0, 0, 1)
		Stop
		Death:
			KNIA I 0 A_GiveToTarget("KnightDouble", 1)
			KNIA I 0 A_TakeFromTarget("KnightFlag", 999)
		Stop
	}
}

Actor KnightmanCrusherB : KnightmanCrusher {
	Translation "198:198=74:74"
}

Actor KnightmanCrusherR : KnightmanCrusher {
	Translation "198:198=41:41"
}

Actor KnightmanCrusherO : KnightmanCrusher {
	Translation "198:198=128:128"
}

Actor KnightmanCrusherP : KnightmanCrusher {
	Translation "198:198=232:232"
}

actor KnightM_CrushBoom : BasicExplosion
{
Obituary "$OB_KNIGHTCRUSHX"
States
{
Spawn:
TNT1 A 0
TNT1 A 1 A_Explode(12,128,0,0,96)
stop
}
}

Actor KnightmanCrusherStronkWire : DuoPunchWire {
	Translation "192:192=85:85"
	+NOINTERACTION
	+SEEKERMISSILE
	ReactionTime 90
	damage (0)
	Speed 50
	scale 1
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_RearrangePointers(0,0,2)
			TNT1 A 0 A_FaceTarget
			goto Spawn2
		Spawn2:
			TNT1 A 0 A_JumpIfCloser(46,"Death")
			TNT1 AA 0 A_SeekerMissile(90,90,SMF_PRECISE)
			TNT1 A 1 A_SpawnItemEx("KnightmanCrusherStronkWireFX",0,0,0,0,0,0,0,1)
			TNT1 A 0 A_CountDown
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(C_CHECK_TARGET_OOC)==0,"Death")
		loop
		Return:
		Death2:
		Death:
			TNT1 A 0 
		stop
	}
}

Actor KnightmanCrusherStronkWireFX : DuoPunchWireFX {
	+NOINTERACTION
	+FORCEXYBILLBOARD
	renderstyle translucent
	alpha 0.3
	scale 1.0
	States {
		Spawn:
			TNT1 A 1
			TNT1 A 0 A_JumpIfCloser(46, "Death")
			KCRB C 10
		stop
		Death:
			TNT1 A 0
		stop
	}
}

Actor KnightReturnerSound : BasicHelper {
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 1 A_PlaySoundEx("weapon/KnightReturn", "Weapon")
		Stop
	}
}

Actor KnightmanCrusherReturn : KnightmanCrusher {
	+NOINTERACTION
	+SEEKERMISSILE
	speed 60
	ReactionTime 87//about 10 seconds
	States {
		Spawn:
			KNIA I 0
			KNIA I 0 A_RearrangePointers(AAPTR_DEFAULT, AAPTR_DEFAULT, AAPTR_TARGET)//Target >> Tracer
			KNIA I 0 A_FaceTarget
		Goto Spawn2
		Spawn2:
			KNIA I 0 A_TakeFromTarget("KnightFlag", 99)
			KNIA I 0 A_JumpIfCloser(46, "Death")
			KNIA I 0 A_SpawnItemEx("KnightReturnerSound")
			KNIA II 0 A_SeekerMissile(90, 90, SMF_PRECISE)
			KNIA I 1 A_SpawnItemEx("KnightmanCrusherDamager", 0, 0, 0, momx, momy, momz, 0, 8)
			KNIA I 0 A_JumpIfCloser(46, "Death")
			KNIA X 1 A_SpawnItemEx("KnightmanCrusherDamager", 0, 0, 0, momx, momy, momz, 0, 8)
			KNIA I 0 A_JumpIfCloser(46, "Death")
			KNIA I 1 A_SpawnItemEx("KnightmanCrusherDamager", 0, 0, 0, momx, momy, momz, 0, 8)
			KNIA I 0 A_JumpIfCloser(46, "Death")
			KNIA X 1 A_SpawnItemEx("KnightmanCrusherDamager", 0, 0, 0, momx, momy, momz, 0, 8)
			KNIA I 0 A_JumpIfCloser(46, "Death")
			KNIA I 0 A_CountDown
			KNIA I 0 A_JumpIf(ACS_ExecuteWithResult(C_CHECK_TARGET_OOC)==0, "Death")
		Loop
	}
}

Actor KnightmanCrusherReturnDamager {
	PROJECTILE
	Damagetype "KnightReturn"
	Obituary "$OB_KNIGHTCRUSHX"
	+RIPPER
	+DONTBLAST
	Damage (18)//11
	Radius 12
	Height 12
	States {
		Spawn:
			TNT1 A 1
		Stop
	}
}

Actor KnightmanCrusherDamager : KnightmanCrusherReturnDamager 
{
Damagetype "KnightM_CastleCrush"
Damage (27)
}

actor KnightM_ShockFX : ShockFX
{
+BRIGHT
States
{
Spawn:
SPAS F 0
SPAS FFGGFFGGFFGGFFG 1
stop
}
}

Actor KnightmanCrusherNoRip : KnightmanCrusher {
	Translation "198:198=75:75", "205:205=95:95","250:250=248:248","249:249=222:222"
	Damagetype "KnightCrushNoisy"
	Obituary "$OB_KNIGHTCRUSH"
	-HEXENBOUNCE
	Damage (20)
	Radius 8
	Height 16
	reactiontime 15
	-RIPPER
	BounceFactor 1.0
	WallBounceFactor 1.0
	Speed 45
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 ACS_NamedExecuteAlways("BULL_Tidifier", 0)
			SpawnLOOP:
			KNIA I 0
			TNT1 A 0 ACS_NamedExecuteWithResult("CCBM_PitchAngleSetter",1)
			TNT1 A 0 A_ChangeVelocity(cos(-pitch)*45,0,sin(-pitch)*45,3)
			KNIA I 1 A_SpawnItemEx("KnightmanCrusherNoRipWire",0,0,0,0,0,0,0,1)
			TNT1 A 0 ACS_NamedExecuteWithResult("CCBM_PitchAngleSetter",1)
			TNT1 A 0 A_ChangeVelocity(cos(-pitch)*45,0,sin(-pitch)*45,3)
			KNIA I 1 A_SpawnItemEx("KnightmanCrusherNoRipWire",0,0,0,0,0,0,0,1)
			TNT1 A 0 ACS_NamedExecuteWithResult("CCBM_PitchAngleSetter",1)
			TNT1 A 0 A_ChangeVelocity(cos(-pitch)*45,0,sin(-pitch)*45,3)
			KNIA I 0 A_ChangeFlag("THRUGHOST", 0)
			SpawnPOOP:
			KNIA I 0 //A_SpawnItemEx("KnightmanCrusherNoRipWire",0,0,0,0,0,0,0,1)
			TNT1 A 0 ACS_NamedExecuteWithResult("CCBM_PitchAngleSetter",1)
			TNT1 A 0 A_ChangeVelocity(cos(-pitch)*45,0,sin(-pitch)*45,3)
			KNIA I 0 A_SpawnItemEx("KnightmanCrusherNoRipWire",0,0,0,0,0,0,0,1)
			KNIA I 1 A_CountDown
			KNIA I 0 //A_JumpIfInTargetInventory("KnightmanFlag",1,"SpawnPOOP")
			loop
			//KNIA I 0 A_TakeFromTarget("KnightFlag", 999)
			//KNIA II 1 A_SpawnItemEx("KnightmanCrusherNoRipWire",0,0,0,0,0,0,0,1)
			//KNIA I 0 A_SpawnItemEx("KnightmanCrusherNoRipReturn", 0, 0, 0, 0, 0, 0, 0, 1)
		Death:
			//KNIA I 0 A_GiveToTarget("KnightDouble", 1)
			KNIA I 0 A_TakeFromTarget("KnightFlag", 999)
			KNIA I 0 A_SpawnItemEx("KnightmanCrusherNoRipReturn", momx, momy, momz, momx, momy, momz, 0, SXF_ABSOLUTEPOSITION|SXF_TRANSFERTRANSLATION)
			KNIA I 0 A_ChangeFlag("NOGRAVITY", 1)
			//CRIT JKLM 1 //A_SetScale(scalex+.5)//A_FadeOut
		Stop
		XDeath:
		Crash:
			KNIA I 0 A_ChangeFlag("THRUGHOST", 0)
			KNIA I 0 A_TakeFromTarget("KnightFlag", 999)
			KNIA I 1 A_SpawnItemEx("KnightmanCrusherNoRipReturn", momx, momy, momz, momx, momy, momz, 0, SXF_ABSOLUTEPOSITION|SXF_TRANSFERTRANSLATION)
			KNIA I 0 A_ChangeFlag("NOGRAVITY", 1)
			CRIT JKLM 1 //A_SetScale(scalex+.5)//A_FadeOut
		Stop
	}
}

Actor KnightmanCrusherNoRipB : KnightmanCrusherNoRip {
	Translation "198:198=74:74","192:192=4:4", "202:202=205:205","249:249=74:74","250:250=205:205"
}

Actor KnightmanCrusherNoRipR : KnightmanCrusherNoRip {
	Translation "198:198=41:41","192:192=4:4", "202:202=171:171","249:249=41:41","250:250=171:171"
}

Actor KnightmanCrusherNoRipO : KnightmanCrusherNoRip {
	Translation "198:198=128:128","192:192=4:4", "202:202=104:104","249:249=128:128","250:250=104:104"
}

Actor KnightmanCrusherNoRipP : KnightmanCrusherNoRip {
	Translation "198:198=232:232","192:192=4:4", "202:202=229:229","249:249=232:232","250:250=229:229"
}

Actor KnightmanCrusherNoRipReturn : KnightmanCrusherNoRip {
	+NOINTERACTION
	+SEEKERMISSILE
	ReactionTime 87//about 10 seconds
	speed 45
	States {
		Spawn:
			KNIA I 0
			KNIA I 0 A_RearrangePointers(AAPTR_DEFAULT, AAPTR_DEFAULT, AAPTR_TARGET)//Target >> Tracer
			KNIA I 0 //A_FaceTarget
		Goto Spawn2
		Spawn2:
			KNIA I 0 A_TakeFromTarget("KnightFlag", 99)
			KNIA I 0 A_JumpIfCloser(46, "Death")
			KNIA I 1 A_SpawnItemEx("KnightReturnerSound")
			KNIA II 0 A_SeekerMissile(90, 90, SMF_PRECISE)
			KNIA I 1 A_SpawnItemEx("KnightmanCrusherNoRipReturnDamager")
			KNIA I 0 A_JumpIfCloser(46, "Death")
			KNIA I 1 A_SpawnItemEx("KnightmanCrusherNoRipReturnDamager")
			KNIA I 0 A_JumpIfCloser(46, "Death")
			KNIA I 1 A_SpawnItemEx("KnightmanCrusherNoRipReturnDamager")
			KNIA I 0 A_JumpIfCloser(46, "Death")
			KNIA I 0 A_CountDown
			KNIA I 0 A_JumpIf(ACS_ExecuteWithResult(C_CHECK_TARGET_OOC)==0, "Death")
		Loop
		Death:
			KNIA I 0 A_GiveToTarget("KnightDouble", 1)
			KNIA I 0 A_TakeFromTarget("KnightFlag", 999)
		stop
	}
}

Actor KnightmanCrusherNoRipReturnDamager {
	PROJECTILE
	Damagetype "KnightReturn"
	Obituary "$OB_KNIGHTCRUSHZ"
	+RIPPER
	+DONTBLAST
	Damage (20)//11
	Radius 8
	Height 16
	States {
		Spawn:
			TNT1 A 1
		Stop
	}
}

Actor KnightmanCrusherNoRipWire : DuoPunchWire {
	Translation "205:205=95:95"
	+NOINTERACTION
	+SEEKERMISSILE
	ReactionTime 35
	damage (0)
	speed 45
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_RearrangePointers(0,0,2)
			TNT1 A 0 A_FaceTarget
			goto Spawn2
		Spawn2:
			TNT1 A 0 A_JumpIfCloser(46,"Death")
			TNT1 AA 0 A_SeekerMissile(90,90,SMF_PRECISE)
			TNT1 A 1 A_SpawnItemEx("KnightmanCrusherNoRipWireFX",0,0,0,0,0,0,0,1)
			TNT1 A 0 A_CountDown
			TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(C_CHECK_TARGET_OOC)==0,"Death")
		loop
		Return:
		Death2:
		Death:
			TNT1 A 0 
		stop
	}
}

Actor KnightmanCrusherNoRipWireFX : DuoPunchWireFX {
	+NOINTERACTION
	Scale 1.5
	Renderstyle Translucent
	Alpha 0.65
	States {
		Spawn:
			TNT1 A 1
			TNT1 A 0 A_JumpIfCloser(46, "Death")
			KNIA Y 2 
		stop
		Death:
			TNT1 A 0
		stop
	}
}

actor KnightmanChargeFX {
	PROJECTILE
	Radius 8
	Height 8
	scale 2.5
	damage (0)
	+NOCLIP
	+RIPPER
	+DONTSPLASH
	//+NOTARGETSWITCH
	+SKYEXPLODE
	speed 0
	States {
	Spawn:
		KNIA I 0
		KNIA I 1 A_SpawnItemEx("KnightmanChargeFXDamager", 0, 0, -32, momx, momy, momz, 0, 8)
	Death:
		KNIA I 0
		stop
	}
}

Actor KnightmanChargeFXDamager {
	PROJECTILE
	damagetype "KnightBonk"
	obituary "$OB_KNIGHTCRUSHY"
	+RIPPER
	+DONTBLAST
	+THRUGHOST
	Damage (12)
	Radius 12
	Height 12
	States {
		Spawn:
			TNT1 A 2
		Stop
	}
}

actor CastleCrushProtect : PowerProtection
{
Powerup.Duration 15
DamageFactor "KnightM_CastleCrush", 0.12
}

actor KnightBonkProtect : PowerProtection
{
Powerup.Duration 5
DamageFactor "KnightBonk", 0.0
}

actor KnightReturnProtect : PowerProtection
{
Powerup.Duration 15
DamageFactor "KnightReturn", 0.0
}

Actor KnightShieldX : BasicHelper {
    +NOTIMEFREEZE
    States {
        Spawn:
            TNT1 A 0
            TNT1 A 0 A_SpawnItemEx("KnightShieldHitbox", 0, -24, 0, velx, vely, velz, 0, 8)
            TNT1 A 0 A_SpawnItemEx("KnightShieldHitbox", 0, -16, 0, velx, vely, velz, 0, 8)
            TNT1 A 0 A_SpawnItemEx("KnightShieldHitbox", 0, -8, 0, velx, vely, velz, 0, 8)
            TNT1 A 0 A_SpawnItemEx("KnightShieldHitbox", 0, 0, 0, velx, vely, velz, 0, 8)
            TNT1 A 0 A_SpawnItemEx("KnightShieldHitbox", 0, 8, 0, velx, vely, velz, 0, 8)
            TNT1 A 0 A_SpawnItemEx("KnightShieldHitbox", -8, 8, 0, velx, vely, velz, 0, 8)
            TNT1 A 0 A_SpawnItemEx("KnightShieldHitbox", -16, 8, 0, velx, vely, velz, 0, 8)
            TNT1 A 5
        Stop
    }
}

Actor NewProtoShieldHitbox {
	+MISSILE
	Speed 0
	+DONTSPLASH
	Damage 0
	Height 42
	Radius 5
	Health 9999
	Scale 2.5
	Damagefactor "ProtoBuster", 1.0
	+SHOOTABLE
	+NOBLOOD
	-SOLID
	+NOTIMEFREEZE
	+NOTARGETSWITCH
	+NOGRAVITY
	+HEXENBOUNCE
	+BOUNCEONACTORS
	Painchance 256
	Bloodtype ""
	+DONTRIP
	+GHOST
	+NORADIUSDMG
	+DONTBLAST
	+DONTDRAIN
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 2
		Stop
		Death:
			TNT1 A 0
			TNT1 A 1
		Stop
		Pain:
			TNT1 A 0
			TNT1 A 0 A_SpawnItemEx("ProtoShieldDeahthFX")
			TNT1 A 1 A_PlaySound("item/protoreflect")
		Stop
	}
}

Actor KnightShieldHitbox : BasicShieldHitbox {
states
{
Pain:
TNT1 A 0 
TNT1 A 0 A_SpawnItemEx("KnightShieldDeathFX")
TNT1 A 0 A_PlaySound("item/protoreflect")
goto Spawn
}
}

Actor KnightShieldHitbox_1 : KnightShieldHitbox {
	Meleerange 28
	Accuracy -9
	Mass 8
    States {
        Spawn:
            TNT1 A 0
            TNT1 AA 1 A_Warp(AAPTR_TARGET, Meleerange, Accuracy, Mass, 0, WARPF_NOCHECKPOSITION)
            TNT1 A 0 A_JumpIfInTargetInventory("StopShield", 1, "UnsetShootable")
            TNT1 A 0 A_JumpIf(!ACS_NamedExecuteWithResult("CCBM Knight Shield Check"), "Death")
            TNT1 A 0 A_ChangeFlag("SHOOTABLE", 1)
        Loop
        UnsetShootable:
            TNT1 A 0 A_ChangeFlag("SHOOTABLE", 0)
        Goto Spawn
        Pain:
            TNT1 A 0
            TNT1 A 0 A_SpawnItemEx("KnightShieldDeathFX")
            TNT1 A 1 A_PlaySound("item/protoreflect")
        Goto Spawn
    }
}
Actor KnightShieldHitbox_2 : KnightShieldHitbox_1 {
    Accuracy 0
}
Actor KnightShieldHitbox_3 : KnightShieldHitbox_1 {
    Accuracy 9
}
Actor KnightShieldHitbox_4 : KnightShieldHitbox_1 {
    Accuracy 18
}
Actor KnightShieldHitbox_5 : KnightShieldHitbox_1 {
    Accuracy 27
}
Actor KnightShieldHitbox_6 : KnightShieldHitbox_1 {
	Meleerange 20
    Accuracy 27
}
Actor KnightShieldHitbox_7 : KnightShieldHitbox_1 {
    Meleerange 12
	Accuracy 27
}

Actor KnightShieldDeathFX : BasicClientSide {
	Alpha 0.9
	Renderstyle add
	States {
		Spawn:
			KNIA L 0 A_SetScale(scaleX + 0.1, 2.5)
			KNIA L 1 A_FadeOut(0.05)
		Loop
	}
}

Actor KnightRush : BasicExplosion {
	Damagetype "KnightM_Push"
	Obituary "$OB_KNIGHTRUSH"
	States {
		Spawn:
			TNT1 A 0
			TNT1 A 1 A_Explode(5, 120, 0, 0, 16)
		Stop
	}
}

Actor KnightRushX : KnightRush {
	Obituary "$OB_KNIGHTRUSHX"
}

Actor KnightmanMain_CI : TeamColor_CI {
	States {
		FireX:
			TNT1 A 0 A_FireCustomMissile("KnightmanCrusher", 0, -8, 0, 0)
		Goto Done
		FireB:
			TNT1 A 0 A_FireCustomMissile("KnightmanCrusherB", 0, -8, 0, 0)
		Goto Done
		FireR:
			TNT1 A 0 A_FireCustomMissile("KnightmanCrusherR", 0, -8, 0, 0)
		Goto Done
		FireO:
			TNT1 A 0 A_FireCustomMissile("KnightmanCrusherO", 0, -8, 0, 0)
		Goto Done
		FireP:
			TNT1 A 0 A_FireCustomMissile("KnightmanCrusherP", 0, -8, 0, 0)
		Goto Done
	}
}

Actor KnightmanMain2_CI : TeamColor_CI {
	States {
		FireX:
			TNT1 A 0 A_FireCustomMissile("KnightmanCrusherNoRip", 0, -8, 0, 0)
		Goto Done
		FireB:
			TNT1 A 0 A_FireCustomMissile("KnightmanCrusherNoRipB", 0, -8, 0, 0)
		Goto Done
		FireR:
			TNT1 A 0 A_FireCustomMissile("KnightmanCrusherNoRipR", 0, -8, 0, 0)
		Goto Done
		FireO:
			TNT1 A 0 A_FireCustomMissile("KnightmanCrusherNoRipO", 0, -8, 0, 0)
		Goto Done
		FireP:
			TNT1 A 0 A_FireCustomMissile("KnightmanCrusherNoRipP", 0, -8, 0, 0)
		Goto Done
	}
}

actor CastleCrushShock : PowerSpeed
{
powerup.duration 15
Speed 0.0
}