actor AlucardSwordWep_NormalBar : NormalBar { args 218, 5 }

actor AlucardSwordWep : BaseMM8BDMWep
{
	Weapon.AmmoUse 3
	Weapon.AmmoGive 33
	weapon.ammotype "AlucardSwordAmmo"

	Weapon.SlotNumber 4

	Inventory.Pickupmessage "$PU_ALUCARDSWORD"
	Obituary "$OB_ALUCARDSWORD"
	Tag "$TAG_ALUCARDSWORD"

	inventory.icon "ALUCARDI"

	States
	{
		SpawnLoop:
			ALUC "[" 1
			loop

		Ready:
			ALUC A 0 ACS_NamedExecuteWithResult("core_weaponcolor", CLR_ALUCARDSWORD)
			ALUC A 1 A_WeaponReady
			goto Ready+1

		Select:
			ALUC A 0
			goto SelectSwap
		Deselect:
			ALUC A 0
			goto DeselectSwap
		Fire:
		Hold:
			ALUC A 0 A_JumpIfNoAmmo("NoAmmo")
			ALUC A 0 A_JumpIf(CallACS("AlucardInput") & 32, "Slice")
			ALUC A 1 A_JumpIfInventory("AlucardSwordAmmo",6,"Hold0")
			Goto Slice
		Hold0:
			ALUC A 0 A_JumpIfInventory("WeaponCharge",20,"Hold1")
			ALUC A 1 A_GiveInventory("WeaponCharge",2)
			ALUC A 0 A_Refire
			Goto Slice
		Hold1:
			ALUC A 0 A_JumpIfInventory("WeaponCharge",23,"Hold2")
			ALUC L 1 A_GiveInventory("WeaponCharge",1)
			ALUC L 1 A_Refire("Hold1")
			Goto NormalSlice
		Hold2:
			ALUC A 0 A_JumpIfInventory("WeaponCharge",27,"Hold3")
			ALUC M 1 A_GiveInventory("WeaponCharge",1)
			ALUC M 1 A_Refire("Hold2")
			Goto NormalSlice
		Hold3:
			ALUC A 0 A_JumpIfInventory("WeaponCharge",65,"HoldReady")
			ALUC N 1 A_GiveInventory("WeaponCharge",1)
			ALUC N 1 A_Refire("Hold3")
			Goto NormalSlice
		HoldReady:
			ALUC N 0 A_PlaySoundEx("weapon/alucardcharge", "Weapon")
		HoldReady1:
			ALUC N 0 A_JumpIf(CallACS("AlucardInput") & 32, "SliceCancel")
			ALUC N 1 A_SpawnItemEx("AlucardBatSpawner",cos(pitch)*625,0,32-(sin(pitch)*625),cos(pitch)*velx, vely, -sin(pitch)*velz,0,SXF_ABSOLUTEVELOCITY|SXF_NOCHECKPOSITION)
			ALUC N 1 A_Refire("HoldReady2")
			Goto TeleportSlice
		HoldReady2:
			ALUC N 0 A_JumpIf(CallACS("AlucardInput") & 32, "SliceCancel")
			ALUC O 1 A_SpawnItemEx("AlucardBatSpawner",cos(pitch)*625,0,32-(sin(pitch)*625),cos(pitch)*velx, vely, -sin(pitch)*velz,0,SXF_ABSOLUTEVELOCITY|SXF_NOCHECKPOSITION)
			ALUC O 1 A_Refire("HoldReady1")
			Goto TeleportSlice
		TeleportSlice:
			PLAY A 0 A_SpawnItemEx("AlucardTeleportFXStart",0,0,32,0,0,0,0,SXF_NOCHECKPOSITION)
			ALUC O 0 A_PlaySoundEx("weapon/alucardteleport", "Voice")
			ALUC O 1 A_FireCustomMissile("AlucardTeleporter", 0, 0)
			TNT1 A 0 A_TakeInventory("AlucardSwordAmmo", 6)
			ALUC PQ 2 A_TakeInventory("WeaponCharge", 9999)
			ALUC R 0 A_GiveInventory("AlucardSwordFlight", 1)
 			ALUC R 2 A_GiveInventory("AlucardSwordInvul", 1)
			TNT1 A 9 
			ALUC C 2
			ALUC D 1 A_GiveInventory("AlucardSwordAttack")
			ALUC EF 1
			TNT1 A 5
			ALUC H 2
			ALUC I 1 A_GiveInventory("AlucardSwordAttack2")
			ALUC JK 1
			TNT1 A 18 A_TakeInventory("WeaponCharge", 9999)
			ALUC RQPNNNNNZZ 2
			Goto Ready+1
		Altfire:
		AltHold:
			TNT1 A 1 A_JumpIfNoAmmo("NoAmmo")
			Goto Slice
		SliceCancel:
			ALUC N 1 A_TakeInventory("WeaponCharge", 9999)
		Slice:
			TNT1 A 1 A_JumpIfInventory("AlucardSwordSwap", 1, "AltSlice")
		NormalSlice:
			ALUC B 1 A_TakeInventory("AlucardSwordAmmo", 3)
			ALUC C 2 A_TakeInventory("AlucardSwordSwap", 999)
			ALUC D 1 A_GiveInventory("AlucardSwordAttack", 1)
			ALUC EF 1 A_TakeInventory("WeaponCharge", 9999)
			TNT1 A 18 A_GiveInventory("AlucardSwordSwap", 1)
			TNT1 A 1 A_Refire
			ALUC ZZZ 1 A_Refire
			goto Ready+1
		AltSlice:
			ALUC G 1 A_TakeInventory("AlucardSwordAmmo", 3)
			ALUC G 1 A_TakeInventory("WeaponCharge", 9999)
			ALUC H 2
			ALUC I 1 A_GiveInventory("AlucardSwordAttack2", 1)
			ALUC JK 1
			TNT1 A 18 A_TakeInventory("AlucardSwordSwap", 999)
			TNT1 A 1 A_Refire
			ALUC ZZZ 1 A_Refire
			Goto Ready+1
		NoAmmo:
			ALUC A 1 ACS_NamedExecuteAlways("core_noammo",0)
			goto Ready+1
	}
}

