actor "CrasRangeWep_NormalBar" : NormalBar { args 162, 232 }

const int CRA_RANGE_SPD = 118;
const int CRA_RANGE_MIN_TICS = 5;

actor "CrasRangeAmmo" : Ammo { 
	+INVENTORY.IGNORESKILL inventory.amount 1 inventory.maxamount 12 }

actor "CrasRangeWep" : BaseMM8BDMWep {
    tag "$TAG_CRASRANGE" obituary "$OB_CRASRANGE" inventory.pickupmessage "$PU_CRASRANGE"
    weapon.slotnumber 2 inventory.icon "CRARANGE" 
	weapon.ammotype "CrasRangeAmmo" weapon.ammouse 1 weapon.ammogive 12
	states {
		spawnloop: 8C99 T -1
			loop
        ready:
            8C99 Z 0 ACS_NamedExecuteWithResult("core_weaponcolor",CLR_CRASRANGE)
            8C99 Z 1 A_WeaponReady
            goto ready+1
        select: 8C99 Z 0 A_GunFlash("minRange",GFF_NOEXTCHANGE)
            goto selectSwap
        deselect: 8C99 Z 0 A_TakeInventory("WeaponCharge", 0xFFFF)
            goto deselectSwap
		minRange:
			TNT1 A 1 A_SpawnItemEx("Cra's Range Range",
				cos(-pitch)*16, 0, 32+(sin(-pitch)*16),
				cos(-pitch)*(CRA_RANGE_SPD*(CRA_RANGE_MIN_TICS-1)), 0, 
				sin(-pitch)*(CRA_RANGE_SPD*(CRA_RANGE_MIN_TICS-1)))				
			loop
		altfire:
			8C99 Z 0 A_JumpIfNoAmmo("noammo")
			TNT1 A 0 A_GiveInventory("WeaponCharge") 
			goto fire+1
        fire:
			8C99 Z 0 A_JumpIfNoAmmo("noammo")
		reequip2: 8C99 Z 1 offset(24,22)
		reequip1: 8C99 Z 1 offset(-48,14)
		chain:
			8C99 R 1 offset(1,72)		
			8C99 Q 1 offset(1,78)		
			8C99 P 1 offset(0,72)		
			8C99 O 1 offset(0,58)	
			8C99 O 1 offset(0,68)	
			8C99 N 1 offset(0,52)
			8C99 N 1 offset(0,58)
		hold1: 8C99 S 1 offset(0,52) A_GiveInventory("__Cra's Range Arrow Hold")
			TNT1 A 0 A_JumpIfInventory("WeaponCharge", 1, "shoot")
			8C99 Z 0 A_JumpIfInventory("IsBot", 1, "shoot")
			8C99 S 0 A_Refire("hold2") goto shoot
		hold2: 8C99 S 1 offset(0,54) A_GiveInventory("__Cra's Range Arrow Hold")
			8C99 S 0 A_Refire("hold3") goto shoot
		hold3: 8C99 S 1 offset(0,52) A_GiveInventory("__Cra's Range Arrow Hold")
			8C99 S 0 A_Refire("hold4") goto shoot
		hold4: 8C99 S 1 offset(0,50) A_GiveInventory("__Cra's Range Arrow Hold")
			8C99 S 0 A_Refire("hold1") goto shoot
		shoot: 8C99 Z 0 A_TakeInventory("CrasRangeAmmo", 1)
            8C99 Z 0 A_PlaySoundEx("RHKPARY","Weapon")
            8C99 Z 0 A_GiveInventory("Cra's Range Shoot",1)
            8C99 Y 1 offset(0,60)
            8C99 Y 1 offset(0,56)
            8C99 Y 1 offset(0,54)
            8C99 Y 1 offset(0,53)
			8C99 Y 6 offset(0,52)
			8C99 Y 0 A_JumpIfNoAmmo(2) 8C99 Y 0 A_ReFire("chain") 8C99 Z 1 offset(-48,46)
			8C99 Y 0 A_JumpIfNoAmmo(2) 8C99 Y 0 A_ReFire("chain") 8C99 Z 1 offset(-32,42)
			8C99 Y 0 A_JumpIfNoAmmo(2) 8C99 Y 0 A_ReFire("chain") 8C99 Z 1 offset(-16,38)
			8C99 Y 0 A_JumpIfNoAmmo(2) 8C99 Y 0 A_ReFire("reequip1") 8C99 Z 1 offset(-8,36)
			8C99 Y 0 A_JumpIfNoAmmo(2) 8C99 Y 0 A_ReFire("reequip2") 8C99 Z 1 offset(-4,35)
			"----" A 0 A_TakeInventory("WeaponCharge", 0xFFFF)
            goto ready+1		
		noammo:
			"----" A 1 ACS_NamedExecuteAlways("core_noammo",0)
			"----" A 0 A_TakeInventory("WeaponCharge", 0xFFFF)
			goto ready+1}}

	
		

