actor SearchSnakeWep : MegaBuster 10042
{
Weapon.AmmoUse 1
Weapon.AmmoGive 56
Weapon.SlotNumber 4
Obituary "%o was caught by one of %k's Search Snakes."
Inventory.Pickupmessage "Power up! Search Snake!"
weapon.ammotype "SnakeAmmo"
inventory.pickupsound "weapon/weaponup"
+WEAPON.AMMO_OPTIONAL
inventory.icon "SNAKESI"
Scale 2.0
States
{
Spawn:
WEAP K 1
loop
Ready:
WOOD I 0 ACS_ExecuteAlways(998,0,12)
WOOD I 1 A_WeaponReady
Goto Ready+1
Deselect:
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
WOOD I 1 A_Lower
Loop
Select:
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
WOOD I 1 A_Raise
Loop
Fire:
WOOD I 0 A_JumpIfNoAmmo("NoAmmo")
WOOD I 0 A_PlaySoundEx("weapon/mbuster","Weapon")
WOOD I 0 A_TakeInventory("SnakeAmmo",1)
WOOD I 0 A_SpawnItemEx("SearchSnakeStart",6,0,0,8,0,8,0,0,0)
WOOD JK 5
WOOD I 4
WOOD I 0 A_Refire
Goto Ready+1
NoAmmo:
WOOD I 1 ACS_Execute(979,0)
Goto Ready+1
}
}

actor SnakeAmmo : Ammo
{
inventory.amount 1
inventory.maxamount 56
}


actor SearchSnakeStart
{
PROJECTILE
-NOGRAVITY
Damage (20)
Height 5
Radius 6
Scale 2.5
States
{
Spawn:
SNAK A 1
loop
XDeath:
Crash:
TNT1 A 1
stop
Death:
TNT1 A 1 A_SpawnItemEx("SearchSnake",0,0,0,18,0,0,0,0,0)
stop
}
}

actor SearchSnake// : MaceFX1
{
-SOLID
PROJECTILE
//-NOGRAVITY
+DONTBLAST
bouncefactor 0.0
maxstepheight 0
Damage (28)
Height 5
Radius 6
Scale 2.5
gravity 3.0
States
{
Spawn:
SNAK A 1
SNAK A 1 A_ChangeFlag("FLOORHUGGER",1)
SNAK A 0 A_ChangeFlag("FLOORHUGGER",0)
SNAK A 1
SNAK A 0 A_JumpIf(z-floorz!=0,"Down")
SNAK A 1
SNAK A 0 A_JumpIf(z-floorz!=0,"Down")
SNAK A 1
SNAK A 0 A_JumpIf(z-floorz!=0,"Down")
SNAK B 1
SNAK A 0 A_JumpIf(z-floorz!=0,"Down")
SNAK B 1
SNAK A 0 A_JumpIf(z-floorz!=0,"Down")
SNAK B 1
SNAK A 0 A_JumpIf(z-floorz!=0,"Down")
Goto Spawn+3
Death:
TNT1 A 1 A_SpawnItemEx("SearchSnakeUp",0,0,0,0,0,18,0,0)//A_CustomMissile("SearchSnakeUp"0,0,0,2,0)//
stop
XDeath:
Crash:
TNT1 A 1
stop
Down:
TNT1 A 1 A_SpawnItemEx("SearchSnakeDown",0,0,0,0,0,-18,0,0)
stop
}
}

