// Shock rifle
actor ShockRifle : AOWWeapon 21068 {
	//$Category Weapons
	Tag "Shock Rifle"
	Obituary "$OB_SHOCKRIFLE"
	AttackSound "voltrifle/fire"
	Decal "VoltageScorch"
	Inventory.PickupMessage "You got the shock rifle!"
	Weapon.SelectionOrder 4
	Weapon.KickBack 100
	Weapon.AmmoType "GeneporiumCharge"
	Weapon.AmmoUse 1
	Weapon.AmmoGive 40
	Weapon.PreferredSkin "MarineShockRifle"
	States {
	Ready:
		VOLT ABCDCB 3 A_WeaponReady
		loop
	Deselect:
		VOLT A 1 A_Lower
		loop
	Select:
		VOLT A 1 A_Raise
		loop
	Fire:
		TNT1 A 0 A_JumpIfInventory ("IsInSpawnRoom", 1, "Ready")
		TNT1 A 0 A_JumpIfInventory ("InMenu", 1, "Ready")
		VOLF ABC 3 bright
		VOLF A 0 bright A_ReFire
		VOLF CBA 3 bright
		goto Ready
	Hold:
		TNT1 A 0 A_JumpIfInventory ("IsInSpawnRoom", 1, "EndFire")
		TNT1 A 0 A_JumpIfInventory ("InMenu", 1, "EndFire")
		// VOLF E 0 bright A_FireBullets (0, 0, 1, 0, "VoltageTrailPuff", 0, 1024)
		VOLF E 0 bright A_FireBullets (0.5, 0.5, -1, 1, "VoltagePuff", 0, 128)
		//VOLF E 0 bright A_FireBullets (0.5, 0.5, -1, 0, "VoltagePuff", 0, random(129,255))
		VOLF E 0 bright A_FireBullets (1, 1, -1, 1, "VoltagePuff", 0, 256)
		//VOLF E 0 bright A_FireBullets (0.5, 0.5, -1, 0, "VoltagePuff", 0, random(257,383))
		VOLF E 0 bright A_FireBullets (2, 2, -1, 1, "VoltagePuff", 0, 384)
		//VOLF E 0 bright A_FireBullets (0.5, 0.5, -1, 0, "VoltagePuff", 0, random(385,511))
		VOLF E 0 bright A_FireBullets (3, 3, -1, 1, "VoltagePuff", 0, 512)
		//VOLF E 0 bright A_FireBullets (0.5, 0.5, -1, 0, "VoltagePuff", 0, random(513,639))
		VOLF E 0 bright A_FireBullets (2, 2, -1, 1, "VoltagePuff", 0, 640)
		//VOLF E 0 bright A_FireBullets (0.5, 0.5, -1, 0, "VoltagePuff", 0, random(641,767))
		VOLF E 0 bright A_FireBullets (1.5, 1.5, -1, 1, "VoltagePuff", 0, 768)
		//VOLF E 0 bright A_FireBullets (0.5, 0.5, -1, 0, "VoltagePuff", 0, random(769,895))
		VOLF E 0 bright A_FireBullets (1, 1, -1, 1, "VoltagePuff", 0, 896)
		//VOLF E 0 bright A_FireBullets (0.5, 0.5, -1, 0, "VoltagePuff", 0, random(897,1023))
		VOLF E 1 bright A_FireBullets (0.5, 0.5, -1, 1, "VoltagePuff", 1, 1024)
		VOLF D 2 bright
		VOLF C 0 bright A_ReFire
		Goto EndFire
	EndFire:
		VOLF CBA 3 bright
		goto Ready
	Spawn:
		VOLF X -1
		stop
	}
}

actor VoltagePuff {
	renderstyle Add
	alpha 0.5
	+NOBLOCKMAP +NOGRAVITY
	+PUFFONACTORS +ALWAYSPUFF
	+CLIENTSIDEONLY +NOINTERACTION
	+FORCEXYBILLBOARD
	DamageType "Energy"
	Scale 0.3
	states {
	Spawn:
		VOLX A 2 bright
		VOLX A 0 A_SpawnItemEx("VoltageDecay",0,0,0,0,0,0,0,128,192)
		//VOLX A 0 A_SpawnItemEx("VoltagePlasmah",0,0,0,0,random(-4,4)/2.8,random(-4,4)/2.8,random(-4,4)/9.33,SXF_CLIENTSIDE|SXF_ABSOLUTEMOMENTUM,140)
		VOLX BCDEFEDCB 2 bright
		stop
	}
}

