actor ArrowLaserWep_NormalBar : NormalBar{args 42,242}
actor ArrowLaserWep_ScriptBar : ScriptBar{}

actor ArrowLaserWep : BaseMM8BDMWep
{
//Weapon.AmmoUse 0
Weapon.AmmoGive 28
Weapon.SlotNumber 2
Inventory.Pickupmessage "$PU_ARROWLASER"
Obituary "$OB_ARROWLASER"
Tag "$TAG_ARROWLASER"
weapon.ammotype "ArrowLaserAmmo"
inventory.icon "ALSRICON"
States
{
SpawnLoop:
ALSR Z 1
loop
Ready:
ALSR A 0 ACS_NamedExecuteWithResult("core_weaponcolor",COLOR_ARROWLASER)
ALSR A 1 A_WeaponReady
Goto Ready+1
ReadyC: Goto Ready+1
Deselect:
ALSR A 0 
goto DeselectSwap
Select:
ALSR A 0 
goto SelectSwap
Fire:
ALSR A 0 A_JumpIfNoAmmo("FireR")
goto Hold
FireR:
ALSR A 0 A_PlaySoundEx("weapon/mbuster","Weapon")
ALSR A 0 A_FireCustomMissile("ArrowLaserShot",0,0,8,0)
ALSR A 1 A_TakeInventory("WeaponCharge",999)
ALSR BC 3
ALSR A 1
ALSR A 0 A_Refire
goto Ready+1
Altfire:
ALSR A 0 A_JumpIfInventory("Vile_ClassAltfire", 1, "ClassAltfire")
ALSR A 0 A_JumpIf(CallACS("Vile_class_altfire"), "ClassAltfire")
ALSR A 1 A_JumpIfInventory("MM8BDMPlayer", 1, 1)
wait
ALSR A 0 A_PlaySoundEx("weapon/mbuster","Weapon")
ALSR A 0 A_FireCustomMissile("ArrowLaserShot",0,0,8,0)
ALSR A 1 A_TakeInventory("WeaponCharge",999)
ALSR BC 3
ALSR A 1
ALSR A 0 A_Refire
goto Ready+1
ClassAltfire:
DATK A 0 
goto Super::Altfire
Fire2:
ALSR A 0 A_JumpIfInventory("ArrowLaserAmmo", 3, "Fire2r")
ALSR A 0 A_PlaySoundEx("weapon/mbuster","Weapon")
ALSR A 0 A_FireCustomMissile("ArrowLaserShot",0,0,8,0)
ALSR A 1 A_TakeInventory("WeaponCharge",999)
ALSR BC 3
ALSR A 1
ALSR A 0 A_Refire
goto Ready+1
Fire2r:
ALSR A 0 A_TakeInventory("WeaponCharge",999)
ALSR A 0 A_PlaySoundEx("weapon/ArrowLaserMidShot","Weapon")
ALSR A 1 ACS_NamedExecuteWithResult("core_chargecolor", COLOR_ARROWLASER,TCLR_NONE)
ALSR A 0 A_TakeInventory("ArrowLaserAmmo",3,TIF_NOTAKEINFINITE)
ALSR A 0 A_FireCustomMissile("ArrowLaserMidShot",0,0,8,0)
ALSR BC 3
ALSR B 0 A_Refire
goto Ready+1
Fire3:
ALSR A 0 A_JumpIfInventory("ArrowLaserAmmo", 7, "Fire3r")
ALSR A 0 A_TakeInventory("WeaponCharge",999)
ALSR A 0 A_PlaySoundEx("weapon/ArrowLaserMidShot","Weapon")
ALSR A 1 ACS_NamedExecuteWithResult("core_chargecolor", COLOR_ARROWLASER,TCLR_NONE)
ALSR A 0 A_TakeInventory("ArrowLaserAmmo",3,TIF_NOTAKEINFINITE)
ALSR A 0 A_FireCustomMissile("ArrowLaserMidShot",0,0,8,0)
ALSR BC 3
ALSR B 0 A_Refire
goto Ready+1
Fire3r:
ALSR A 0 A_TakeInventory("WeaponCharge",999)
ALSR A 0 A_PlaySoundEx("weapon/ArrowLaserChargeShot","Weapon")
ALSR A 0 A_TakeInventory("ArrowLaserAmmo",7,TIF_NOTAKEINFINITE)
ALSR A 0 ACS_NamedExecuteWithResult("core_chargecolor", COLOR_ARROWLASER,TCLR_NONE)
ALSR A 0 A_FireCustomMissile("ArrowLaserShotArrowCW",0,0,8,0)
ALS0 ABCDEF 2
ALSR A 3
ALSR A 0 A_Refire
goto Ready+1
Charge1:
ALSR A 0 A_JumpIfInventory("WeaponCharge",35,"Charge2Start")
ALSR D 1 ACS_NamedExecuteWithResult("core_chargecolor", COLOR_ARROWLASERCHARGE1,TCLR_CHARGE1)
ALSR D 0 A_Refire("Charge1.a")
Goto Fire2
Charge1.a:
ALSR A 1 ACS_NamedExecuteWithResult("core_chargecolor", COLOR_ARROWLASER,TCLR_NONE)
ALSR A 0 A_GiveInventory("WeaponCharge", 1 + CallACS("core_checkrune", RUNE_RAGE))
ALSR D 0 A_Refire("Charge1")
Goto Fire2
Charge2Start:
ALSR A 0 A_GunFlash("Sound.BusterChargeX", GFF_NOEXTCHANGE)
Goto Charge2
Charge2:
ALSR A 1 ACS_NamedExecuteWithResult("core_chargecolor", COLOR_ARROWLASERCHARGE2,TCLR_NONE)
ALSR D 0 A_Refire("Charge2.a")
Goto Fire3
Charge2.a:
ALSR E 1 ACS_NamedExecuteWithResult("core_chargecolor", COLOR_ARROWLASERCHARGE3,TCLR_CHARGE2)
ALSR D 0 A_Refire("Charge2.b")
Goto Fire3
Charge2.b:
ALSR F 1 ACS_NamedExecuteWithResult("core_chargecolor", COLOR_ARROWLASER,TCLR_CHARGE3)
ALSR A 0 A_JumpIfInventory("WeaponCharge", 35, 2)
ALSR A 0 A_GiveInventory("WeaponCharge", 1 + CallACS("core_checkrune", RUNE_RAGE))
"####" "#" 0 A_JumpIfInventory("IsBot", 1, "BotFire")
ALSR A 0 A_Refire("Charge2")
Goto Fire3
BotFire:
"####" "#" 0 A_Jump(16, "Fire3")
"####" "#" 0 A_Refire("Charge2")
Goto Fire3

Hold:
ALSR A 0 A_JumpIfInventory("ArrowLaserAmmo", 3, "Hold2")
goto FireR
Hold2:
ALSR A 0 A_JumpIfInventory("WeaponCharge",18,"Charge")
ALSR A 1 A_GiveInventory("WeaponCharge", 1 + CallACS("core_checkrune", RUNE_RAGE))
ALSR A 0 A_Refire
Goto FireR
Charge:
ALSR A 0 A_JumpIfInventory("WeaponCharge",19,"Charge1")
ALSR A 0 A_PlaySoundEx("weapon/ArrowLaserCharge1","Weapon")
Goto Charge1
NoAmmo:
ALSR A 0 ACS_NamedExecuteAlways("core_noammo",0)
Goto Ready+1
Sound.BusterChargeX:
		TNT1 A 9 A_PlaySoundEx("weapon/ArrowLaserCharge2","Weapon",0)
		TNT1 A 1 A_JumpIfInventory("WeaponCharge",1,"Sound.BusterChargeX")
		stop
}
}