actor SearchSnakeUp
{
-SOLID
+MISSILE
+NOGRAVITY
+ACTIVATEPCROSS
+NOBLOCKMAP
+NOBLOCKMONST
+DROPOFF
Height 5
Scale 2.5
Radius 6
States
{
Spawn:
SNAK C 0
SNAK C 0 A_ChangeFlag("MISSILE",0) // May need to do magnet missile method to get past impassible lines
SNAK C 1 A_Recoil(-1)
SNAK C 0 A_SpawnItemEx("SnakeDamager",0,0,0,0,0,30)
SNAK C 0 A_JumpIf(z-ceilingz==0-5,"Death2")
SNAK C 0 A_JumpIf(momx!=0.0,"Ledge")
SNAK C 0 A_JumpIf(momy!=0.0,"Ledge")
SNAK C 1 A_Recoil(-1)
SNAK C 0 A_SpawnItemEx("SnakeDamager",0,0,0,0,0,30)
SNAK C 0 A_JumpIf(z-ceilingz==0-5,"Death2")
SNAK C 0 A_JumpIf(momx!=0.0,"Ledge")
SNAK C 0 A_JumpIf(momy!=0.0,"Ledge")
SNAK C 1 A_Recoil(-1)
SNAK C 0 A_SpawnItemEx("SnakeDamager",0,0,0,0,0,30)
SNAK C 0 A_JumpIf(z-ceilingz==0-5,"Death2")
SNAK C 0 A_JumpIf(momx!=0.0,"Ledge")
SNAK C 0 A_JumpIf(momy!=0.0,"Ledge")
SNAK D 1 A_Recoil(-1)
SNAK C 0 A_SpawnItemEx("SnakeDamager",0,0,0,0,0,30)
SNAK C 0 A_JumpIf(z-ceilingz==0-5,"Death2")
SNAK C 0 A_JumpIf(momx!=0.0,"Ledge")
SNAK C 0 A_JumpIf(momy!=0.0,"Ledge")
SNAK D 1 A_Recoil(-1)
SNAK C 0 A_SpawnItemEx("SnakeDamager",0,0,0,0,0,30)
SNAK C 0 A_JumpIf(z-ceilingz==0-5,"Death2")
SNAK C 0 A_JumpIf(momx!=0.0,"Ledge")
SNAK C 0 A_JumpIf(momy!=0.0,"Ledge")
SNAK D 1 A_Recoil(-1)
SNAK C 0 A_SpawnItemEx("SnakeDamager",0,0,0,0,0,30)
SNAK C 0 A_JumpIf(z-ceilingz==0-5,"Death2")
SNAK C 0 A_JumpIf(momx!=0.0,"Ledge")
SNAK C 0 A_JumpIf(momy!=0.0,"Ledge")
loop
Ledge:
TNT1 A 1 A_SpawnItemEx("SearchSnake",4,0,4,18,0,0,0,0,0)
stop
//Death:
SNAK C 0
SNAK C 1 A_Recoil(-1)
SNAK C 0 A_JumpIf(z-ceilingz==0-5,"Death2")
SNAK C 0 A_JumpIf(momx!=0.0,"Ledge")
SNAK C 0 A_JumpIf(momy!=0.0,"Ledge")
SNAK C 1 A_Recoil(-1)
SNAK C 0 A_JumpIf(z-ceilingz==0-5,"Death2")
SNAK C 0 A_JumpIf(momx!=0.0,"Ledge")
SNAK C 0 A_JumpIf(momy!=0.0,"Ledge")
SNAK C 1 A_Recoil(-1)
SNAK C 0 A_JumpIf(z-ceilingz==0-5,"Death2")
SNAK C 0 A_JumpIf(momx!=0.0,"Ledge")
SNAK C 0 A_JumpIf(momy!=0.0,"Ledge")
SNAK D 1 A_Recoil(-1)
SNAK C 0 A_JumpIf(z-ceilingz==0-5,"Death2")
SNAK C 0 A_JumpIf(momx!=0.0,"Ledge")
SNAK C 0 A_JumpIf(momy!=0.0,"Ledge")
SNAK D 1 A_Recoil(-1)
SNAK C 0 A_JumpIf(z-ceilingz==0-5,"Death2")
SNAK C 0 A_JumpIf(momx!=0.0,"Ledge")
SNAK C 0 A_JumpIf(momy!=0.0,"Ledge")
SNAK D 1 A_Recoil(-1)
SNAK C 0 A_JumpIf(z-ceilingz==0-5,"Death2")
SNAK C 0 A_JumpIf(momx!=0.0,"Ledge")
SNAK C 0 A_JumpIf(momy!=0.0,"Ledge")
loop
Goto Spawn
Crash:
XDeath:
Death2:
TNT1 A 1
stop
}
}

actor SnakeDamager 
{
PROJECTILE
radius 3
height 3
damage (10)
States
{
Spawn:
TNT1 A 2
stop
}
}

actor SearchSnakeDown
{
-SOLID
+NOGRAVITY
+ACTIVATEPCROSS
+NOBLOCKMAP
+DROPOFF
+MISSILE
Height 5
Scale 2.5
Radius 6
States
{
Spawn:
SNAK E 0
SNAK C 0 A_ChangeFlag("MISSILE",0)
SNAK E 1 A_JumpIf(z-floorz==0,"Death")
SNAK E 1 A_JumpIf(z-floorz==0,"Death")
SNAK E 1 A_JumpIf(z-floorz==0,"Death")
SNAK F 1 A_JumpIf(z-floorz==0,"Death")
SNAK F 1 A_JumpIf(z-floorz==0,"Death")
SNAK F 1 A_JumpIf(z-floorz==0,"Death")
loop
Death:
TNT1 A 1 A_SpawnItemEx("SearchSnake",4,0,4,18,0,0,0,0,0)
stop
}
}