actor ShrinkAssist
{
Obituary "$OB_SHRINK"
PROJECTILE
+THRUSPECIES
+SEEKERMISSILE
+LOOKALLAROUND
damagetype "Shotman"
Speed 25
Damage (22)
radius 20
height 20
scale 2.5
+DOOMBOUNCE
wallbouncefactor 1.0
bouncefactor 1.0
bouncecount 10
reactiontime 10
Species "Hothead"
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode", 1)
Idle1:
ANKO GGGGGGGGGGGGGG 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Death")
ANKO G 0 A_Stop
ANKO EEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFFEEFF 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Death")
ANKO E 0 A_Recoil(-25)
ANKO E 0 A_SeekerMissile(90, 90, SMF_LOOK, 256, 10)
ANKO G 0 A_Countdown
loop

Death:
TNT1 A 0 A_SpawnItemEx("GenericAssistDeath", 0, 0, 26)
stop
}
}

Actor MachBallAssist//to test it quickly:give mediumultimateammo 300; summon tangosummon
{
PROJECTILE
Scale 2.5
Speed 40
-NOGRAVITY
Gravity 2.0
Damage (27)
DamageType "StoneSpin"
Obituary "%o could not slide under %k's Mach Ball."
Radius 50
Height 50
reactionTime 525
mass 50
+DOOMBOUNCE
-BOUNCEONFLOORS
+NOEXPLODEFLOOR
+RIPPER
BounceCount 2
BounceFactor 0.9
WallBounceFactor 0.9
var int user_bounces;
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
MABA C 0 A_SetUserVar("user_bounces",mass)//TNT1 A 0 A_SetArg(0,20)
MABA C 0 A_PlaySoundEx("misc/catcherdrop","Body")
Spawn_L:
TNT1 A 0 A_Countdown
MABA C 1 A_CheckFloor("Bounce.Floor")
MABA C 0 A_SetUserVar("user_bounces",user_bounces - 1)//A_CountDown
Goto Spawn_L
Bounce.Floor:
//MABA A 0 A_ScaleVelocity(0.9)
//MZBU A 0 A_CountDownArg(0,"Death")
MABA C 0 A_Quake(4,10,0,384)
TNT1 A 0 A_Countdown
MABA C 0 A_PlaySoundEX("weapon/hardquake","Weapon")
MABA C 0 A_SetUserVar("user_bounces",user_bounces - 1)
MABA C 0 A_JumpIf(mass <= 0,"Death")
MABA C 0 A_JumpIf(user_bounces <= 0,"Death")
MABA C 3 ThrustThingZ(0,50,0,0)
Goto Spawn+4
Death:
METT G 0 A_CheckFloor(1)
goto Death2

TNT1 A 0 A_SetGravity(0.0)
TNT1 A 0 A_ChangeVelocity(0,0,0,CVF_RELATIVE|CVF_REPLACE)
MABA CCCBBBAAA 3

GEMB A 0 A_PlaySoundEx("weapon/gemini","weapon")
GEMB A 0 A_PlaySoundEx("weapon/mbuster","Body")

METT G 0 A_SetAngle(angle+45)
METT G 0 A_SpawnItemEx("MachBallLaser",0,0,16,20)
METT G 0 A_SetAngle(angle+90)
METT G 0 A_SpawnItemEx("MachBallLaser",0,0,16,20)
METT G 0 A_SetAngle(angle+90)
METT G 0 A_SpawnItemEx("MachBallLaser",0,0,16,20)
METT G 0 A_SetAngle(angle+90)
METT G 0 A_SpawnItemEx("MachBallLaser",0,0,16,20)
METT G 0 A_SetAngle(angle+45)
MABA AAABBBCCC 1
MABA A 0 A_PlaySound("weapon/crashexplode")
CRAS K 3 A_Explode(18,64,0)
CRAS LM  3
CRAS N 3 A_Explode(18,64,0)
CRAS OP 3
CRAS Q 3 A_Explode(18,64,0)
CRAS RS 3
CRAS T 3 A_Explode(18,64,0)
CRAS VW 3
TNT1 A 0 A_TakeInventory("LimitFlag", 1, 0, AAPTR_TARGET)
stop

Death2:
TNT1 A 0 A_SpawnItemEx("MachBallAssistForceFloor",0,0,0,0,0,2)
stop
}
}