actor AlucardDoneTeleport : Powerup
{
	powerup.duration 10
}

actor AlucardTeleporter
{
	radius 0
	height 0
	PROJECTILE
	+DONTBLAST
	+NOINTERACTION
	speed 35
	var int user_velx;
	var int user_vely;
	var int user_velz;
	var int user_oldx;
	var int user_oldy;
	var int user_oldz;
	
	renderstyle "None"
	States
	{
		Spawn:
		PLAY A 0
		TNT1 A 2 ACS_NamedExecuteAlways("AlucardSetxyz", 0)
		PLAY A 0 A_SetUserVar("user_velx", velx)
		PLAY A 0 A_SetUserVar("user_vely", vely)
		PLAY A 0 A_SetUserVar("user_velz", velz)
		TNT1 A 15 ACS_NamedExecuteAlways("AlucardTeleporter", 0) 
		TNT1 A 20 A_Stop 
		TNT1 A 18 A_ChangeVelocity(-user_velx, -user_vely, -user_velz, CVF_REPLACE)
		// [CMM] Fixes issue with wrong warping
		TNT1 A 1 A_GiveToTarget("AlucardDoneTeleport", 1)
		stop
	}
}

actor AlucardSwordSwap : Once {}

actor AlucardSwordAmmo : Ammo
{
	inventory.amount 1
	inventory.maxamount 33
	+INVENTORY.IGNORESKILL
}

actor AlucardSwordAttack : CustomInventory
{
	+INVENTORY.AUTOACTIVATE
	states
	{
		Pickup:
		TNT1 A 0 A_SpawnItemEx("AlucardSwordFX",52,0,32,velx * 0.52, vely, 0,0,SXF_NOCHECKPOSITION|SXF_ABSOLUTEVELOCITY)
		Goto Damager
		Damager:
		TNT1 A 0 A_SpawnItemEx("AlucardSwordDamagerWeak",cos(pitch)*70,0,32-(sin(pitch)*70),cos(pitch)*5, vely, -sin(pitch)*5,0,SXF_ABSOLUTEVELOCITY)
		TNT1 A 0 A_SpawnItemEx("AlucardSwordDamager",cos(pitch)*20,0,32-(sin(pitch)*20),cos(pitch)*5, vely, -sin(pitch)*5,0,SXF_ABSOLUTEVELOCITY)
		Sound:
		TNT1 A 0 ACS_NamedExecuteAlways("AlucardWeaponSound", 0)
		stop
	}
}

actor AlucardSwordAttack2 : AlucardSwordAttack
{
	states
	{
		Pickup:
		TNT1 A 0 A_SpawnItemEx("AlucardSwordFX2",52,0,32,velx * 0.52, vely, velz * 0.52,0,SXF_NOCHECKPOSITION|SXF_ABSOLUTEVELOCITY)
		Goto Damager
	}
}