actor "Cra's Range Shoot" : CustomInventory { states {
	pickup: TNT1 A 0 A_JumpIfInventory("PowerSpreadRune", 1, "spread") goto main
	spread:
		TNT1 A 0 A_SpawnItemEx("Cra's Range", cos(-pitch)*16, 0, 32+(sin(-pitch)*16), 0, 0, 0, 20, SXF_TRANSFERPITCH)
		TNT1 A 0 A_SpawnItemEx("Cra's Range", cos(-pitch)*16, 0, 32+(sin(-pitch)*16), 0, 0, 0, -20, SXF_TRANSFERPITCH)
	main: TNT1 A 0 A_SpawnItemEx("Cra's Range", cos(-pitch)*16, 0, 32+(sin(-pitch)*16), 0, 0, 0, 0, SXF_TRANSFERPITCH)
		stop}}
		
	
actor "Cra's Range +PM Stack" : Once { inventory.maxamount 255 }
actor "Cra's Range -PM Stack" : "Cra's Range +PM Stack" { }

actor "Cra's Range +PM" : PowerSpeed { speed 1.8 powerup.duration -5000  }	
actor "Cra's Range -PM" : "Cra's Range +PM" { speed 0.55 }
			
				
actor "Cra's Range" : BasicProjectile {
	scale 3.5 radius 3 height 12 renderstyle "translucent" alpha 0.3 +RIPPER 
	+NOGRAVITY damage (0) gravity 1.0 speed 118
	states {
		spawn:
			TNT1 A 0 
			TNT1 A 0 A_GiveInventory("CutterFlag", CRA_RANGE_MIN_TICS)
			TNT1 A 0 A_RearrangePointers(AAPTR_NULL,AAPTR_DEFAULT,AAPTR_TARGET)
			TNT1 A 0 //A_SetPitch(pitch-1)
			8C99 W 0 A_ChangeVelocity(cos(-pitch)*CRA_RANGE_SPD,0,sin(-pitch)*CRA_RANGE_SPD,CVF_RELATIVE)
		rangeCheck:	
			8C99 W 0 A_JumpIfInventory("CutterFlag", 1, "count")
			8C99 W 0 A_JumpIfInventory("Once", 1, "impact")
			8C99 W 0 A_SpawnItemEx("Cra's Range Damager",0,0,0,0,0,0,0,SXF_TRANSFERPITCH)	
			goto fly
		count: TNT1 A 0 A_TakeInventory("CutterFlag", 1)
			TNT1 A 0 A_SpawnItemEx("Cra's Range Pre Trail", 0,0,4, 0,0,0,0,SXF_TRANSFERPITCH)
			8C99 W 0 A_JumpIfInventory("CutterFlag", 1, "fly")
			TNT1 A 0 A_JumpIf(true,1)
			goto fly
			ASTR B 0 A_FadeIn(0.7)
			//ASTR B 0 A_Spawnitemex("Cra's Range Apparition")
			ASTR B 0 A_ChangeFlag(NOGRAVITY, false)
			goto rangeCheck
		fly:
			8C99 W 0 A_JumpIf(velz>4, "up")
			8C99 W 0 A_JumpIf(velz>-8, "mid")
		down: 8C99 V 1
			goto rangeCheck
		up: 8C99 U 1
			goto rangeCheck
		mid: 8C99 W 1
			goto rangeCheck
		death:
			"----" A 0 A_ChangeFlag("NOINTERACTION", true)
			"----" A 0 A_ChangeFlag("NOGRAVITY", true)
			"----" A 0 A_Stop
			"----" A 1 A_FadeIn(0.7)
			"----" A 0 A_JumpIfInventory("Once", 1, "impact")
			"----" A 0 A_CheckCeiling("ceilWave")
			"----" A 0 A_CheckFloor("floorWave")
		wave: "----" A 0 A_SpawnItemEx("Cra's Range Wave") goto fade
		ceilWave: "----" A 0 A_SpawnItemEx("Cra's Range Wave Ceil",0,0,0,16) goto fade
		floorWave: "----" A 0 A_SpawnItemEx("Cra's Range Wave",0,0,0,16) goto fade		
		fade:
			"----" A 20
			"----" AAAAAA 1 A_FadeOut(0.10)
			stop
		impact:
			TNT1 A 0 
			stop}}

			
