ACTOR CrowLauncher
{
  Radius 1
  Height 1
  Projectile
  Speed 25
  +NOINTERACTION
  +NOTONAUTOMAP
  States
  {
  Spawn:
	TNT1 A 0
  	TNT1 A random(1,4) A_SpawnItemEx("CrowProjectile",random(20,-20),random(20,-20),random(20,-20),velx+random(2,-2),vely+random(2,-2),velz+random(2,-2),0,SXF_ABSOLUTEMOMENTUM|SXF_TRANSFERPITCH|SXF_TRANSFERPOINTERS,0)
	Stop
  }
}

ACTOR CrowLauncher2
{
  Radius 1
  Height 1
  Projectile
  Speed 25
  +NOINTERACTION
  +NOTONAUTOMAP
  States
  {
  Spawn:
	TNT1 A 0
  	TNT1 A random(1,4) A_SpawnItemEx("CrowProjectile2",random(20,-20),random(20,-20),random(20,-20),velx+random(2,-2),vely+random(2,-2),velz+random(2,-2),0,SXF_ABSOLUTEMOMENTUM|SXF_TRANSFERPITCH|SXF_TRANSFERPOINTERS,0)
	Stop
  }
}

actor CrowProjectile
{
  Radius 10
  Height 12
  Speed 40
  Damage 0
  Projectile
  +NOGRAVITY
  +DONTSPLASH
  +EXPLODEONWATER
  +SEEKERMISSILE
  +SCREENSEEKER
  +DONTSEEKINVISIBLE
  +RIPPER
  +FORCERADIUSDMG
  +DONTREFLECT
  ReactionTime 9
  /*BounceType Hexen
  BounceFactor 1
  WallBounceFactor 1*/
  DamageType Crow
  ProjectileKickBack 0
  SeeSound "Crows/Fly"
  Obituary "%o was eaten alive by %k's flock of crows."
  Scale 1
  States
  {
  Spawn:
    CROW AA 0
  Looplet:
    TNT1 A 0 A_Jump(128,2)
    TNT1 A 0 A_Countdown
    TNT1 A 0 A_SeekerMissile(50,60,SMF_LOOK|SMF_PRECISE|SMF_CURSPEED,128,4)

    TNT1 A 0 //A_RadiusGive("CrowItem",64,RGF_NOMASTER|RGF_MONSTERS,1)
	TNT1 A 0 A_ChangeVelocity(frandom(-0.4, 0.4), frandom(-0.4, 0.4), frandom(-0.4, 0.4), 0)
    TNT1 A 0 A_SpawnItemEx("CrowFeather",random(10,-10),random(10,-10),random(10,-10),random(2.0,0.5),random(2.0,0.5),random(2.5,0.5),random(135,225),SXF_CLIENTSIDE,32) 
	TNT1 A 0 A_SpawnItemEx("CrowTrailA")
	CROW A 1 A_Explode(7,32,0,0,32)
    TNT1 A 0 //A_RadiusGive("CrowItem",64,RGF_NOMASTER|RGF_MONSTERS,1)
	TNT1 A 0 A_ChangeVelocity(frandom(-0.4, 0.4), frandom(-0.4, 0.4), frandom(-0.4, 0.4), 0)
    TNT1 A 0 A_SpawnItemEx("CrowFeather",random(10,-10),random(10,-10),random(10,-10),random(2.0,0.5),random(2.0,0.5),random(2.5,0.5),random(135,225),SXF_CLIENTSIDE,32) 
	TNT1 A 0 A_SpawnItemEx("CrowTrailA")
	CROW A 1 A_Explode(7,32,0,0,32)
	
    TNT1 A 0 //A_RadiusGive("CrowItem",64,RGF_NOMASTER|RGF_MONSTERS,1)
	TNT1 A 0 A_ChangeVelocity(frandom(-0.4, 0.4), frandom(-0.4, 0.4), frandom(-0.4, 0.4), 0)
    TNT1 A 0 A_SpawnItemEx("CrowFeather",random(10,-10),random(10,-10),random(10,-10),random(2.0,0.5),random(2.0,0.5),random(2.5,0.5),random(135,225),SXF_CLIENTSIDE,32) 
	TNT1 A 0 A_SpawnItemEx("CrowTrailB")
	CROW B 1 A_Explode(7,32,0,0,32)
    TNT1 A 0 //A_RadiusGive("CrowItem",64,RGF_NOMASTER|RGF_MONSTERS,1)
	TNT1 A 0 A_ChangeVelocity(frandom(-0.4, 0.4), frandom(-0.4, 0.4), frandom(-0.4, 0.4), 0)
    TNT1 A 0 A_SpawnItemEx("CrowFeather",random(10,-10),random(10,-10),random(10,-10),random(2.0,0.5),random(2.0,0.5),random(2.5,0.5),random(135,225),SXF_CLIENTSIDE,32) 
	TNT1 A 0 A_SpawnItemEx("CrowTrailB")
	CROW B 1 A_Explode(7,32,0,0,32)
	
   TNT1 A 0 A_SeekerMissile(80,90,SMF_LOOK|SMF_PRECISE|SMF_CURSPEED,128,4)
	
    TNT1 A 0 //A_RadiusGive("CrowItem",64,RGF_NOMASTER|RGF_MONSTERS,1)
	TNT1 A 0 A_ChangeVelocity(frandom(-0.4, 0.4), frandom(-0.4, 0.4), frandom(-0.4, 0.4), 0)
    TNT1 A 0 A_SpawnItemEx("CrowFeather",random(10,-10),random(10,-10),random(10,-10),random(2.0,0.5),random(2.0,0.5),random(2.5,0.5),random(135,225),SXF_CLIENTSIDE,32) 
	CROW C 1 A_Explode(7,32,0,0,32)
    TNT1 A 0 A_SpawnItemEx("CrowTrailC")
	TNT1 A 0 //A_RadiusGive("CrowItem",64,RGF_NOMASTER|RGF_MONSTERS,1)
	TNT1 A 0 A_ChangeVelocity(frandom(-0.4, 0.4), frandom(-0.4, 0.4), frandom(-0.4, 0.4), 0)
    TNT1 A 0 A_SpawnItemEx("CrowFeather",random(10,-10),random(10,-10),random(10,-10),random(2.0,0.5),random(2.0,0.5),random(2.5,0.5),random(135,225),SXF_CLIENTSIDE,32) 
	TNT1 A 0 A_SpawnItemEx("CrowTrailC")
	CROW C 1 A_Explode(7,32,0,0,32)
	
    TNT1 A 0 //A_RadiusGive("CrowItem",64,RGF_NOMASTER|RGF_MONSTERS,1)
	TNT1 A 0 A_ChangeVelocity(frandom(-0.4, 0.4), frandom(-0.4, 0.4), frandom(-0.4, 0.4), 0)
    TNT1 A 0 A_SpawnItemEx("CrowFeather",random(10,-10),random(10,-10),random(10,-10),random(2.0,0.5),random(2.0,0.5),random(2.5,0.5),random(135,225),SXF_CLIENTSIDE,32) 
	TNT1 A 0 A_SpawnItemEx("CrowTrailD")
	CROW D 1 A_Explode(7,32,0,0,32)
    TNT1 A 0 //A_RadiusGive("CrowItem",64,RGF_NOMASTER|RGF_MONSTERS,1)
	TNT1 A 0 A_ChangeVelocity(frandom(-0.4, 0.4), frandom(-0.4, 0.4), frandom(-0.4, 0.4), 0)
    TNT1 A 0 A_SpawnItemEx("CrowFeather",random(10,-10),random(10,-10),random(10,-10),random(2.0,0.5),random(2.0,0.5),random(2.5,0.5),random(135,225),SXF_CLIENTSIDE,32) 
	TNT1 A 0 A_SpawnItemEx("CrowTrailD")
	CROW D 1 A_Explode(7,32,0,0,32)
    Loop
  Death:
    TNT1 A 0 A_PlaySound("Crow/Dissapear",4,0.8)
    TNT1 A 0 A_AlertMonsters
    TNT1 A 0 A_SpawnItemEx("CrowDissapear")
    TNT1 A 15
    stop
  }
}