actor MachBallLaser : GeminiLaser
{
	renderstyle add
	Obituary "%o could not slide under %k's Mach Ball."
	damagetype "Geminiman"
	Radius 8
	Height 8
	speed 80
	Damage (9)
	species "GeminiClone"
	+THRUSPECIES
	reactiontime 200
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
		GEMI A 0 A_CountDown
		GEMI A 0 bright A_SpawnItemEx("GeminiManTrail2",-momx*2/3,-momy*2/3,-momz*2/3,0,0,0,0,SXF_ABSOLUTEPOSITION)
		GEMI A 0 bright A_SpawnItemEx("GeminiManTrail2",-momx/3,-momy/3,-momz/3,0,0,0,0,SXF_ABSOLUTEPOSITION)
		GEMI A 0 bright A_SpawnItemEx("GeminiManTrail2",0,0,0,momx/4,momy/4,momz/4,0,SXF_ABSOLUTEMOMENTUM)
		GEUL A 0 bright A_SpawnItemEx("GeminiUltTrail1",-momx*2/3,-momy*2/3,-momz*2/3,0,0,0,0,SXF_ABSOLUTEPOSITION)
		GEUL A 0 bright A_SpawnItemEx("GeminiUltTrail1",-momx/3,-momy/3,-momz/3,0,0,0,0,SXF_ABSOLUTEPOSITION)
		GEUL A 0 bright A_SpawnItemEx("GeminiUltTrail1",0,0,0,momx/4,momy/4,momz/4,0,SXF_ABSOLUTEMOMENTUM)
		GEUL A 1 bright A_SpawnItemEx("GeminiUltTrail1",0,0,0,0,0,0,0,SXF_ABSOLUTEPOSITION)
		GEUL B 0 bright A_SpawnItemEx("GeminiUltTrail2",-momx*2/3,-momy*2/3,-momz*2/3,0,0,0,0,SXF_ABSOLUTEPOSITION)
		GEUL B 0 bright A_SpawnItemEx("GeminiUltTrail2",-momx/3,-momy/3,-momz/3,0,0,0,0,SXF_ABSOLUTEPOSITION)
		GEUL B 0 bright A_SpawnItemEx("GeminiUltTrail2",0,0,0,momx/4,momy/4,momz/4,0,SXF_ABSOLUTEMOMENTUM)
		GEUL B 1 bright A_SpawnItemEx("GeminiUltTrail2",0,0,0,0,0,0,0,SXF_ABSOLUTEPOSITION)
		Goto Spawn+2
	}
}

Actor MachBallAssistInit : MachBallAssist
{
States
{
Bounce.Floor:
MABA C 0 A_GiveInventory("LimitFlag", 1, AAPTR_TARGET)
MABA C 0 A_Quake(4,10,0,384)
MABA C 0 A_PlaySoundEX("weapon/hardquake","Weapon")
MABA C 0 A_SpawnItemEx("MachBallAssistSolid",0,0,0,0,0,0,0,SXF_TRANSFERPOINTERS)//,0,0,0,momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION))
MABA C 0 ACS_NamedExecuteWithResult("core_gettarget",0)
MABA C 0 ACS_NamedExecuteWithResult("core_gettracer",0)
MABA C 0 ACS_NamedExecuteWithResult("core_getmaster",0)


TNT1 A 0 A_SpawnItemEx("QuakeFX3")
TNT1 A 0 A_SpawnItemEx("QuakeFX2")
TNT1 A 0 A_SpawnItemEx("QuakeFX")
stop
}
}


