actor CrystalineCaveWep_NormalBar : NormalBar{args 176, 184}
actor CrystalineCaveWep_ScriptBar : ScriptBar{}
Actor CrystalineCaveWep : BaseMM8BDMWep
{
Weapon.AmmoUse 1
Weapon.AmmoGive 56
Weapon.SlotNumber 6
Obituary "$OB_CRYSTALINECAVE"
Tag "$TAG_CRYSTALINECAVE"
Inventory.Pickupmessage "$PU_CRYSTALINECAVE"
weapon.ammotype "CrystalineCaveAmmo"
inventory.icon "CRCVICON"
States
{
SpawnLoop:
CRCV Z -1
loop
Ready:
CRCV A 0 ACS_NamedExecuteWithResult("core_weaponcolor",COLOR_CRYSTALINECAVE)
CRCV A 1 A_WeaponReady
Goto Ready+1
ReadyC: Goto Ready+1
Deselect:
CRCV A 0
Goto DeselectSwap
Select:
CRCV A 0
Goto SelectSwap
Fire:
CRCV A 1 A_JumpIfInventory("CrystalineCaveAmmo",56,"FireCharge")
goto NoAmmo
FireCharge:
CRCV B 0 A_PlaySoundEx("Weapon/CrystalCavernCharge","Weapon",0)
CRCV B 0 A_SpawnItemEx("CrystalineCaveWatcher")
CRCV BBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 1 A_SpawnItemEx("CrystalineCaveCharger",random(256,-256),random(256,-256),random(256,-256))
CRCV CCCCC 1 A_GiveInventory("SpawnCrystalineCave",1)
CRCV A 0 A_GiveInventory("WeaponCharge",1)
FireOnslaught:
CRCV A 0 A_JumpIfNoAmmo("FireOnslaughtEnd")
CRCV A 0 A_PlaySoundEx("weapon/RabidBurst","Weapon")
CRCV A 0 A_TakeInventory("CrystalineCaveAmmo",1,TIF_NOTAKEINFINITE)
CRCV A 0 A_FireCustomMissile("CrystalineCaveBat",frandom(-8,8),0,4,0,0,frandom(-8,8))
CRCV BCC 1 A_GiveInventory("SpawnCrystalineCave",1)
CRCV C 1 A_Refire("FireOnslaught") 
FireOnslaughtEnd:
CRCV A 0 A_TakeInventory("WeaponCharge",1)
CRCV CBA 10
Goto Ready+1
NoAmmo:
CRCV A 1 ACS_NamedExecuteAlways("core_noammo",0)
Goto Ready+1
}
}

Actor CrystalineCaveAmmo : Ammo
{
	Inventory.Amount 1
	Inventory.MaxAmount 56
	+INVENTORY.IGNORESKILL
}

actor CrystalineCaveBat : BasicProjectile
{
PROJECTILE
+DONTBLAST
+HEXENBOUNCE
Radius 24
Height 24
reactiontime 245
Obituary "$OB_CRYSTALINECAVE"
damagetype "CrystalineCave"
scale 2.5
damage (CallACS("vile_cbm_damage",10))
speed 45
states
{
Spawn:
CRCV J 0
CRCV LLMMNN 1 A_Countdown
loop
Death:
RDBT JKLMN 2
stop
}
}

actor CrystalineCaveCharger : BasicGraphicEffect
{
-SOLID
+NOGRAVITY
+MISSILE
States
{
Spawn:
TNT1 A 0
TNT1 A 1 A_FaceTarget
TNT1 A 0 A_CustomMissile("CrystalineCaveChargeFX",0,0,0,0)
stop
}
}

actor CrystalineCaveChargeFX : BasicGraphicEffect
{
scale 2.5
+THRUGHOST
PROJECTILE
speed 30
states
{
SpawnFrame:
CRCV QRQR 2
stop
}
}

actor CrystalineCaveFrame1 : Powerup { powerup.duration 3 }
actor CrystalineCaveFrame2 : CrystalineCaveFrame1 { powerup.duration 6 }

actor SpawnCrystalineCave : CustomInventory
{
	States
	{
	Pickup:
		TNT1 A 0 A_JumpIfInventory("CrystalineCaveFrame1", 1, "Frame1")
		TNT1 A 0 A_JumpIfInventory("CrystalineCaveFrame2", 1, "Frame2")
		TNT1 A 0 A_GiveInventory("CrystalineCaveFrame1", 1)
		TNT1 A 0 A_GiveInventory("CrystalineCaveFrame2", 1)
	Frame1:
		TNT1 A 0 A_SpawnItemEx("CrystalineCrystal1",38*cos(pitch), 0, 38*sin(-pitch)+32, momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM | SXF_TRANSFERPITCH, 0)
		stop
	Frame2:
		TNT1 A 0 A_SpawnItemEx("CrystalineCrystal2",38*cos(pitch), 0, 38*sin(-pitch)+32, momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM | SXF_TRANSFERPITCH, 0)
		stop
	}
}

actor CrystalineCrystal1 : BasicGraphicEffect
{
scale 3.0
+NOINTERACTION
+CLIENTSIDEONLY
alpha 1.0
renderstyle add
+BRIGHT
states
{
SpawnFrame:
CRCV O 1
stop
}
}
actor CrystalineCrystal2 : CrystalineCrystal1
{
states
{
SpawnFrame:
CRCV P 1
stop
}
}

actor CrystalineCaveWatcher : BasicWatcher
{
States
{
Spawn:
TNT1 A 0
TNT1 A 1
TNT1 BBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 1 A_GiveToTarget("SpawnCrystalineCave",1)
stop
}
}