actor ArrowLaserShot : MegaShot
{
damagetype "ArrowLaser"
Obituary "$OB_ARROWLASER"
}

actor ArrowLaserMidShot : MidShot
{
translation "198:198=242:242", "192:192=42:42", "210:210=172:172"
damagetype "ArrowLaser"
Obituary "$OB_ARROWLASER"
Scale 2.0
States
{
Spawn:
CBUS A 0 A_SpawnItemEx("ArrowLaserMidShotFX",-32,0,0,momx/2,momy/2,momz/2,0,SXF_ABSOLUTEMOMENTUM|SXF_TRANSFERTRANSLATION)
CBUS ABCH 2
loop
}
}

actor ArrowLaserMidShotFX : BasicGraphicEffect
{
	+NOINTERACTION
	+CLIENTSIDEONLY
	Scale 2.5
	States
	{
	SpawnFrame:
		CBUS DE 2
		goto Death
	Death:
		CBUS F 1 A_FadeOut(0.5)
		loop
	}
}

actor LaserShotCW : BasicProjectile
{
+BRIGHT
PROJECTILE
+DONTREFLECT
+FORCEXYBILLBOARD
+RIPPER
Speed 50
Damage (0)
radius 5
height 5
scale 2.5
ReactionTime 5
damagetype "ArrowLaser"
Obituary "$OB_ARROWLASER"
Translation "192:192=42:42", "198:198=242:242","199:199=242:242"
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_ScaleVelocity(SPEED_SCALAR)
Spawn2:
TNT1 A 0 A_CountDown
TNT1 A 0 A_SpawnItemEx("ArrowLaser",0,0,0,(momx/SPEED_SCALAR),(momy/SPEED_SCALAR),(momz/SPEED_SCALAR),0,SXF_ABSOLUTEMOMENTUM)
TNT1 A 0 A_SpawnItemEx("ArrowLaserTrail",0,0,0,(momx/SPEED_SCALAR),(momy/SPEED_SCALAR),(momz/SPEED_SCALAR),0,SXF_ABSOLUTEMOMENTUM)
TNT1 A 0 A_SpawnItemEx("ArrowLaserTrail",-(momx/SPEED_SCALAR)/3,-(momy/SPEED_SCALAR)/3,-(momz/SPEED_SCALAR)/3,(momx/SPEED_SCALAR),(momy/SPEED_SCALAR),(momz/SPEED_SCALAR),0,SXF_ABSOLUTEPOSITION|SXF_ABSOLUTEMOMENTUM)
TNT1 A 0 A_SpawnItemEx("ArrowLaserTrail",-(momx/SPEED_SCALAR)*2/3,-(momy/SPEED_SCALAR)*2/3,-(momz/SPEED_SCALAR)*2/3,(momx/SPEED_SCALAR),(momy/SPEED_SCALAR),(momz/SPEED_SCALAR),0,SXF_ABSOLUTEPOSITION|SXF_ABSOLUTEMOMENTUM)
TNT1 A 1
loop
Death:
TNT1 A 0
stop
}
}


