actor MagnetSphereWep_NormalBar : NormalBar { args 116, 77 }

actor MagnetSphereWep : BaseMM8BDMWep 
{
Weapon.AmmoType "MagnetSphereAmmo"
Weapon.AmmoUse 4
Weapon.AmmoGive 28
Weapon.SlotNumber 5
Obituary "$OB_MAGNETSPHERE"
Tag "$TAG_MAGNETSPHERE" 
Inventory.Pickupmessage "$PU_MAGNETSPHERE"
inventory.pickupsound "weapon/weaponup"
+WEAPON.AMMO_OPTIONAL
+WEAPON.NOAUTOAIM
inventory.icon "TMGSI" 
Scale 2.0
States
{
SpawnLoop:
TMGS A -1 
loop
Ready: 
TMGS B 0 ACS_NamedExecuteWithResult("core_weaponcolor",CLR_MAGNETSPHERE) 
TMGS B 1 A_WeaponReady
Goto Ready+1
Deselect:
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
TMGS B 1 A_Lower
Loop
Select:
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
TMGS B 1 A_Raise
Loop
Fire:
Hold:
TMGS B 0 A_JumpIfNoAmmo("NoAmmo")
GRAV U 0 A_GiveInventory("MagnetSphereFlag",1)
TMGS B 0 A_PlaySoundEx("weapons/mm3/magnetmissilefire","Weapon") //:D
TMGS B 0 A_FireCustomMissile("MagnetSphere",0,1,8,0)
TMGS C 1
GRAV U 0 A_TakeInventory("MagnetSphereFlag",1)
TMGS C 1
TMGS DE 2
TMGS E 15
TMGS DC 2
TMGS B 15
TMGS B 0 A_Refire
Goto Ready+1
NoAmmo:
TMGS B 1 ACS_NamedExecuteAlways("core_noammo",0)
Goto Ready+1
}
}

actor MagnetSphereAmmo : Ammo
{
inventory.amount 1
inventory.maxamount 28
+INVENTORY.IGNORESKILL
}

actor MagnetSphereFlag : Once
{
}


actor MagnetSphere : BasicProjectile
{
Projectile
scale 2.5
+FORCEXYBILLBOARD
+Bright
+Ripper
+SkyExplode
+ExplodeonWater
height 17
radius 17
Obituary "$OB_MAGNETSPHERE"
Damagetype "MagnetSphere"
speed 20
var int user_PierceRipper;
Damage(CallACS("burst_cbm_damage",40))
States
{
Spawn:
TNT1 A 0
SpawnLoop:
TNT1 E 0 A_SpawnItemEx("MagnetSphereBeamGenerator",0,0,0,0,0,0,0,0,0,CallACS("core_NewUniqueTID"))
TNT1 E 0 ACS_NamedExecuteWithResult("core_setTIDsPointerToThis",CallACS("core_CurrentUniqueTID"),AAPTR_MASTER)
TNT1 E 0 ACS_NamedExecuteWithResult("core_ClearUniqueTID",0)
TMGS B 0 A_PlaySoundEx("weapons/mspheretravel","Body")
//TMGS FGHIJ 3 A_SpawnItemEX("ElectrifyEffect")
TMGS F 1 A_SpawnItemEX("ElectrifyEffect")
TMGS F 0 //A_JumpIfInTargetInventory("MagnetSphereFlag",1,"Death")
TMGS F 1 A_SpawnItemEX("ElectrifyEffect")
TMGS F 0 A_JumpIfInTargetInventory("MagnetSphereFlag",1,"Death")
TMGS F 1 
TMGS F 0 A_JumpIfInTargetInventory("MagnetSphereFlag",1,"Death")
TMGS G 1 A_SpawnItemEX("ElectrifyEffect")
TMGS G 0 A_JumpIfInTargetInventory("MagnetSphereFlag",1,"Death")
TMGS G 1 
TMGS G 0 A_JumpIfInTargetInventory("MagnetSphereFlag",1,"Death")
TMGS G 1 
TMGS G 0 A_JumpIfInTargetInventory("MagnetSphereFlag",1,"Death")
TMGS H 1 A_SpawnItemEX("ElectrifyEffect")
TMGS H 0 A_JumpIfInTargetInventory("MagnetSphereFlag",1,"Death")
TMGS H 1 
TMGS H 0 A_JumpIfInTargetInventory("MagnetSphereFlag",1,"Death")
TMGS H 1 
TMGS H 0 A_JumpIfInTargetInventory("MagnetSphereFlag",1,"Death")
TMGS I 1 A_SpawnItemEX("ElectrifyEffect")
TMGS I 0 A_JumpIfInTargetInventory("MagnetSphereFlag",1,"Death")
TMGS I 1 
TMGS I 0 A_JumpIfInTargetInventory("MagnetSphereFlag",1,"Death")
TMGS I 1 
TMGS I 0 A_JumpIfInTargetInventory("MagnetSphereFlag",1,"Death")
TMGS J 1 A_SpawnItemEX("ElectrifyEffect")
TMGS J 0 A_JumpIfInTargetInventory("MagnetSphereFlag",1,"Death")
TMGS J 1 
TMGS J 0 A_JumpIfInTargetInventory("MagnetSphereFlag",1,"Death")
TMGS J 1 
TMGS J 0 A_JumpIfInTargetInventory("MagnetSphereFlag",1,"Death")
goto SpawnLoop+3
Death:
TNT1 A 0 A_SpawnItemEX("ElectrifyEffect")
TNT1 A 0 A_RemoveChildren(true)
TMGS FFFGGGHHHIIIJJJ 1 A_Fadeout(0.1)
stop
}
}