Actor MachBallAssistSolid
{
//+MISSILE
//species "StonePillarType"
+USEDAMAGEEVENTSCRIPT
+THRUSPECIES
radius 40
height 120
speed 0
health 200
+FLOORHUGGER
+SHOOTABLE
//+NOCLIP
+SOLID
+QUICKTORETALIATE
+SEEKERMISSILE
//+INVULNERABLE
painchance 256
damagefactor "normal", 0.0
damagefactor "MegaWaterSAlt", 1
damagefactor "MegaWaterSAlt2",1
damagefactor "MWSBlast",1
damagefactor "StoneSpin",200
damagefactor "ConcreteSlamCheck", 1.0
//+TOUCHY
damagetype "StonemanPillar"
damage(0)
Obituary "%o could not slide under %k's Mach Ball."
reactiontime 350
scale 2.5
states
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
MABA A 0 A_GiveInventory("IsBass")
MABA A 0 A_RearrangePointers(AAPTR_TARGET,AAPTR_TARGET,AAPTR_TARGET,PTROP_NOSAFEGUARDS)
MABA A 1 A_Countdown
goto Spawn+1
pain.MegaWaterSAlt:
pain.MegaWaterSAlt2:
pain.MWSBlast:
MABA A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_gettarget",0)==ACS_NamedExecuteWithResult("core_getmaster",0),1)
goto Spawn+1

MABA A 0 A_FaceMaster
MABA A 0 A_SetAngle(angle+180)
MABA A 0 A_SpawnItemEx("MachBallAssist",0,0,16,40,0,16,0,SXF_TRANSFERPOINTERS)
stop
Death:
MABA CCBBAA 1
METT G 0 A_ChangeFlag("SOLID",0)
METT G 0 A_SetAngle(angle+45)
METT G 0 A_SpawnItemEx("MachBallLaser",0,0,16,20,0,0,0,SXF_TRANSFERPOINTERS)
METT G 0 A_SetAngle(angle+90)
METT G 0 A_SpawnItemEx("MachBallLaser",0,0,16,20,0,0,0,SXF_TRANSFERPOINTERS)
METT G 0 A_SetAngle(angle+90)
METT G 0 A_SpawnItemEx("MachBallLaser",0,0,16,20,0,0,0,SXF_TRANSFERPOINTERS)
METT G 0 A_SetAngle(angle+90)
METT G 0 A_SpawnItemEx("MachBallLaser",0,0,16,20,0,0,0,SXF_TRANSFERPOINTERS)
METT G 0 A_SetAngle(angle+45)
MABA AABBCC 1
MABA A 0 A_PlaySound("weapon/crashexplode")
CRAS K 3 A_Explode(18,64,0)
CRAS LM  3
CRAS N 3 A_Explode(18,64,0)
CRAS OP 3
CRAS Q 3 A_Explode(18,64,0)
CRAS RS 3
CRAS T 3 A_Explode(18,64,0)
CRAS VW 3
TNT1 A 0 A_TakeInventory("LimitFlag", 1, 0, AAPTR_TARGET)
stop
Death2:
TNT1 A 0 A_SpawnItemEx("MachBallAssistForceFloor",0,0,0,0,0,-2)
stop
}
}


Actor MachBallAssistForceFloor : MachBallAssist
{
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
TNT1 A 1 A_Jump(256,"Spawn_L")
wait

Bounce.Floor:
TNT1 A 1 A_Jump(256,"Death")
wait
}
}

actor MachBallAssistLaunched_CI : CustomInventory//Stoneman
{
States
{
Pickup:
TNT1 A 0 A_Quake(30,4,0,300)
TNT1 A 0 A_PlaySoundEx("weapon/stonehit","SoundSlot6")
TNT1 A 0 A_PlaySoundEx("weapon/gutstacklehit","Auto")
TNT1 A 0 A_FireCustomMissile("MachBallAssist",0,0,0,24,0,10)
stop
}
}