actor ProtoBuster : Weapon
{
Weapon.AmmoUse 1
Weapon.AmmoGive 3
Weapon.SlotNumber 1
scale 2.0
Obituary "%o was bombed by %k's Proto Buster."
Inventory.Pickupmessage "You got the Proto Buster!"
weapon.ammotype "BusterAmmo"
+WEAPON.AMMO_OPTIONAL
+WEAPON.DONTBOB
States
{
Spawn:
WEA2 Q 1
stop
Ready:
PROC J 0 A_JumpIfInventory("Once",1,"Ready2")
PROC J 0 A_GiveInventory("Once",1)
Goto Ready2+1
Ready2:
PROC J 0 ACS_ExecuteAlways(998,0,36)
PROC J 0 A_TakeInventory("ProtoCharge",999)
PROC LK 1 A_WeaponReady
PROC J 0 A_SpawnItemEx("ProtoShieldX",23,-17,8,momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM, 0)
PROC J 0 A_SpawnItemEx("ProtoShieldFX",23,-17,8,momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM, 0)
PROC J 1 A_WeaponReady
Goto Ready2+4
Deselect:
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
PROC J 1 A_Lower
Loop
Select:
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
PROC J 1 A_Raise
Loop
Fire:
PROC D 0 A_JumpIfNoAmmo("Hold")
PROC D 0 A_PlaySoundEx("weapon/mbuster","Weapon")
PROC D 0 A_FireCustomMissile("ProtoShot",0,0,8,0)
PROC KLD 1 A_TakeInventory("ProtoCharge",999)
PROC EF 3
PROC D 3 A_Refire
goto Ready2+2
Fire2:
PROC D 0 A_TakeInventory("ProtoCharge",999)
PROC F 3 A_PlaySoundEx("weapon/pshot","Weapon")
PROC F 3 A_FireCustomMissile("ProtoShot2",0,0,8,0)
PROC EFD 3
PROC D 0 A_Refire
goto Ready2+2
Fire3:
PROC D 0 A_TakeInventory("ProtoCharge",999)
PROC D 0 A_PlaySoundEx("weapon/pshot","Weapon")
PROC F 3 //A_FireCustomMissile("ProtoShotFX",0,0,8,0)
PROC F 3 A_FireCustomMissile("ProtoShot3",0,0,8,0)
PROC ED 3
PROC D 9
PROC D 0 A_Refire
goto Ready2+1
Hold:
PROC D 0 A_JumpIfInventory("ProtoCharge",32,"Charge2")
PROC D 0 A_JumpIfInventory("ProtoCharge",18,"Charge")
PROC D 1 A_GiveInventory("ProtoCharge",1)
PROC D 0 A_Refire
Goto Ready2+1
Charge:
PROC D 0 A_JumpIfInventory("ProtoCharge",32,"Charge2")
PROC D 0 A_JumpIfInventory("ProtoCharge",19,"Charge1")
PROC D 0 A_PlaySoundEx("weapon/pcharge","Weapon")
PROC LK 1 
Goto Charge1
Charge1:
PROC J 0 A_JumpIfInventory("ProtoCharge",32,"BotCheck")
PROC H 0 
PROC H 0 ACS_ExecuteAlways(991,0,63)
PROC J 0 A_SpawnItemEx("ProtoShieldX",23,-17,8,momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM, 0)
PROC J 0 A_SpawnItemEx("ProtoShieldFX",23,-17,8,momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM, 0)
PROC J 1 A_GiveInventory("ProtoCharge",1)
PROC J 0 A_SpawnItemEx("ProtoShieldX",23,-17,8,momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM, 0)
PROC J 0 A_SpawnItemEx("ProtoShieldFX",23,-17,8,momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM, 0)
PROC H 1 A_GiveInventory("ProtoCharge",1)
PROC H 0 ACS_ExecuteAlways(991,0,36)
PROC J 0 A_SpawnItemEx("ProtoShieldX",23,-17,8,momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM, 0)
PROC J 0 A_SpawnItemEx("ProtoShieldFX",23,-17,8,momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM, 0)
PROC H 1
PROC J 0 A_SpawnItemEx("ProtoShieldX",23,-17,8,momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM, 0)
PROC J 0 A_SpawnItemEx("ProtoShieldFX",23,-17,8,momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM, 0)
PROC H 1
PROC H 0 A_Refire
Goto Fire2
BotCheck:
SAPT A 0 ACS_ExecuteAlways(974,0)
Goto Charge2
Charge2:
PROC H 0 ACS_ExecuteAlways(991,0,64)
PROC J 0 A_SpawnItemEx("ProtoShieldX",23,-17,8,momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM, 0)
PROC J 0 A_SpawnItemEx("ProtoShieldFX",23,-17,8,momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM, 0)
PROC I 1
PROC H 0 ACS_ExecuteAlways(991,0,36)
PROC J 0 A_SpawnItemEx("ProtoShieldX",23,-17,8,momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM, 0)
PROC J 0 A_SpawnItemEx("ProtoShieldFX",23,-17,8,momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM, 0)
PROC H 1
PROC H 0 A_Refire
Goto Fire3
}
}

actor ProtoCharge : Inventory
{
inventory.amount 1
inventory.maxamount 52
}

actor ProtoShot
{
PROJECTILE
+LOOKALLAROUND
+SKYEXPLODE
+THRUGHOST
+DONTBLAST
+DONTREFLECT
damagetype "Proto"
//seesound "weapon/mbuster"
Speed 26
Damage (20)
radius 5
height 5
scale 2.5
States
{
Spawn:
TNT1 A 2
BUST A 1
goto spawn+1
Death:
BUST A 1
stop
}
}

actor ProtoShot2
{
PROJECTILE
+LOOKALLAROUND
+SKYEXPLODE
+DONTBLAST
damagetype "Buster"
//seesound "weapon/mbuster"
Speed 26
Damage (21)
radius 20
height 20
scale 2.5
States
{
Spawn:
MMFX D 4
loop
}
}


actor ProtoShot3
{
PROJECTILE
+LOOKALLAROUND
+SKYEXPLODE
+DONTBLAST
//seesound "weapon/mbuster"
Speed 60
Damage (50)
radius 20
height 20
scale 2.5
States
{
Spawn:
PROC ABC 2
loop
}
}


actor ProtoShotFX
{
+CLIENTSIDEONLY
-SOLID
+NOGRAVITY
scale 2.5
States
{
Spawn:
MMFX BCD 1
stop
}
}

actor ProtoShieldX
{
+MISSILE
Speed 0
+DONTSPLASH
Damage 0
Height 32
Radius 25
health 9999
scale 2.5
damagefactor "Proto", 0.0
+SHOOTABLE
+NOBLOOD
-SOLID
//+NOBLOCKMAP
painchance 256
bloodtype ""
//+DONTRIP
+DONTRIP
+GHOST
//+NOINTERACTION
+NORADIUSDMG
//+REFLECTIVE
States
{
Spawn:
TNT1 A 0
TNT1 A 2
stop
Death:
TNT1 A 0 //A_PlaySound("item/protoreflect")
TNT1 A 1
stop
Pain:
TNT1 A 0 
TNT1 A 2 A_PlaySound("item/protoreflect")
stop
}
}

actor ProtoShieldFX
{
-SOLID
+NOGRAVITY
+NOBLOCKMAP
+FIXMAPTHINGPOS
Height 0
Radius 0
scale 2.5
+CLIENTSIDEONLY
+NOINTERACTION
States
{
Spawn:
TNT1 A 0
PROS A 2
stop
}
}