actor AlucardSwordFX : BasicGraphicEffect
{
	PROJECTILE
	height 1
	radius 1
	scale 3.5
	states
	{
		// [Trill] Changed this to SpawnFrame so that team colors would work.
		SpawnFrame:
		TNT1 A 0
		TNT1 AAAAA 0 A_SpawnITemEx("AlucardSwordSparkFX", frandom(-10, 32), frandom(-64, -16), frandom(-6, 12), frandom(1, 3), frandom(7, 18), 0, 0, SXF_NOCHECKPOSITION)
		ALUC SSTT 1  
		ALUC UU 1
		stop
	}
}

actor AlucardSwordFX2 : AlucardSwordFX
{
	states
	{
		// [Trill] Same here.
		SpawnFrame:
		TNT1 A 0
		TNT1 AAAAA 0 A_SpawnITemEx("AlucardSwordSparkFX", frandom(-10, 32), frandom(16, 64), frandom(-12, 6), frandom(1, 3), frandom(-7, -18), 0, 0, SXF_NOCHECKPOSITION) 
		ALUC VVWW 1 
		ALUC XX 1
		stop
	}
}

// [Trill] Redid this actor to allow for team colors
actor AlucardSwordSparkFX : BasicGraphicEffect
{
	-NOINTERACTION
	-NOGRAVITY
	gravity 0.4
	translation "192:192=68:68", "198:198=68:68"
	speed 1
	scale 2.6
	states
	{
		SpawnFrame:
		PIXL A 1
		PIXL A 1 A_FadeOut(0.05)
		wait
	}
}


actor AlucardSwordDamager
{
	PROJECTILE
	+DONTBLAST
	+THRUACTORS
	Damage (0)
	height 3
	radius 3
	Obituary "$OB_ALUCARDSWORD"
	damagetype "AlucardSword"
	states
	{
		Spawn:
		TNT1 A 0
		TNT1 A 2 A_Explode(CallACS("burst_cbm_damage",15), 30, 0, 0, 30)
		stop
	}
}

// [Trill] This was missing its inheritance
actor AlucardSwordDamagerWeak : AlucardSwordDamager
{
	states
	{
		Spawn:
		TNT1 A 0
		TNT1 A 2 A_Explode(CallACS("burst_cbm_damage",25), 80, 0, 0, 80)
		stop
	}
}

actor AlucardTeleportFXStart : BasicGraphicEffect
{
	states
	{
		SpawnFrame:
		TNT1 A 0
		TNT1 A 0 A_PlaySoundEx("weapon/alucardteleport", "Voice")
		TNT1 AAA 4 A_SpawnItemEx("AlucardTeleportFX", 0, 0, 0, 0, 0, 0, 0, SXF_NOCHECKPOSITION)
		stop
	}
}


actor AlucardTeleportFX : BasicGraphicEffect
{
	translation "0:255=174:174"
	scale 2.5
	states
	{
		SpawnFrame:
		TNT1 A 0
		Looping:
		ALUC Y 0 A_FadeOut(0.1)
		ALUC Y 1 A_SetScale(scalex + 0.55, scaley + 0.55)
		ALUC Y 0 A_JumpIf(alpha <0.2, "Fade")
		loop
		Fade:
		TNT1 AAAAAA 5
		TNT1 A 3
		Looping2:
		ALUC Y 0 A_FadeIn(0.1)
		ALUC Y 1 A_SetScale(scalex - 0.55, scaley - 0.55)
		ALUC Y 0 A_JumpIf(alpha >= 1.0, "Death")
		loop
		Death:
		TNT1 A 1
		stop
	}
}

actor AlucardSwordWep_ScriptBar : ScriptBar {}

actor AlucardSwordInvul : PowerInvulnerable
{
	powerup.duration 52
}

actor AlucardSwordFlight : PowerFlight
{
	powerup.duration 52
}

actor AlucardBatSpawner
{
	-SOLID
	+NOGRAVITY
	+NOINTERACTION
	+CLIENTSIDEONLY
	height 1
	radius 1
	States
	{
		Spawn:
		TNT1 A 0
		// [Trill] This fixes a strange issue with UIX.
		TNT1 A 2 ACS_NamedExecuteWithResult("AlucardBatIcon", 0)
		stop
	}
}

actor AlucardBatFX1 : BasicGraphicEffect
{
	renderstyle translucent
	alpha 0.85
	scale 2.5
	states
	{
		Spawn:
		ALUB A 2
		stop
	}
}

actor AlucardBatFX2 : AlucardBatFX1
{
	states
	{
		Spawn:
		ALUB B 2
		stop
	}
}