actor MagnetSphereBeamGenerator : BasicProjectile
{
Projectile
scale 2.5
+FORCEXYBILLBOARD
+Bright
+Ripper
+BounceonWalls
+SeekerMissile //huehue
//+NoInteraction
height 17
radius 18 
Obituary "$OB_MAGNETSPHERE"
Damagetype "MagnetSphere"
speed 15
var int user_PierceRipper;
Damage(0)
States
{
Spawn:
TNT1 A 0
SpawnLoop:
TMGS E 0 A_SeekerMissile (0, 90, SMF_PRECISE|SMF_LOOK|SMF_CURSPEED, 256, 8)
TMGS E 0 A_JumpIfTargetInLOS("FireBeam",0,JLOSF_PROJECTILE,400) //650
TNT1 A 1 A_Warp(AAPTR_MASTER,10,0,0,0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE|WARPF_USECALLERANGLE)
loop
FireBeam:
TNT1 A 1 A_Warp(AAPTR_MASTER,10,0,0,0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE|WARPF_USECALLERANGLE)
ESPA D 0 A_PlaySoundEx("weapons/mmv/electricshockfire", "SoundSlot5")
TMGS A 0 A_FaceTracer(0,0)
// [Trill] This fixes the trail not being aimed properly online
TMGS E 0 A_SpawnItemEx("MagnetSphereBeamTrailSpawner",0,0,5-pitch,0,0,pitch)
TMGS E 0 A_SpawnItemEx("MagnetSphereBeam",0,0,5,cos(pitch)*1,0,sin(pitch)*1)
TNT1 A 0 A_RearrangePointers(AAPTR_DEFAULT, AAPTR_DEFAULT, AAPTR_NULL)
TNT1 AAAAAAAA 1 A_Warp(AAPTR_MASTER,10,0,0,0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE|WARPF_USECALLERANGLE)
goto SpawnLoop
Death:
TNT1 A 1
stop
}
}

actor MagnetSphereBeam : BasicFastProjectile
{
height 9
radius 9
+FORCEXYBILLBOARD
damagetype "MagnetSphereBeam"
Obituary "$OB_MAGNETSPHEREBEAM"
damage (CallACS("burst_cbm_damage",5))
States
{
Spawn:
TNT1 A 0
SpawnLoop:
TNT1 A 1 A_ScaleVelocity(200)
SpawnLoop2:
TNT1 A  1
loop
Death:
TNT1 A 0 A_SpawnItemEX("ElectrifyEffect")
stop
}
}

actor MagnetSphereBeamTrailSpawner : BasicWatcher
{
States
{
Spawn:
TNT1 A 0 nodelay A_SpawnItemEx("MagnetSphereBeamTrailStart",0,0,0,cos(velz),0,sin(velz))
TNT1 A 5
stop
}
}

actor MagnetSphereBeamTrail : BasicGraphicEffect
{
scale 2.5
+FORCEXYBILLBOARD
+DontSplash
-NoInteraction
+DontReflect //Using fast projectile hitbox above so no reflect :<
+Bright
height 8
radius 8
speed 1
damage (0)
States
{
SpawnFrame:
// [Russ] Better safety checking, also added SXF_TRANSFERPITCH to the recursive beam call
TNT1 B 0 A_SetPitch(pitch-1)
TNT1 B 0 A_JumpIf(pitch<=1, "Death")
TNT1 B 0 A_SpawnItemEx("MagnetSphereBeamTrail",momx*13,momy*13,momz*13,momx,momy,momz,0,SXF_TRANSFERPITCH|SXF_ABSOLUTEMOMENTUM|SXF_ABSOLUTEPOSITION|SXF_NOCHECKPOSITION)//Tsuki your still a bastard :I
TNT1 A 0 A_Jump(128,"Beam2")
Beam1:
TMGS Q 0 A_Jump(256,1,4)
TMGS KKKLMLM 1 A_ChangeVelocity(frandom(-2,2),frandom(-2,2),frandom(-2,2))
stop
Beam2:
TMGS Q 0 A_Jump(256,1,4)
TMGS NNNOPOP 1 A_ChangeVelocity(frandom(-2,2),frandom(-2,2),frandom(-2,2))
stop
Death:
TNT1 A 0
Stop
}
}

// [Russ] Extra safety measure, gives this a maximum range
actor MagnetSphereBeamTrailStart : MagnetSphereBeamTrail
{
	States
	{
	Spawn:
		TNT1 A 0 nodelay A_SetPitch(70)
		goto super::Spawn
	}
}