ACTOR CrowFeather
{
	+NOINTERACTION
	-NOGRAVITY
	+NOTONAUTOMAP
	Gravity 0.35
	States
	{
	Spawn:
		TNT1 AA 0 A_Jump(256,"SpriteA","SpriteB","SpriteC","SpriteD","SpriteE")
	SpriteA:
		CFTR A 0 A_Jump(256,"Wolololo")
	SpriteB:
		CFTR B 0 A_Jump(256,"Wolololo")
	SpriteC:
		CFTR C 0 A_Jump(256,"Wolololo")
	SpriteD:
		CFTR D 0 A_Jump(256,"Wolololo")
	SpriteE:
		CFTR E 0 A_Jump(256,"Wolololo")
	Wolololo:
		"####" "#" 3 A_Jump(182,"Fade")
		Loop
	Fade:
		"####" "#" 1 A_FadeOut(0.1)
		Loop
		}
}

ACTOR CrowTrailA
{
	+NOINTERACTION
	+NOGRAVITY
	Alpha 0.8
	States
	{
	Spawn:
		CROW A 1 A_FadeOut(0.2)
		Loop
	}
}

ACTOR CrowTrailB : CrowTrailA
{
	States
	{
	Spawn:
		CROW B 1 A_FadeOut(0.2)
		Loop
	}
}

