// --------------------------------------------------------------------------
//
// Soul Reaver
//
// --------------------------------------------------------------------------

ACTOR EriSoulReaver : HellWeapon replaces BFG9000
{
	Game Doom
	Scale 0.8
	Weapon.SelectionOrder 2800
	Weapon.AmmoUse 10
	Weapon.AmmoGive 10
	Weapon.AmmoType "SoulAmmo"
	Weapon.SisterWeapon "EriSoulReaverPowered"
	Inventory.PickupMessage "$GOTSOULREAVER"
	Tag "$TAG_SOULREAVER"
	Health 3
	States
	{
	Ready:
		HSRG A 1 A_WeaponReady
		Loop
	Deselect:
		HSRG A 0 A_StopSound(CHAN_WEAPON)
		HSRG A 1 A_Lower
		Wait
	Select:
		HSRG A 1 A_Raise
		Loop
	Fire:
		HSRG C 3 Bright A_PlaySound("weapons/reavercharge", CHAN_BODY)
		HSRG DEF 3 Bright
		HSRF AB 3 Bright
		HSRF C 3 Bright A_PlaySound("weapons/reaverloop", CHAN_WEAPON, 1.0, 1)
		HSRF DEFGH 3 Bright
		TNT1 A 0 A_GunFlash("Overlay")
	Hold:
		TNT1 A 1
		TNT1 A 0 A_Refire
		TNT1 A 0 A_Jump(256, "Release")
	Release:
		HSRF I 0 Bright A_GunFlash("Flash")
		HSRF I 0 Bright A_SetBlend("FF FF FF", 0.66, 15)
		HSRF I 0 Bright A_PlaySound("weapons/reaverfire", CHAN_WEAPON)
		HSRF I 4 Bright A_FireCustomMissile("SoulReaverShot", 0, 1)
		HSRF J 4 Bright
		HSRG B 8
		Goto Ready
	Overlay:
		HSRF EFGH 3 Bright
		Loop
	Flash:
		TNT1 A 2 Bright A_Light2
		TNT1 A 2 Bright A_Light1
		Goto LightDone
	Spawn:
		HESR A -1
		Stop
	}
}
ACTOR EriSoulReaverPowered : EriSoulReaver
{
	Weapon.AmmoUse 20
	Weapon.SisterWeapon "EriSoulReaver"
	+WEAPON.POWERED_UP
	States
	{
	Release:
		HSRF I 0 Bright A_GunFlash("Flash")
		HSRF I 0 Bright A_SetBlend("FF FF FF", 1.0, 25)
		HSRF I 0 Bright A_PlaySound("weapons/reaverpow", CHAN_WEAPON)
		HSRF I 4 Bright A_FireCustomMissile("SuperSoulShot", 0, 1)
		HSRF J 4 Bright
		HSRG B 8
		Goto Ready
	}
}
ACTOR EriSoulReaverMana : EriSoulReaver replaces MWeapBloodscourge
{
	Weapon.AmmoGive1 25
	Weapon.AmmoGive2 25
	Weapon.AmmoUse1 10
	Weapon.AmmoUse2 10
	Weapon.AmmoType1 "Mana1"
	Weapon.AmmoType2 "Mana2"
	Weapon.SisterWeapon "EriSoulReaverManaPowered"
	+WEAPON.PRIMARY_USES_BOTH
}
ACTOR EriSoulReaverManaPowered : EriSoulReaverPowered
{
	Weapon.AmmoUse1 20
	Weapon.AmmoUse2 20
	Weapon.AmmoType1 "Mana1"
	Weapon.AmmoType2 "Mana2"
	Weapon.SisterWeapon "EriSoulReaverMana"
	+WEAPON.PRIMARY_USES_BOTH
	+WEAPON.POWERED_UP	
}
ACTOR EriSoulReaverManaGiver : WeaponGiver
{
	Inventory.PickupMessage "$GOTSOULREAVER"
	DropItem "EriSoulReaverMana"
	States
	{
	Spawn:
		HESR A -1
		Stop
	}
}
ACTOR EriSoulReaverManaPiece : WeaponPiece
{
	Inventory.PickupSound "misc/w_pkup"
	Inventory.PickupMessage "$GOTSOULREAVERPIECE"
	WeaponPiece.Weapon EriSoulReaverMana
}
ACTOR EriSoulReaverManaPiece1 : EriSoulReaverManaPiece replaces CWeaponPiece1
{
	WeaponPiece.Number 1
	States
	{
	Spawn:
		HESR B -1 Bright
		Stop
	}
}
ACTOR EriSoulReaverManaPiece2 : EriSoulReaverManaPiece replaces CWeaponPiece2
{
	WeaponPiece.Number 2
	States
	{
	Spawn:
		HESR C -1 Bright
		Stop
	}
}
ACTOR EriSoulReaverManaPiece3 : EriSoulReaverManaPiece replaces CWeaponPiece3
{
	WeaponPiece.Number 3
	States
	{
	Spawn:
		HESR D -1 Bright
		Stop
	}
}
ACTOR EriSoulReaverHexenDrop : EriSoulReaverManaGiver replaces WraithvergeDrop {}