actor VoltagePuff2 {
	renderstyle Add
	alpha 0.5
	+NOBLOCKMAP
	+NOGRAVITY
	+PUFFONACTORS
	+FORCEXYBILLBOARD
	DamageType "Energy"
	Scale 0.3
	states {
	Spawn:
		VOLX A 2 bright
		VOLX BCDEFEDCB 2 bright
		stop
	}
}

actor VoltageDecay { //Now with extra hi-res funk!
	+CLIENTSIDEONLY -ACTIVATEIMPACT
	-ACTIVATEPCROSS +NOBLOCKMAP
	+NOGRAVITY +NOINTERACTION
	+FORCEXYBILLBOARD
	renderstyle Add
	alpha 1
	Scale 0.375
	states {
	Spawn:
		TNT1 AA 0 A_PlaySound("voltrifle/decay")
		TNT1 A 0 A_Jump(128,"AltSpawn")
		VOLX AABBCCDDEEFFEECCA 2 bright A_SpawnItemEx("VoltageSpark",0,0,0,random(-6,6)/2,random(-6,6)/2,random(-3,3)/1.25,random(-180,180),128,64)
		stop
	AltSpawn:
		VOLX AACCBBDDFFEECCB 2 bright A_SpawnItemEx("VoltageSpark",0,0,0,random(-6,6)/1.85,random(-6,6)/1.85,random(-3,3),random(-180,180),128,64)
		stop
	}
}


actor VoltageSpark {
	PROJECTILE
	+CLIENTSIDEONLY -ACTIVATEIMPACT
	-ACTIVATEPCROSS +NOBLOCKMAP
	+FORCEXYBILLBOARD
	+NOCLIP +NONETID
	renderstyle Add
	alpha 0.8
	Scale 0.6
	Speed 10
	states {
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_JumpIf (ACS_ExecuteWithResult (909) < 0, "LowFX")
		TNT1 A 0 A_Jump(96,"Die")
		TNT1 A 0 A_Jump(128,"AltSpawn")
		VOLX ABCDEFCBA 2 bright
		stop
	AltSpawn:
		VOLX ACBDFECBA 2 bright
		stop
	LowFx:
		TNT1 A 0 A_Jump(128,1)
		goto Spawn+2
	Die:
		VOLX A 0
		stop
	}
}

actor VoltageTrailFX : VoltageSpark {scale 0.25}

/*actor VoltagePlasmah {
	+CLIENTSIDEONLY -ACTIVATEIMPACT
	-ACTIVATEPCROSS +NOBLOCKMAP
	+FORCEXYBILLBOARD +NOGRAVITY
	+NOCLIP +NONETID +DOOMBOUNCE
	renderstyle Add
	alpha 0.73
	Radius 8
	Height 8
	Scale 0.69
	VSpeed 0.33
	states {
	Spawn:
		TNT1 A 0
		E_P2 A 0 A_JumpIf (ACS_ExecuteWithResult(910, 0) == 0,"Software") //If software, go to special reduction state.
		E_P2 ABCDEFGHIJJKKKLLLMMM 2 A_FadeOut(0.04)
		stop
	Death:
		TNT1 A 0
		stop
	Software:
		E_P2 A 0 A_Jump(152,1) //This would be where we'd have a "effect reduction" CVAR. The more, the less the chance of it appearing! :D
		stop
		E_P2 A 0
		Goto Spawn+2
	}
}*/

actor VoltageTrailPuff : BulletPuff {
	+PUFFGETSOWNER
	+ALWAYSPUFF
	+PUFFONACTORS
	states {
	Spawn:
		TNT1 A 0
		// TNT1 A 1 ACS_ExecuteAlways (915, 0, 0)
		stop
	}
}

// DECAY CLUSTERS (power generator)

actor VoltageDecayClusterDamage {
	+NOBLOCKMAP
	+NOGRAVITY
	+NOINTERACTION
	damagetype "Energy"
	states {
	Spawn:
		TNT1 AAAAAAAAAAAAAAAAAAA 5 A_Explode (5, 96)
		stop
	}
}

actor VoltageDecayClusterFX {
	+CLIENTSIDEONLY
	+NOBLOCKMAP
	+NOGRAVITY
	+NOINTERACTION
	damagetype "Energy"
	states {
	Spawn:
		TNT1 AAAAAAAAAAAAAAAAAAA 5 A_SpawnItemEx ("VoltageDecay", random (-48, 48), random (-48, 48), random (0, 96))
		stop
	}
}

actor VoltageDecayCluster {
	+NOBLOCKMAP
	+NOGRAVITY
	+NOINTERACTION
	states {
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx ("VoltageDecayCluster")
		TNT1 A 0 A_SpawnItemEx ("VoltageDecayClusterFX")
		stop
	}
}