ACTOR CrowTrailC : CrowTrailA
{
	States
	{
	Spawn:
		CROW C 1 A_FadeOut(0.2)
		Loop
	}
}

ACTOR CrowTrailD : CrowTrailA
{
	States
	{
	Spawn:
		CROW D 1 A_FadeOut(0.2)
		Loop
	}
}

ACTOR CrowDissapear
{
	+NOINTERACTION
	States
	{
	Spawn:
	TNT1 A 0
	TNT1 A 0 A_PlaySound("Crows/Dissipate",5,0.6)
	TNT1 A 0 A_SpawnItemEx("CrowBlackflash",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	TNT1 A 0 A_SpawnItemEx("CrowFeatherblast",0,0,0,0,0,0,0,SXF_CLIENTSIDE)
	Stop
	}
}

ACTOR CrowBlackflash
{
	+NOINTERACTION
	+NOTONAUTOMAP
	Renderstyle Translucent
	Scale 0.2
	Alpha 0.99
	States
	{
	Spawn:
	CRWF A 0
	CRWF A 0 A_SetScale(ScaleX-frandom(0.02,0.015))
	CRWF A 0 A_JumpIf(ScaleX <= 0, "NULL")
	CRWF A 1 Bright A_FadeOut(0.02)
	Loop
	}
}

ACTOR CrowFeatherblast
{
	+NOINTERACTION
	+NOGRAVITY
	+NOTONAUTOMAP
	Var Int User_CrowVar1;
	Var Int User_CrowVar2;
	States
	{
	Spawn:
		"####" "#" 0
	Wolololo:
		"####" "#" 0 A_SetUserVar("User_CrowVar1", 40)
	Looplo1:
		"####" "#" 0 A_SetUserVar("User_CrowVar1", User_CrowVar1 - 1)
		"####" "#" 0 A_JumpIf(User_CrowVar1 <= 0, "PhaseTwo")
		"####" "#" 0 A_SpawnItemEx("CrowFeather",random(15,-15),random(15,-15),random(15,-15),random(6,1),random(6,1),random(random(6,1),random(-6,-1)),random(0,359),SXF_CLIENTSIDE,20)
		Loop
	PhaseTwo:
		"####" "#" 0 A_SetUserVar("User_CrowVar2", 10)
	Looplo2:
		"####" "#" 0 A_SetUserVar("User_CrowVar2", User_CrowVar2 - 1)
		"####" "#" 0 A_JumpIf(User_CrowVar2 <= 0, "NULL")
		"####" "#" 1 A_SpawnItemEx("CrowFeather",random(25,-25),random(25,-25),random(25,-25),random(2.0,1.5),random(2.0,1.5),random(1.0,-1.0),random(0,359),SXF_CLIENTSIDE,20)
		Loop
		}
}

ACTOR CrowItem : CustomInventory
{
	Inventory.Amount 0
	+INVENTORY.ALWAYSPICKUP
	+INVENTORY.AUTOACTIVATE
	States
	{
	Spawn:
	Use:
		TNT1 A 0 A_JumpIfInventory("CrowsAlreadyBeenThere",1,"NopetyNope")
		TNT1 A 0 A_ChangeFlag("Friendly",1)
		TNT1 A 0 A_GiveInventory("CrowsAlreadyBeenThere",1)
		Stop
	NopetyNope:
		TNT1 A 0
		Stop
	}
}

ACTOR CrowsAlreadyBeenThere : Inventory { Inventory.MaxAmount 1 }

ACTOR FlockOfCrows
{
  obituary "%o eaten alive by flock of crows."
  radius 15
  height 42
  mass 9999999
  speed 0
  Renderstyle Add
  MONSTER
  +FLOORCLIP
  +NOBLOOD
  +MISSILEMORE
  +MISSILEEVENMORE
  +LOOKALLAROUND
  +NEVERRESPAWN
  +STANDSTILL
  +NOTARGET
  +DONTBLAST
  +NOFEAR
  +DONTMORPH
  +INFLOAT
  +NOGRAVITY
  +NOCLIP
  +INVULNERABLE
  +FLOATBOB
  +DONTREFLECT
  var int User_Lifespan;
  states
  {
  Spawn:
	TNT1 AA 0 A_ChangeFlag("Friendly",1)
	TNT1 A 0 A_SetUserVar("User_Lifespan",525)
    YAE4 A 0 A_PlaySound("Crows/Flock",5,0.3,1)
	TNT1 AAAAAAAA 0 A_SpawnItemEx("CrowMidair",random(60,-60),random(60,-60),random(15,50),0,0,0,random(0,360),SXF_SETMASTER,0)
  SpawnLoop:
	TNT1 A 0 A_SetUserVar("User_Lifespan", User_Lifespan - 1)
    TNT1 A 1 A_LookEx(LOF_NOSOUNDCHECK,0,192,0,0,"Launch")
	TNT1 A 0 A_JumpIf(User_Lifespan <= 0, "Dissipate")
    loop
  Launch:
    TNT1 A 0 A_FaceTarget
	TNT1 A 0 A_KillChildren
	TNT1 A 0 A_StopSound(5)
    TNT1 AAAAAAAA 2 A_CustomMissile("CrowProjectile2",random(5.0,10.0),random(-15,15))
    stop
  Dissipate:
	TNT1 A 0 A_StopSound(5)
    TNT1 A 0 A_KillChildren
	TNT1 A 0 A_SpawnItemEx("CrowDissapear")
	stop
  }
}

actor CrowProjectile2 : CrowProjectile
{
  -SCREENSEEKER
  DamageType Crow2
  States
  {
  Spawn:
    CROW AA 0
  Looplet:
    TNT1 A 0 A_Jump(128,2)
    TNT1 A 0 A_Countdown
    TNT1 A 0 A_SeekerMissile(50,60,SMF_LOOK|SMF_PRECISE|SMF_CURSPEED,128,4)

	TNT1 A 0 A_ChangeVelocity(frandom(-0.4, 0.4), frandom(-0.4, 0.4), frandom(-0.4, 0.4), 0)
    TNT1 A 0 A_SpawnItemEx("CrowFeather",random(10,-10),random(10,-10),random(10,-10),random(2.0,0.5),random(2.0,0.5),random(2.5,0.5),random(135,225),SXF_CLIENTSIDE,32) 
	TNT1 A 0 A_SpawnItemEx("CrowTrailA")
	CROW A 1 A_Explode(5,32,0,0,32)
	TNT1 A 0 A_ChangeVelocity(frandom(-0.4, 0.4), frandom(-0.4, 0.4), frandom(-0.4, 0.4), 0)
    TNT1 A 0 A_SpawnItemEx("CrowFeather",random(10,-10),random(10,-10),random(10,-10),random(2.0,0.5),random(2.0,0.5),random(2.5,0.5),random(135,225),SXF_CLIENTSIDE,32) 
	TNT1 A 0 A_SpawnItemEx("CrowTrailA")
	CROW A 1 A_Explode(5,32,0,0,32)
	
	TNT1 A 0 A_ChangeVelocity(frandom(-0.4, 0.4), frandom(-0.4, 0.4), frandom(-0.4, 0.4), 0)
    TNT1 A 0 A_SpawnItemEx("CrowFeather",random(10,-10),random(10,-10),random(10,-10),random(2.0,0.5),random(2.0,0.5),random(2.5,0.5),random(135,225),SXF_CLIENTSIDE,32) 
	TNT1 A 0 A_SpawnItemEx("CrowTrailB")
	CROW B 1 A_Explode(5,32,0,0,32)
	TNT1 A 0 A_ChangeVelocity(frandom(-0.4, 0.4), frandom(-0.4, 0.4), frandom(-0.4, 0.4), 0)
    TNT1 A 0 A_SpawnItemEx("CrowFeather",random(10,-10),random(10,-10),random(10,-10),random(2.0,0.5),random(2.0,0.5),random(2.5,0.5),random(135,225),SXF_CLIENTSIDE,32) 
	TNT1 A 0 A_SpawnItemEx("CrowTrailB")
	CROW B 1 A_Explode(5,32,0,0,32)
	
	TNT1 A 0 A_SeekerMissile(80,90,SMF_LOOK|SMF_PRECISE|SMF_CURSPEED,128,4)
	
	TNT1 A 0 A_ChangeVelocity(frandom(-0.4, 0.4), frandom(-0.4, 0.4), frandom(-0.4, 0.4), 0)
    TNT1 A 0 A_SpawnItemEx("CrowFeather",random(10,-10),random(10,-10),random(10,-10),random(2.0,0.5),random(2.0,0.5),random(2.5,0.5),random(135,225),SXF_CLIENTSIDE,32) 
	CROW C 1 A_Explode(5,32,0,0,32)
    TNT1 A 0 A_SpawnItemEx("CrowTrailC")
	TNT1 A 0 A_ChangeVelocity(frandom(-0.4, 0.4), frandom(-0.4, 0.4), frandom(-0.4, 0.4), 0)
    TNT1 A 0 A_SpawnItemEx("CrowFeather",random(10,-10),random(10,-10),random(10,-10),random(2.0,0.5),random(2.0,0.5),random(2.5,0.5),random(135,225),SXF_CLIENTSIDE,32) 
	TNT1 A 0 A_SpawnItemEx("CrowTrailC")
	CROW C 1 A_Explode(5,32,0,0,32)
	
	TNT1 A 0 A_ChangeVelocity(frandom(-0.4, 0.4), frandom(-0.4, 0.4), frandom(-0.4, 0.4), 0)
    TNT1 A 0 A_SpawnItemEx("CrowFeather",random(10,-10),random(10,-10),random(10,-10),random(2.0,0.5),random(2.0,0.5),random(2.5,0.5),random(135,225),SXF_CLIENTSIDE,32) 
	TNT1 A 0 A_SpawnItemEx("CrowTrailD")
	CROW D 1 A_Explode(5,32,0,0,32)
	TNT1 A 0 A_ChangeVelocity(frandom(-0.4, 0.4), frandom(-0.4, 0.4), frandom(-0.4, 0.4), 0)
    TNT1 A 0 A_SpawnItemEx("CrowFeather",random(10,-10),random(10,-10),random(10,-10),random(2.0,0.5),random(2.0,0.5),random(2.5,0.5),random(135,225),SXF_CLIENTSIDE,32) 
	TNT1 A 0 A_SpawnItemEx("CrowTrailD")
	CROW D 1 A_Explode(5,32,0,0,32)
    Loop
  Death:
    TNT1 A 0 A_PlaySound("Crow/Dissapear",4,0.8)
    TNT1 A 0 A_AlertMonsters
    TNT1 A 0 A_SpawnItemEx("CrowDissapear")
    TNT1 A 15
    stop
  }
}

actor CrowMidair
{
  Radius 1
  Height 1
  +NOINTERACTION
  +NOGRAVITY
  +FLOATBOB
  Monster
  Scale 1
  States
  {
  Spawn:
    CROW AA 0
  Looplet:
	CROW AA 1 A_SpawnItemEx("CrowTrailA")
	CROW BB 1 A_SpawnItemEx("CrowTrailB")
	CROW CC 1 A_SpawnItemEx("CrowTrailC")
	CROW DD 1 A_SpawnItemEx("CrowTrailD")
    Loop
  Death:
    TNT1 A 0 A_PlaySound("Crow/Dissapear",4,0.8)
    TNT1 A 0 A_AlertMonsters
    TNT1 A 0 A_SpawnItemEx("CrowDissapear")
    TNT1 A 15
    stop
  }
}