actor "Cra's Range Damager" : "Cra's Range" {
	obituary "$OB_CRASRANGE"  damagetype "CraRange" radius 22 height 15 -RIPPER
	+NOINTERACTION alpha 1.0
	damage (CallACS("burst_cbm_damage",8))
	states {
		spawn: TNT1 A 0
			TNT1 A 0 A_RearrangePointers(AAPTR_NULL,AAPTR_DEFAULT,AAPTR_TARGET)
			TNT1 A 0 A_TransferPointer(AAPTR_TRACER,AAPTR_DEFAULT,AAPTR_TRACER,AAPTR_TARGET)
			8C99 W 0 A_ChangeVelocity(cos(-pitch)*CRA_RANGE_SPD,0,sin(-pitch)*CRA_RANGE_SPD,CVF_RELATIVE)
			TNT1 A 1 A_ChangeFlag("NOINTERACTION", false)
			stop
		xdeath: crash: TNT1 A 0 A_GiveInventory("once",1,AAPTR_TRACER)
			TNT1 A 0 A_SpawnItemEx("Cra's Range Wave")
			TNT1 A 2 a_playsoundex("BOCUBNCB", "Weapon")
			stop}}
			
actor "Cra's Range Protection" : PowerProtection { 
	damagefactor "CraRange", 0.0 powerup.duration 4 }
	
actor "Cra's Range Tic 0" : Once { inventory.maxamount 70 }
actor "Cra's Range Tic 1" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 2" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 3" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 4" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 5" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 6" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 7" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 8" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 9" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 10" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 11" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 12" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 13" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 14" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 15" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 16" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 17" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 18" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 19" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 20" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 21" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 22" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 23" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 24" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 25" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 26" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 27" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 28" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 29" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 30" : "Cra's Range Tic 0" {}
actor "Cra's Range Tic 31" : "Cra's Range Tic 0" {}


		
		
	//////////////////////////////////////////////////////////
//                   GFX										//
	//////////////////////////////////////////////////////////
	
actor "Cra's Range Victim Icon" : once { inventory.maxamount 255 }
actor "Cra's Range Attacker Icon" : once { inventory.maxamount 255 }

/*actor "Cra's Range Apparition" : BasicGraphicEffect { scale 5.0 states {
	spawn: TRR2 WXV 2
		stop}}*/