actor ArrowLaser : BasicProjectile
{
+BRIGHT
PROJECTILE
+DONTREFLECT
+FORCEXYBILLBOARD
+RIPPER
damagetype "ArrowLaser"
Obituary "$OB_ARROWLASER"
Damage (CallACS("vile_cbm_damage",2))
radius 16
height 10
scale 2.5
renderstyle none
Translation "192:192=42:42", "198:198=242:242","199:199=242:242"
States
{
Spawn:
TNT1 A 0
TNT1 A 1
Spawn2:
LASH AB 1
loop
Death:
TNT1 A 0
stop
}
}

actor ArrowLaserTrail : ArrowLaser
{
+BRIGHT
renderstyle normal
Damage(0)
reactiontime 80
Translation "192:192=42:42", "198:198=242:242","199:199=242:242"
States
{
Spawn:
LASH AB 1 A_Countdown
loop
}
}

actor ArrowLaserShotArrowCW : BasicProjectile
{
+BRIGHT
PROJECTILE
+FORCEXYBILLBOARD
damagetype "ArrowLaserCharge"
Obituary "$OB_ARROWLASER"
Speed 54
Damage (CallACS("vile_cbm_damage",20))
radius 20
height 16
scale 2.5
Translation "192:192=42:42", "198:198=242:242","199:199=242:242","199:199=242:242"
States
{
Spawn:
MJAB ABACAD 1 
Loop
Death:
MJAB F 0 A_PlaySoundEx("weapon/ArrowLaserChargeShot", "Weapon")
MJAB F 0 A_SpawnItemEx ("ArrowLaserFrag1CW",0,0,0,cos(-pitch)*27,0,sin(-pitch)*27,165,0,0)
MJAB F 0 A_SpawnItemEx ("ArrowLaserFrag1CW",0,0,0,cos(-pitch)*27,0,sin(-pitch)*27,150,0,0)
MJAB F 0 A_SpawnItemEx ("ArrowLaserFrag1CW",0,0,0,cos(-pitch)*27,0,sin(-pitch)*27,135,0,0)
MJAB F 0 A_SpawnItemEx ("ArrowLaserFrag1CW",0,0,0,cos(-pitch)*27,0,sin(-pitch)*27,-135,0,0)
ARRS F 0 A_SpawnItemEx ("ArrowLaserFrag1CW",0,0,0,cos(-pitch)*27,0,sin(-pitch)*27,-150,0,0)
MJAB F 0 A_SpawnItemEx ("ArrowLaserFrag1CW",0,0,0,cos(-pitch)*27,0,sin(-pitch)*27,-165,0,0)
ARRS EFEFEFEFEF 1 
BUST B 0 A_PlaySoundEx("weapon/lshot","Weapon")
MJAB F 0 A_SpawnItemEx ("ArrowLaserShotLaserCW",0,0,0,cos(-pitch)*80,0,sin(-pitch)*80,-180,0,0,0)
MJAB F 1 A_SpawnItemEx ("ArrowLaserShotLaserCW",0,0,0,cos(-pitch)*80,0,sin(-pitch)*80,0,0,0,0)
stop
Ceiling:
Floor:
MJAB F 0 A_PlaySoundEx("weapon/ArrowLaserChargeShot", "Weapon")
MJAB F 0 A_SpawnItemEx ("ArrowLaserFrag1CW",0,0,0,27,0,0,165,0,0)
MJAB F 0 A_SpawnItemEx ("ArrowLaserFrag1CW",0,0,0,27,0,0,150,0,0)
MJAB F 0 A_SpawnItemEx ("ArrowLaserFrag1CW",0,0,0,27,0,0,135,0,0)
MJAB F 0 A_SpawnItemEx ("ArrowLaserFrag1CW",0,0,0,27,0,0,-135,0,0)
ARRS F 0 A_SpawnItemEx ("ArrowLaserFrag1CW",0,0,0,27,0,0,-150,0,0)
MJAB F 0 A_SpawnItemEx ("ArrowLaserFrag1CW",0,0,0,27,0,0,-165,0,0)
ARRS EFEFEFEFEFEF 1 
BUST B 0 A_PlaySoundEx("weapon/lshot","Weapon")
MJAB F 0 A_SpawnItemEx ("ArrowLaserShotLaserCW",0,0,0,cos(-pitch)*80,0,sin(-pitch)*80,-180,0,0,0)
MJAB F 1 A_SpawnItemEx ("ArrowLaserShotLaserCW", 0,0,0,cos(-pitch)*80,0,sin(-pitch)*80,0,0,0,0)
stop
}
}