ACTOR SoulReaverShot
{
	Radius 11
	Height 16
	Speed 30
	Damage 100
	Projectile
	Scale 0.66
	Alpha 1.0
	RenderStyle Add
	SeeSound "weapons/reaverhit"
	DeathSound "weapons/reaverhit"
	Obituary "$OB_MPSOULREAVER"
	Decal "Scorch"
	DamageType "Soul"
	States
	{
	Spawn:
		SPIR P 1 Bright A_SpawnItemEx("SoulReaverTrail", frandom(0.5, -0.5), 0, frandom(0.5, -0.5), 0, 0, 0, 0, SXF_CLIENTSIDE)
		Loop
	Death:
		REAX AB 3 Bright
		REAX C 0 Bright A_SpawnItemEx("SoulSpirit",0,0,0,12,0,0, 0   + random(-5,5),SXF_TRANSFERPOINTERS,0)
		REAX C 0 Bright A_SpawnItemEx("SoulSpirit",0,0,0,12,0,0, 72  + random(-5,5),SXF_TRANSFERPOINTERS,0)
		REAX C 0 Bright A_SpawnItemEx("SoulSpirit",0,0,0,12,0,0, 144 + random(-5,5),SXF_TRANSFERPOINTERS,0)
		REAX C 0 Bright A_SpawnItemEx("SoulSpirit",0,0,0,12,0,0, 216 + random(-5,5),SXF_TRANSFERPOINTERS,0)
		REAX C 3 Bright A_SpawnItemEx("SoulSpirit",0,0,0,12,0,0, 288 + random(-5,5),SXF_TRANSFERPOINTERS,0)
		REAX DEFGHI 3 Bright
		Stop
	}
}

ACTOR SoulReaverTrail : EriTrail
{
	Scale 0.15
	Alpha 1.0
	Renderstyle Add
	States
	{
	Spawn:
		REAX KKKJ 1 Bright
		REAX JJ 1 Bright A_FadeOut(0.25)
		Loop
	}
}

ACTOR SoulSpirit : SoulReaverShot
{
	Radius 8
	Height 4
	Speed 12
	Damage 2
	+RIPPER
	+SEEKERMISSILE
	BounceType "Hexen"
	WallBounceFactor 1.0
	BounceFactor 1.0
	Scale 1.0
	SeeSound "weapons/reaversoulout"
	Decal "PlasmaScorchLower"
	DamageType "SoulRipper"
	var int user_seektics;
	States
	{
	Spawn:
		REAS A 0 Bright
		REAS A 0 Bright A_SetUserVar("user_seektics", 105)
	Seek:
		REAS A 0 Bright A_JumpIf(user_seektics <= 1, "Debounce")
		REAS A 0 Bright A_SetUserVar("user_seektics", user_seektics - 1)
		REAS A 0 Bright A_SeekerMissile(17, 17, SMF_LOOK | SMF_PRECISE)
		REAS A 1 Bright A_SpawnItemEx("SoulReaverTrail", frandom(0.5, -0.5), 0, frandom(0.5, -0.5), 0, 0, 0, 0, SXF_CLIENTSIDE)
		Loop
	Debounce:
		REAS A 0 Bright A_ChangeFlag("BOUNCEONWALLS", 0)
		REAS A 0 Bright A_ChangeFlag("BOUNCEONCEILINGS", 0)
		REAS A 0 Bright A_ChangeFlag("BOUNCEONFLOORS", 0)
		REAS A 1 Bright A_SpawnItemEx("SoulReaverTrail", frandom(0.5, -0.5), 0, frandom(0.5, -0.5), 0, 0, 0, 0, SXF_CLIENTSIDE)
		Wait
	Death:
		REAX A 3 Bright A_SetScale(0.5)
		REAX B 3 Bright
		REAX C 3 Bright
		REAX DEFGHI 3 Bright
		Stop
	}	
}

ACTOR SuperSoulShot : SoulReaverShot
{
	+RIPPER
	Speed 10
	Damage 5
	Obituary "$OB_MPSOULREAVERPOW"
	DamageType "SoulRipper"
	Scale 1.0
	States
	{
	Spawn:
		REAB A 0 Bright 
		REAB A 0 Bright A_PlaySound("weapons/reaverloop2", CHAN_BODY, 1.0, 1)
	Fly:
		REAB ABCDE 3 Bright A_SpawnItemEx("SuperSoulSpirit", 0, 0, 0, 12, 0, 0, random(1, 360), SXF_TRANSFERPOINTERS, 0)
		Loop
	Death:
		REAB F 3 Bright
		REAX BCDEFGHI 3 Bright
		Stop
	}
}

ACTOR SuperSoulSpirit : SoulSpirit
{
	Damage 1
	Obituary "$OB_MPSOULREAVERPOW"
	SeeSound "weapons/reaversoulfly"
	BounceCount 2
}