actor "Cra's Range Impact Arrow" : BasicWatcher {
	var int user_height; var int user_radius; reactiontime 70
	states {
		spawn: TNT1 A 2
			TNT1 A 0 ACS_NamedExecuteWithResult("core_setpointer",AAPTR_TRACER,mass,0)
			TNT1 A 0 A_SetMass(random(0,359))			
		impact:
			TNT1 A 0 A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_NOCHECKPOSITION,0)
			TNT1 A 1 A_SpawnItemEx("__Cra's Range Arrow GFX",-user_radius,0,user_height, 0,0,0, mass)
			TNT1 A 0 A_JumpIf(!CallACS("core_targetexists",true),"death")
			TNT1 A 0 A_JumpIf(!CallACS("core_targetexists"),"death")
			TNT1 A 0 A_Countdown
			loop}}
		
actor "Cra's Range Range" : BasicFastProjectile { 
	+dontsplash radius 3 height 12 damage (0) states { spawn: TNT1 A 1
		TNT1 A 0 A_SpawnItemEx("Cra's Range Mark 1",0,0,12) stop
	death: 
		TNT1 A 0 A_SpawnItemEx("Cra's Range Mark 2",0,0,12) stop }}
	
actor "Cra's Range Mark 1" : BasicGraphicEffect { meleerange 1
	scale 2.0 alpha 0.85 +FORCEXYBILLBOARD translation "230:230=104:104", "4:4=103:103"
	+BOUNCEONWALLS // [Trill] This is a hack to fix this reticle online
	states { 
		spawn: TNT1 A 0 // [Russ] This condition was inverted to prevent rendering for non-users
			TNT1 A 0 A_JumpIf(CallACS("crasrange_gfx",false),1)
			stop
			ERO3 X 0 A_JumpIf(!meleerange | CallACS("crasrange_gfx",true), "main")
			ERO3 Y 0 Thing_SetTranslation(0,CLR_BOSSPAIN)
			ERO3 Y 0 //A_SetScale(2.15)
		main: "----" A 1 
			stop
		no: TNT1 A 0	
			stop}}
		
actor "Cra's Range Mark 2" : "Cra's Range Mark 1" { meleerange 0 alpha 0.65
	translation "230:230=175:175", "4:4=173:173" }
		
actor "__Cra's Range Arrow GFX" : BasicWatcher { states { spawn:
	TNT1 A 0 nodelay A_SpawnItemEx("Cra's Range Arrow GFX") stop}}
	
actor "Cra's Range Arrow GFX" : BasicGraphicEffect { scale 3.5
	states { spawn: 8C99 V 0
		sprite:
		"----" A 0 A_JumpIf(!CallACS("crasrange_gfx"),"main")
		"----" A 0 A_FadeOut(0.8)
		main: "----" A 2
			stop}}
		
actor "__Cra's Range Arrow Hold" : custominventory { states { pickup:
	TNT1 A 0 A_SpawnItemEx("Cra's Range Arrow Hold",
		cos(-pitch)*32, 0, 28+(sin(-pitch)*32), velx,vely,velz,0,SXF_ABSOLUTEVELOCITY) stop}}
		
actor "Cra's Range Arrow Hold" : "Cra's Range Arrow GFX" { alpha 0.8
	states { spawn: 8C99 W 0
		goto super::sprite}}
		
		
actor "Cra's Range Wave" : BasicGraphicEffect { 
	translation "210:210=86:86", "229:229=95:95" scale 1.5 alpha 0.9
	states {  spawn:  RAT3 ABCD 1 a_fadeout(0.15) stop}}
	
actor "Cra's Range Wave Ceil" : "Cra's Range Wave" { scale -1.5 }
		
actor "Cra's Range Pre Trail" : BasicGraphicEffect { scale 2.0 alpha 0.6
	translation "0:255=144:144"
	states {
		spawn: TNT1 A 0
			8C99 W 0 A_JumpIf(velz>4, "up")
			8C99 W 0 A_JumpIf(velz>-8, "mid")
		down: 8C99 V 0
			goto fade
		up: 8C99 U 0
			goto fade
		mid: 8C99 W 0
			goto fade
		fade: "----" AAAAA 1 A_SetScale(scalex*0.85) stop}}
		