actor ArrowLaserFrag1CW : BasicProjectile
{
+BRIGHT
PROJECTILE
+FORCEXYBILLBOARD
damagetype "ArrowBuster"
Obituary "$OB_ARROWLASER"
Damage (CallACS("vile_cbm_damage",2))
radius 5
height 5
scale 1.5
Speed 26
Translation "192:192=42:42", "198:198=242:242","199:199=242:242"
States
{
Spawn:
LASH AB 1
LASH AB 1
LASH B 0 A_Stop
LASH B 0 A_ChangeFlag("NOINTERACTION", 0)
LASH ABAB 1 A_SetScale(scalex + 0.28, scaley + 0.28)
LASH AB 1
BUST B 0 A_PlaySoundEx("weapon/lshot","Weapon")
LASH A 0 A_SpawnItemEx("LaserShotCW",0,0,0,cos(-pitch)*80,0,sin(-pitch)*80,180,0,0)
Stop
Death:
TNT1 A 0 
TNT1 A 0
stop
}
}

actor ArrowLaserShotLaserCW : BasicProjectile
{
+BRIGHT
PROJECTILE
+DONTREFLECT
+FORCEXYBILLBOARD
+RIPPER
Speed 50
Damage (0)
radius 5
height 5
scale 2.5
ReactionTime 5
damagetype "ArrowLaser"
Obituary "$OB_ARROWLASER"
Translation "192:192=42:42", "198:198=242:242","199:199=242:242"
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_ScaleVelocity(SPEED_SCALAR)
Spawn2:
TNT1 A 0 A_CountDown
TNT1 A 0 A_SpawnItemEx("ArrowLaser2",0,0,0,(momx/SPEED_SCALAR),(momy/SPEED_SCALAR),(momz/SPEED_SCALAR),0,SXF_ABSOLUTEMOMENTUM)
TNT1 A 0 A_SpawnItemEx("ArrowLaserTrail2",0,0,0,(momx/SPEED_SCALAR),(momy/SPEED_SCALAR),(momz/SPEED_SCALAR),0,SXF_ABSOLUTEMOMENTUM)
TNT1 A 0 A_SpawnItemEx("ArrowLaserTrail2",-(momx/SPEED_SCALAR)/3,-(momy/SPEED_SCALAR)/3,-(momz/SPEED_SCALAR)/3,(momx/SPEED_SCALAR),(momy/SPEED_SCALAR),(momz/SPEED_SCALAR),0,SXF_ABSOLUTEPOSITION|SXF_ABSOLUTEMOMENTUM)
TNT1 A 0 A_SpawnItemEx("ArrowLaserTrail2",-(momx/SPEED_SCALAR)*2/3,-(momy/SPEED_SCALAR)*2/3,-(momz/SPEED_SCALAR)*2/3,(momx/SPEED_SCALAR),(momy/SPEED_SCALAR),(momz/SPEED_SCALAR),0,SXF_ABSOLUTEPOSITION|SXF_ABSOLUTEMOMENTUM)
TNT1 A 1
loop
Death:
TNT1 A 0
stop
}
}

actor ArrowLaserTrail2 : ArrowLaserTrail
{
+BRIGHT
renderstyle normal
Damage(0)
}


actor ArrowLaser2 : BasicProjectile
{
+BRIGHT
PROJECTILE
+DONTREFLECT
+FORCEXYBILLBOARD
+RIPPER
damagetype "ArrowLaser"
Obituary "$OB_ARROWLASER"
reactiontime 170
Damage (CallACS("vile_cbm_damage",2))
radius 18
height 15
scale 3.0
renderstyle none
Translation "192:192=42:42", "198:198=242:242","199:199=242:242"
States
{
Spawn:
TNT1 A 0
TNT1 A 1
Spawn2:
LASH AB 1 A_Countdown
loop
Death:
TNT1 A 0
stop
}
}

actor ArrowLaserAmmo : Ammo
{
inventory.amount 1
inventory.maxamount 28
+INVENTORY.IGNORESKILL
}


actor ArrowLaserActivator : CustomInventory
{
+INVENTORY.AUTOACTIVATE
States
{
Pickup:
TNT1 A 0
TNT1 A 0 A_JumpIfInventory("ArrowLaserCounter", 1, "No")
TNT1 A 0 A_Stop
PLAY H 0 A_GiveInventory("ArrowLaserCounter",1)
PLAY H 0 ACS_NamedExecuteAlways("core_flyplayer",0,0,1)
PLAY H 0 ACS_NamedExecuteAlways("core_freezeplayer",0,0,1)
TNT1 A 0 A_SpawnItemEx("ArrowLaserWatcher")
stop
No:
TNT1 A 0
stop
}
}

actor ArrowLaserWatcher : BasicWatcher
{
Height 0
Radius 0
+NOINTERACTION
-SOLID
+NOGRAVITY
+MISSILE
Renderstyle none
States
{
Spawn:
TNT1 A 0
TNT1 A 1 A_Warp(AAPTR_TARGET, 0.0,0.0,0.0,0.0,WARPF_NOCHECKPOSITION)
TNT1 A 0 A_JumpIfInTargetInventory("ArrowLaserCounter", 1, "Spawn")
TNT1 A 5 A_GiveToTarget("TimeUnstopped")
stop
}
}

actor ArrowLaserCounter : Powerup
{
powerup.duration 16
}
