actor Saturn : VCBaseClass
{
Player.ScoreIcon "SATUMUGS"
player.startitem "BaseFlagPack", 1
player.displayname "Saturn"
player.soundclass "Saturnc"
player.startitem "BlackHoleBoss"
player.startitem "UltimateAttackItem3"
player.startitem "UltSoundWatcherSpawn3"
player.startitem "Base112Ammo", 112
player.startitem "BaseAltfireAmmo", 112
player.startitem "IsFromGB5"
player.viewheight 51
player.jumpz 14
States
{
Animation0:
Spawn:
SATU B 0 A_JumpIfInventory("BaseCustomFlag1",1,"Spawn.NoRing")
SATU B 1 A_JumpIf(z-floorz>0,"Jumping")
SpawnIdle:
SATU A 0 A_JumpIfInventory("BaseCustomFlag1",1,"Spawn.NoRing")
SATU A 1 A_JumpIf(z-floorz>0,"Jumping")
Goto SpawnIdle
Spawn.NoRing:
SA7U B 0 A_JumpIfInventory("BaseCustomFlag1",1,1)
Goto Spawn
SA7U B 0 A_JumpIf(momx>1||momy>1||momx<-1||momy<-1,"See.NoRing")
SA7U B 1 A_JumpIf(z-floorz>0,"Jumping.NoRing")
SpawnIdle.NoRing:
SA7U A 0 A_JumpIfInventory("BaseCustomFlag1",1,1)
Goto SpawnIdle
SA7U A 0 A_JumpIf(momx>1||momy>1||momx<-1||momy<-1,"See.NoRing")
SA7U A 1 A_JumpIf(z-floorz>0,"Jumping.NoRing")
Goto SpawnIdle.NoRing

See:
SATU B 0 A_JumpIfInventory("BaseCustomFlag1",1,"See.NoRing") SATU B 1 A_JumpIf(z-floorz>0,"Jumping")
SATU B 0 A_JumpIfInventory("BaseCustomFlag1",1,"See.NoRing") SATU B 1 A_JumpIf(z-floorz>0,"Jumping")
SATU B 0 A_JumpIfInventory("BaseCustomFlag1",1,"See.NoRing") SATU B 1 A_JumpIf(z-floorz>0,"Jumping")
SATU B 0 A_JumpIfInventory("BaseCustomFlag1",1,"See.NoRing") SATU B 1 A_JumpIf(z-floorz>0,"Jumping")
SATU B 0 A_JumpIfInventory("BaseCustomFlag1",1,"See.NoRing") SATU B 1 A_JumpIf(z-floorz>0,"Jumping")
SATU C 0 A_JumpIfInventory("BaseCustomFlag1",1,"See.NoRing") SATU C 1 A_JumpIf(z-floorz>0,"Jumping")
SATU C 0 A_JumpIfInventory("BaseCustomFlag1",1,"See.NoRing") SATU C 1 A_JumpIf(z-floorz>0,"Jumping")
SATU C 0 A_JumpIfInventory("BaseCustomFlag1",1,"See.NoRing") SATU C 1 A_JumpIf(z-floorz>0,"Jumping")
SATU C 0 A_JumpIfInventory("BaseCustomFlag1",1,"See.NoRing") SATU C 1 A_JumpIf(z-floorz>0,"Jumping")
SATU C 0 A_JumpIfInventory("BaseCustomFlag1",1,"See.NoRing") SATU C 1 A_JumpIf(z-floorz>0,"Jumping")
SATU D 0 A_JumpIfInventory("BaseCustomFlag1",1,"See.NoRing") SATU D 1 A_JumpIf(z-floorz>0,"Jumping")
SATU D 0 A_JumpIfInventory("BaseCustomFlag1",1,"See.NoRing") SATU D 1 A_JumpIf(z-floorz>0,"Jumping")
SATU D 0 A_JumpIfInventory("BaseCustomFlag1",1,"See.NoRing") SATU D 1 A_JumpIf(z-floorz>0,"Jumping")
SATU D 0 A_JumpIfInventory("BaseCustomFlag1",1,"See.NoRing") SATU D 1 A_JumpIf(z-floorz>0,"Jumping")
SATU D 0 A_JumpIfInventory("BaseCustomFlag1",1,"See.NoRing") SATU D 1 A_JumpIf(z-floorz>0,"Jumping")
SATU E 0 A_JumpIfInventory("BaseCustomFlag1",1,"See.NoRing") SATU E 1 A_JumpIf(z-floorz>0,"Jumping")
SATU E 0 A_JumpIfInventory("BaseCustomFlag1",1,"See.NoRing") SATU E 1 A_JumpIf(z-floorz>0,"Jumping")
SATU E 0 A_JumpIfInventory("BaseCustomFlag1",1,"See.NoRing") SATU E 1 A_JumpIf(z-floorz>0,"Jumping")
SATU E 0 A_JumpIfInventory("BaseCustomFlag1",1,"See.NoRing") SATU E 1 A_JumpIf(z-floorz>0,"Jumping")
SATU E 0 A_JumpIfInventory("BaseCustomFlag1",1,"See.NoRing") SATU E 1 A_JumpIf(z-floorz>0,"Jumping")
Goto Spawn+1
See.NoRing:
SA7U B 0 A_JumpIfInventory("BaseCustomFlag1",1,1) Goto See SA7U B 1 A_JumpIf(z-floorz>0,"Jumping.NoRing")
SA7U B 0 A_JumpIfInventory("BaseCustomFlag1",1,1) Goto See SA7U B 1 A_JumpIf(z-floorz>0,"Jumping.NoRing")
SA7U B 0 A_JumpIfInventory("BaseCustomFlag1",1,1) Goto See SA7U B 1 A_JumpIf(z-floorz>0,"Jumping.NoRing")
SA7U B 0 A_JumpIfInventory("BaseCustomFlag1",1,1) Goto See SA7U B 1 A_JumpIf(z-floorz>0,"Jumping.NoRing")
SA7U B 0 A_JumpIfInventory("BaseCustomFlag1",1,1) Goto See SA7U B 1 A_JumpIf(z-floorz>0,"Jumping.NoRing")
SA7U C 0 A_JumpIfInventory("BaseCustomFlag1",1,1) Goto See SA7U C 1 A_JumpIf(z-floorz>0,"Jumping.NoRing")
SA7U C 0 A_JumpIfInventory("BaseCustomFlag1",1,1) Goto See SA7U C 1 A_JumpIf(z-floorz>0,"Jumping.NoRing")
SA7U C 0 A_JumpIfInventory("BaseCustomFlag1",1,1) Goto See SA7U C 1 A_JumpIf(z-floorz>0,"Jumping.NoRing")
SA7U C 0 A_JumpIfInventory("BaseCustomFlag1",1,1) Goto See SA7U C 1 A_JumpIf(z-floorz>0,"Jumping.NoRing")
SA7U C 0 A_JumpIfInventory("BaseCustomFlag1",1,1) Goto See SA7U C 1 A_JumpIf(z-floorz>0,"Jumping.NoRing")
SA7U D 0 A_JumpIfInventory("BaseCustomFlag1",1,1) Goto See SA7U D 1 A_JumpIf(z-floorz>0,"Jumping.NoRing")
SA7U D 0 A_JumpIfInventory("BaseCustomFlag1",1,1) Goto See SA7U D 1 A_JumpIf(z-floorz>0,"Jumping.NoRing")
SA7U D 0 A_JumpIfInventory("BaseCustomFlag1",1,1) Goto See SA7U D 1 A_JumpIf(z-floorz>0,"Jumping.NoRing")
SA7U D 0 A_JumpIfInventory("BaseCustomFlag1",1,1) Goto See SA7U D 1 A_JumpIf(z-floorz>0,"Jumping.NoRing")
SA7U D 0 A_JumpIfInventory("BaseCustomFlag1",1,1) Goto See SA7U D 1 A_JumpIf(z-floorz>0,"Jumping.NoRing")
SA7U E 0 A_JumpIfInventory("BaseCustomFlag1",1,1) Goto See SA7U E 1 A_JumpIf(z-floorz>0,"Jumping.NoRing")
SA7U E 0 A_JumpIfInventory("BaseCustomFlag1",1,1) Goto See SA7U E 1 A_JumpIf(z-floorz>0,"Jumping.NoRing")
SA7U E 0 A_JumpIfInventory("BaseCustomFlag1",1,1) Goto See SA7U E 1 A_JumpIf(z-floorz>0,"Jumping.NoRing")
SA7U E 0 A_JumpIfInventory("BaseCustomFlag1",1,1) Goto See SA7U E 1 A_JumpIf(z-floorz>0,"Jumping.NoRing")
SA7U E 0 A_JumpIfInventory("BaseCustomFlag1",1,1) Goto See SA7U E 1 A_JumpIf(z-floorz>0,"Jumping.NoRing")
Goto Spawn.NoRing+1

Jumping:
TNT1 A 0 A_JumpIfInventory("BaseCustomFlag1",1,"Jumping.NoRing")
SATU I 1 A_JumpIf(z-floorz<=0,"SpawnIdle")
loop
Jumping.NoRing:
TNT1 A 0 A_JumpIfInventory("BaseCustomFlag1",1,1)
Goto Jumping
SA7U I 1 A_JumpIf(z-floorz<=0,"SpawnIdle.NoRing")
loop

Animation1:
Missile:
TNT1 A 0 A_JumpIfInventory("BaseCustomFlag1",1,"Spawn.NoRing")
SATU AAAAA 1 A_JumpIf(z-floorz>0,"JumpingMissile")
Animation2:
Missile2:
SATU GGGGG 1 A_JumpIf(z-floorz>0,"JumpingMissile2")
Goto Spawn+2
JumpingMissile:
SATU IIIII 1 A_JumpIf(z-floorz<=0,"Missile")
JumpingMissile2:
SA7U JJJJJ 1 A_JumpIf(z-floorz<=0,"Missile2")
Goto Jumping

Animation3:
SaturnSlide:
SATS AAA 1 A_JumpIfInventory("BaseCustomFlag1",1,"SaturnSlide.NoRing")
Goto SpawnIdle
SaturnSlide.NoRing:
SA7S AAA 1
Goto SpawnIdle.NoRing

Animation4: BlackHoleA: SATR AAA 1 A_JumpIf(z-floorz>0,"JumpingBlackHoleA") Goto SpawnIdle
Animation5: BlackHoleB: SATR BBB 1 A_JumpIf(z-floorz>0,"JumpingBlackHoleB") Goto SpawnIdle
Animation6: BlackHoleC: SATR CCC 1 A_JumpIf(z-floorz>0,"JumpingBlackHoleC") Goto SpawnIdle
JumpingBlackHoleA: SATU JJJ 1 A_JumpIf(z-floorz<=0,"Missile.BlackHoleRingA") Goto Jumping
JumpingBlackHoleB: SATU KKK 1 A_JumpIf(z-floorz<=0,"Missile.BlackHoleRingB") Goto Jumping
JumpingBlackHoleC: SATU LLL 1 A_JumpIf(z-floorz<=0,"Missile.BlackHoleRingC") Goto Jumping

Animation7:
SaturnStopper:
SATU YYY 1 A_JumpIf(z-floorz>0,"JumpingSaturnStopper")
Goto SpawnIdle
JumpingSaturnStopper:
SATU ZZZ 1 A_JumpIf(z-floorz<=0,"SaturnStopper")
Goto Jumping

ClassPain:
TNT1 A 0 A_JumpIfInventory("BaseCustomFlag1",1,"ClassPain.NoRing")
SATU HHHHHHHHHH 2 A_SpawnItem("PainFX",0,3)
Goto SpawnIdle
ClassPain.NoRing:
SA7U HHHHHHHHHH 2 A_SpawnItem("PainFX",0,3)
Goto SpawnIdle

ClassDeath:
SATU H 0 A_JumpIfInventory("BaseCustomFlag1",1,"ClassDeath.NoRing")
SATU H 20 ACS_ExecuteAlways(999,0,0)
SATU H 0 A_PlayerScream
SATU H 0 A_SpawnItemEx("FakeDeathFXMMV", 0, 0, 32, 0, 0, 0, 0, 1)
NOFX A 1 A_CheckPlayerDone
wait
ClassDeath.NoRing:
SA7U H 20 ACS_ExecuteAlways(999,0,0)
SA7U H 0 A_PlayerScream
SA7U H 0 A_SpawnItemEx("FakeDeathFXMMV", 0, 0, 32, 0, 0, 0, 0, 1)
NOFX A 1 A_CheckPlayerDone
wait
WeaponGetM:
SATU H 0 A_JumpIfInTargetInventory("BlackHoleWepM",1,2)
SATU H 0 A_GiveToTarget("WeaponGetter")
SATU H 0 A_GiveToTarget("BlackHoleWepM")
Goto ClassDeath
}
}

Actor BlackHoleBoss : VCBaseWeapon
{
weapon.ammotype "Base112Ammo"
weapon.ammotype2 "BaseAltfireAmmo"
Obituary "$OB_SATURN1"
States
{
Ready:
TNT1 A 0 A_JumpIfInventory("BaseCustomFlag1",1,"Ready.NoRing")
TNT1 A 0 A_JumpIfInventory("BaseAltfireAmmo",56,"Ready.CanTF")
SAHD A 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",3,28)) TNT1 A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
SAHD A 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",3,28)) TNT1 A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
TNT1 A 0 A_GiveInventory("Base112Ammo",1) TNT1 A 0 A_GiveInventory("BaseAltfireAmmo",1)
loop
Ready.CanTF:
TNT1 A 0 A_JumpIfInventory("BaseCustomFlag1",1,"Ready.NoRing")
SAHD A 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",3,28)) TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
TNT1 A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
SAHD A 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",3,28)) TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
TNT1 A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
TNT1 A 0 A_GiveInventory("Base112Ammo",1) TNT1 A 0 A_GiveInventory("BaseAltfireAmmo",1)
loop
Ready.NoRing:
TNT1 A 0 A_JumpIfInventory("Base112Ammo",1,1) Goto Altfire.RingReturn SAHD B 1 A_WeaponReady
TNT1 A 0 A_JumpIfInventory("Base112Ammo",1,1) Goto Altfire.RingReturn SAHD B 1 A_WeaponReady
TNT1 A 0 A_GiveInventory("BaseAltfireAmmo",1)
loop

Deselect:
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
SAHD A 1 A_Lower
Loop
Select:
TNT1 A 0 ACS_ExecuteAlways(991,0,5965)
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
SAHD A 1 A_Raise
Loop

Fire:
TNT1 A 0 A_JumpIfInventory("BaseCustomFlag1",1,"Fire.SaturnSlide")
SAHD A 1 A_Jump(256,"Fire.Continue")
wait

Fire.Continue:
SAHD G 1 Offset(-26,79)ACS_NamedExecuteWithResult("VC_SetState",1)
SAHD G 1 Offset(4,65)ACS_NamedExecuteWithResult("VC_SetState",1)
SAHD G 1 Offset(34,51)ACS_NamedExecuteWithResult("VC_SetState",1)
SAHD E 1 Offset(54,44)ACS_NamedExecuteWithResult("VC_SetState",1)
SAHD E 1 Offset(84,36)ACS_NamedExecuteWithResult("VC_SetState",1)
TNT1 A 0 A_spawnItemEx("SaturnRingWatcher")
TNT1 A 0 A_GiveInventory("BaseCustomFlag1",1)
TNT1 A 0 A_FireCustomMissile("SaturnRing",0,0,8)
TNT1 A 0 A_PlaySoundEx("weapon/SaturnRingThrow","weapon")
SAHD F 1 Offset(114,29)ACS_NamedExecuteWithResult("VC_SetState",2)
SAHD F 1 Offset(147,23)ACS_NamedExecuteWithResult("VC_SetState",2)
SAHD F 1 Offset(180,18)ACS_NamedExecuteWithResult("VC_SetState",2)
SAHD F 1 Offset(216,14)ACS_NamedExecuteWithResult("VC_SetState",2)
SAHD F 1 Offset(252,11)ACS_NamedExecuteWithResult("VC_SetState",2)
TNT1 A 10 Offset(80,112)
SAHD B 1 Offset(64,96)
SAHD B 1 Offset(48,80)
SAHD B 1 Offset(32,64)
SAHD B 1 Offset(16,48)
SAHD B 1 A_WeaponReady(WRF_NOFIRE)
Goto Ready.NoRing

Fire.SaturnSlide:
TNT1 A 0 ThrustThingZ(0,-6,0,1)
TNT1 A 0 A_GiveInventory("CutterFlag",1)
TNT1 A 0 A_JumpIfInventory("CutterFlag",105,"Fire.SaturnSlide.End")
SAHD B 1 A_CheckFloor(1)
loop
TNT1 A 0 A_GiveInventory("SaturnSlidePickUp",1)
TNT1 A 0 A_GunFlash("SaturnSliding")
SAHD AAAMMMNNNNNNNNNNNNNNMMMAAA 1 ACS_NamedExecuteWithResult("VC_SetState",3)
TNT1 A 0 A_GunFlash("EndFlash")
Fire.SaturnSlide.End:
SAHD B 1 A_TakeInventory("CutterFlag",105)
Goto Ready.NoRing

Altfire:
TNT1 A 0 A_JumpIfInventory("BaseCustomFlag1",1,"Altfire.RingReturn")
SAHD A 1 A_Jump(256,"Altfire.Continue")
wait

Altfire.Continue:
SAHD A 0 A_JumpIfInventory("NoAltfire",1,"Ready")
SAHD A 1 Offset(0,48)ACS_NamedExecuteWithResult("VC_SetState",1)
SAHD A 1 Offset(0,64)ACS_NamedExecuteWithResult("VC_SetState",1)
TNT1 A 1 Offset(0,96)ACS_NamedExecuteWithResult("VC_SetState",1)
TNT1 A 1 Offset(0,96)ACS_NamedExecuteWithResult("VC_SetState",1)
SAHD K 1 Offset(0,80)ACS_NamedExecuteWithResult("VC_SetState",1)
SAHD K 1 Offset(0,64)ACS_NamedExecuteWithResult("VC_SetState",1)
SAHD L 1 Offset(0,48)ACS_NamedExecuteWithResult("VC_SetState",1)
SAHD L 1 Offset(0,33)ACS_NamedExecuteWithResult("VC_SetState",1)
TNT1 A 0 A_GunFlash
TNT1 A 0 A_GiveInventory("BlackHoleRingSlowDown",1)
Altfire.Waiting:
TNT1 A 0 A_JumpIfInventory("BaseAltfireAmmo",1,1) Goto Altfire.End
SAHD HH 1 ACS_NamedExecuteWithResult("VC_SetState",4)
TNT1 A 0 A_Refire(1) Goto Altfire.End
TNT1 A 0 A_JumpIfInventory("BaseAltfireAmmo",1,1) Goto Altfire.End
SAHD II 1 ACS_NamedExecuteWithResult("VC_SetState",5)
TNT1 A 0 A_Refire(1) Goto Altfire.End
TNT1 A 0 A_JumpIfInventory("BaseAltfireAmmo",1,1) Goto Altfire.End
SAHD JJ 1 ACS_NamedExecuteWithResult("VC_SetState",6)
TNT1 A 0 A_Refire("Altfire.Waiting")
Goto Altfire.End
Altfire.End:
TNT1 A 0 A_GunFlash("EndFlash")
TNT1 A 0 A_TakeInventory("BlackHoleRingSlowDown",1)
SAHD L 1 Offset(0,33)A_TakeInventory("CutterFlag2",999)
SAHD L 1 Offset(0,48)
SAHD K 1 Offset(0,64)
SAHD K 1 Offset(0,80)
TNT1 A 1 Offset(0,96)
TNT1 A 1 Offset(0,96)
SAHD A 1 Offset(0,64)
SAHD A 1 Offset(0,48)
Goto Ready

Altfire.RingReturn:
TNT1 A 0 A_GiveInventory("BaseCustomFlag2",1)
SAHD A 1 Offset(-8,24)ACS_NamedExecuteWithResult("VC_SetState",2)
SAHD B 1 Offset(-24,16)ACS_NamedExecuteWithResult("VC_SetState",2)
SAHD C 1 Offset(-40,8)ACS_NamedExecuteWithResult("VC_SetState",2)
Altfire.RingReturn.Waiting:
SAHD C 1 Offset(-40,8)ACS_NamedExecuteWithResult("VC_SetState",2)
TNT1 A 0 A_GiveInventory("CutterFlag",1)
TNT1 A 0 A_JumpIfInventory("SaturnRingGiveBack",1,"Altfire.RingReturn.End")
TNT1 A 0 A_JumpIfInventory("CutterFlag",105,"Altfire.RingReturn.End")
loop
Altfire.RingReturn.End:
TNT1 A 0 A_PlaySoundEx("weapon/adapterreturn","Body")
TNT1 A 0 A_TakeInventory("CutterFlag",999)
TNT1 A 0 A_TakeInventory("BaseCustomFlag1",1)
TNT1 A 0 A_TakeInventory("BaseCustomFlag2",99)
TNT1 A 0 A_GiveInventory("SaturnRingGiveBack",1)
SAHD C 1 Offset(-40,8)
SAHD B 1 Offset(-24,16)
SAHD A 1 Offset(-8,24)
Goto Ready

User1:
TNT1 A 0 A_GiveInventory("SaturnBlackHoleTrigger",1)
SAHD A 1 Offset(0,48)ACS_NamedExecuteWithResult("VC_SetState",1)
SAHD A 1 Offset(0,64)ACS_NamedExecuteWithResult("VC_SetState",1)
TNT1 A 1 Offset(0,96)ACS_NamedExecuteWithResult("VC_SetState",1)
TNT1 A 1 Offset(0,96)ACS_NamedExecuteWithResult("VC_SetState",1)
SAHD K 1 Offset(0,80)ACS_NamedExecuteWithResult("VC_SetState",1)
SAHD K 1 Offset(0,64)ACS_NamedExecuteWithResult("VC_SetState",1)
SAHD L 1 Offset(0,48)ACS_NamedExecuteWithResult("VC_SetState",1)
SAHD L 1 Offset(0,33)ACS_NamedExecuteWithResult("VC_SetState",1)
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",4)
TNT1 A 0 A_TakeInventory("BaseAltfireAmmo",56)
TNT1 A 0 A_SpawnItemEx("SaturnBlackHoleSpawner")
TNT1 A 0 A_PlaySoundEx("misc/wilygolemblast","Weapon")
SAHD HHHH 1 ACS_NamedExecuteWithResult("VC_SetState",4)
SAHD IIII 1 ACS_NamedExecuteWithResult("VC_SetState",5)
SAHD JJJJ 1 ACS_NamedExecuteWithResult("VC_SetState",6)
SAHD L 1 Offset(0,33)
SAHD L 1 Offset(0,48)
SAHD K 1 Offset(0,64)
SAHD K 1 Offset(0,80)
TNT1 A 1 Offset(0,96)
TNT1 A 1 Offset(0,96)
SAHD A 1 Offset(0,64)
SAHD A 1 Offset(0,48)
Goto Ready

UltimateAttack:
TNT1 A 0 A_ChangeFlag("INVULNERABLE",True)
TNT1 A 0 A_GiveInventory("InvProtection",1)
TNT1 A 0 A_GiveInventory("PowerUltBuildCooldown",1)
TNT1 A 0 ACS_NamedExecuteAlways("VC_UltimateText",0,110)
TNT1 A 0 A_PlaySoundEx("classes/ultimateactivation","Auto")
SAHD A 1 Offset(-8,24)ACS_NamedExecuteWithResult("VC_SetState",1)
SAHD B 1 Offset(-24,16)ACS_NamedExecuteWithResult("VC_SetState",1)
SAHD C 1 Offset(-40,8)ACS_NamedExecuteWithResult("VC_SetState",1)
TNT1 A 0 A_SetGravity(0.0)
TNT1 A 0 A_FireCustomMissile("SaturnStopper")
TNT1 A 0 A_FireCustomMissile("SaturnStopperBulletSpreader")
TNT1 A 0 ACS_ExecuteAlways(991,0,1234)
SAHD D 1 Offset(-48,0)A_Stop TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",7)
SAHD D 1 Offset(-48,0)A_Stop TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",7)
SAHD D 1 Offset(-48,0)A_Stop TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",7)
SAHD D 1 Offset(-48,0)A_Stop TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",7)
TNT1 A 0 ACS_ExecuteAlways(991,0,5965)
UltHold:
SAHD C 1 Offset(-48,0)A_Stop TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",7)
TNT1 A 0 A_jumpIfInventory("MediumUltimateAmmo",1,"UltHold")
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",7)
TNT1 A 0 A_GiveInventory("GravityRestore",1)
TNT1 A 0 A_TakeInventory("InvProtection",1)
TNT1 A 0 A_ChangeFlag("INVULNERABLE",False)
TNT1 A 0 A_TakeInventory("UltAttackFlag",1)
TNT1 A 0 A_TakeInventory("PowerUltBuildCooldown",1)
SAHD C 1 Offset(-40,8)
SAHD B 1 Offset(-24,16)
SAHD A 1 Offset(-8,24)
Goto Ready

Flash:
TNT1 A 0 A_PlaySoundEx("weapon/SaturnBlackHole","Weapon",True)
TNT1 A 0 A_SpawnItemEx("BlackHoleRingHitBox",40)
TNT1 A 0 A_GiveInventory("CutterFlag2",1)
TNT1 A 0 A_GiveInventory("BlackHoleRingSuctionPickUp",1)
TNT1 A 0 A_SpawnItemEx("BlackHoleRingGuard",40)
TNT1 A 1 A_JumpIfInventory("IsDead",1,"EndFlash")
TNT1 A 0 A_FireCustomMissile("BlackHoleRingFXSpawner",Random(-16,16),0,0,0,0,Random(-16,16))
TNT1 A 0 A_TakeInventory("BaseAltfireAmmo",1)
TNT1 A 0 A_GiveInventory("CutterFlag2",1)
TNT1 A 0 A_GiveInventory("BlackHoleRingSuctionPickUp",1)
TNT1 A 0 A_SpawnItemEx("BlackHoleRingGuard",40)
TNT1 A 1 A_JumpIfInventory("IsDead",1,"EndFlash")
TNT1 A 0 A_FireCustomMissile("BlackHoleRingFXSpawner",Random(-16,16),0,0,0,0,Random(-16,16))
TNT1 A 0 A_TakeInventory("BaseAltfireAmmo",1)
Goto Flash+1
SaturnSliding:
TNT1 A 0 A_SpawnItemEx("SaturnSlideHitBox",0,0,0,momx,momy,momz,0,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION)
TNT1 A 1 A_JumpIfInventory("IsDead",1,"EndFlash")
loop
EndFlash:
TNT1 A 0 A_StopSoundEx("Weapon")
stop
}
}

actor SaturnRing
{
PROJECTILE
-NOGRAVITY
+RIPPER
+DONTBLAST
+THRUACTORS
+SKYEXPLODE
+DONTREFLECT
+HEXENBOUNCE
+CANBOUNCEWATER
+DONTSPLASH
Obituary "$OB_SATURN1"
Damagetype "SaturnRing"
Gravity 1.0
BounceFactor 1.0
WallBounceFactor 1.0
damage (0)
speed 35
Radius 16
Height 16
scale 2.5
reactiontime 100
const int DMG = 22;
const int RNG = 40;
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
Spawn2:
SARI A 1 A_Explode(DMG,RNG,0,0,RNG) TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Destroy")
SARI A 1 A_Explode(DMG,RNG,0,0,RNG) TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Destroy")
SARI A 1 A_Explode(DMG,RNG,0,0,RNG) TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Destroy")
TNT1 A 0 A_JumpIfInTargetInventory("BaseCustomFlag2",1,"Death")
SARI B 1 A_Explode(DMG,RNG,0,0,RNG) TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Destroy")
SARI B 1 A_Explode(DMG,RNG,0,0,RNG) TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Destroy")
SARI B 1 A_Explode(DMG,RNG,0,0,RNG) TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Destroy")
TNT1 A 0 A_JumpIfInTargetInventory("BaseCustomFlag2",1,"Death")
TNT1 A 0 A_Countdown
loop
Death:
SARI A 0 A_SpawnItemEx("SaturnRingReturn",0,0,0,0,0,0,0,1)
stop
Destroy:
TNT1 A 0 A_PlaySoundEx("weapon/napalm", "Weapon")
X_VC FGHIJKLMNO 2 A_Stop
stop
}
}

actor SaturnRingReturn : SaturnRing
{
+NOCLIP
+NOINTERACTION
speed 55
//const int RNG2 = 80;
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
Spawn2:
TNT1 A 0 A_FaceTarget TNT1 A 0 A_JumpIfCloser(RNG * 2,"End")
SARI A 1 A_Explode(DMG,RNG,0,0,RNG) TNT1 A 0 A_JumpIfInTargetInventory("SaturnRingGiveBack",1,"End2")
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Destroy")
TNT1 A 0 A_FaceTarget TNT1 A 0 A_JumpIfCloser(RNG * 2,"End")
SARI A 1 A_Explode(DMG,RNG,0,0,RNG) TNT1 A 0 A_JumpIfInTargetInventory("SaturnRingGiveBack",1,"End2")
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Destroy")
TNT1 A 0 A_FaceTarget TNT1 A 0 A_JumpIfCloser(RNG * 2,"End")
SARI A 1 A_Explode(DMG,RNG,0,0,RNG) TNT1 A 0 A_JumpIfInTargetInventory("SaturnRingGiveBack",1,"End2")
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Destroy")
TNT1 A 0 A_FaceTarget TNT1 A 0 A_JumpIfCloser(RNG * 2,"End")
SARI B 1 A_Explode(DMG,RNG,0,0,RNG) TNT1 A 0 A_JumpIfInTargetInventory("SaturnRingGiveBack",1,"End2")
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Destroy")
TNT1 A 0 A_FaceTarget TNT1 A 0 A_JumpIfCloser(RNG * 2,"End")
SARI B 1 A_Explode(DMG,RNG,0,0,RNG) TNT1 A 0 A_JumpIfInTargetInventory("SaturnRingGiveBack",1,"End2")
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Destroy")
TNT1 A 0 A_FaceTarget TNT1 A 0 A_JumpIfCloser(RNG * 2,"End")
SARI B 1 A_Explode(DMG,RNG,0,0,RNG) TNT1 A 0 A_JumpIfInTargetInventory("SaturnRingGiveBack",1,"End2")
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Destroy")
TNT1 A 0 A_CustomMissile("SaturnRingReturn",0,0)
stop
End:
TNT1 A 0
TNT1 A 0 A_GiveToTarget("SaturnRingGiveBack",1)
End2:
TNT1 A 0
stop
}
}

Actor SaturnRingWatcher
{
+MISSILE
-SOLID
+NOGRAVITY
+NOINTERACTION
Height 0
Radius 0
States
{
Spawn: 
TNT1 A 0
TNT1 A 0 A_TakeFromTarget("Base112Ammo",1)
TNT1 A 1 A_JumpIfInTargetInventory("IsDead",1,"Death")
TNT1 A 0 A_JumpIfInTargetInventory("BaseCustomFlag2",1,"Death")
TNT1 A 0 A_JumpIfInTargetInventory("SaturnRingGiveBack",1,"Death")
TNT1 A 0 A_JumpIfInTargetInventory("Base112Ammo",1,"Spawn")
Death:
TNT1 A 0
stop
}
}

actor SaturnRingGiveBack : Powerup
{
    powerup.duration 5
}

Actor SaturnRingProtect : PowerProtection
{
	Powerup.Duration 25
	DamageFactor "SaturnRing", 0.0
}

actor SaturnSlidePickUp : BaseMovement//CustomInventory
{
States
{
itTimeGo://Pickup:
TNT1 A 0 A_Stop
TNT1 A 0 A_Recoil(CallACS("VC_XYMob",-50))
TNT1 A 0 A_TakeInventory("CutterFlag",105)
TNT1 A 0 A_PlaySoundEx("weapon/chargekick","Weapon")
TNT1 AAAAAAAAAA 0 A_SpawnItemEx("DarkSprintDustFX",0,0,0,random(-10,-20),random(-5,5),random(0,5))
stop
}
}

actor SaturnSlideHitBox
{
species "DustManType"
+THRUSPECIES
PROJECTILE
+DONTBLAST
+DONTREFLECT
-NOBLOCKMAP
+THRUSPECIES
damagetype "SaturnSlide"
Obituary "$OB_SATURN2"
damage (15)
Radius 36
Height 36
scale 2.5
States
{
Spawn:
TNT1 A 0
TNT1 A 1
stop
}
}

Actor SaturnSlideProtect : PowerProtection
{
	Powerup.Duration 20
	DamageFactor "SaturnSlide", 0.0
}

Actor BlackHoleRingFXSpawner : FastProjectile
{
PROJECTILE
+SKYEXPLODE
-DONTBLAST
+DONTSPLASH
+DONTREFLECT
+THRUSPECIES
species "SaturnParticle"
Speed 150
Damage (0)
radius 12
height 12
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 A 7
goto Death
Crash:
XDeath:
Death:
TNT1 A 0 A_Stop
TNT1 A 1 A_CustomMissile("BlackHoleFX", 0, 0, 0, 0)
stop
}
}

Actor BlackHoleFX
{
PROJECTILE
+CLIENTSIDEONLY
+DONTSPLASH
-DONTBLAST
-SOLID
+NOGRAVITY
height 5
radius 5
Scale 1.25
alpha 1.0
Speed 80
reactiontime 17
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileFXCode")
COSS B 0 A_FadeOut(0.01)
COSS B 1 A_JumpIfCloser(60,"Death")
COSS B 0 A_Countdown
loop
Death:
TNT1 A 1
stop
}
}

actor BlackHoleRingSuctionPickUp : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("CutterFlag2",74,"Pickup3")
TNT1 A 0 A_JumpIfInventory("CutterFlag2",37,"Pickup2")
TNT1 A 0 A_SpawnItemEx("BlackHoleRingSuction")
stop

Pickup2:
TNT1 A 0 A_SpawnItemEx("BlackHoleRingSuction2")
stop

Pickup3:
TNT1 A 0 A_SpawnItemEx("BlackHoleRingSuction3")
stop
}
}

actor BlackHoleRingSuction
{
PROJECTILE
radius 1
height 1
speed 0
damage (0)
+NOINTERACTION
States
{
Spawn:
TNT1 A 0
TNT1 A 2 ACS_ExecuteAlways(C_JAX_SUCKRECODE,0,800,10,6)
stop
}
}

actor BlackHoleRingSuction2 : BlackHoleRingSuction
{
States
{
Spawn:
TNT1 A 0
TNT1 A 2 ACS_ExecuteAlways(C_JAX_SUCKRECODE,0,800,10,4)
stop
}
}

actor BlackHoleRingSuction3 : BlackHoleRingSuction
{
States
{
Spawn:
TNT1 A 0
TNT1 A 2 ACS_ExecuteAlways(C_JAX_SUCKRECODE,0,800,10,2)
stop
}
}

actor BlackHoleRingHitBox
{
Damagetype "SaturnBlackHole"
Obituary "$OB_SATURN3"
PROJECTILE
+NOEXPLODEFLOOR
+NOINTERACTION
+THRUSPECIES
species "SaturnParticle"
Radius 1
Height 1
scale 2.5
speed 0
damage (0)
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_Explode(1,64,0,0,64)
stop
}
}

actor BlackHoleRingGuard
{
+THRUSPECIES
species "SaturnParticle"
+THRUGHOST
Speed 0
+DONTSPLASH
Damage 0
Height 60
Radius 32
health 9999
scale 2.5
+SHOOTABLE
+NOBLOOD
-SOLID
painchance 256
+DONTRIP
+GHOST
+NOTARGETSWITCH
damagefactor "SaturnBlackHole", 0.0
States
{
Spawn:
TNT1 A 2
stop
Pain:
TNT1 A 0 A_JumpIfInTargetInventory("BlackHoleRetaliateCoolDown",1,"Death")
TNT1 A 0 A_GiveToTarget("SaturnCounterHandler",1)
TNT1 A 1
stop
Death:
TNT1 A 0
stop
}
}

actor BlackHoleRingShot : BlackHoleSpiral
{
Translation "4:4=215:215", "235:235=223:223"
+THRUSPECIES
species "SaturnParticle"
damage (20)
damagetype "SaturnCounter"
Obituary "$OB_SATURN4"
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 A 0 A_SetUserVar("user_speed", 50)
TNT1 A 0 A_SetUserVar("user_maxturn", 1500)
TNT1 A 0 A_SetUserVar("user_turndivisor", 1)
TNT1 A 0 A_SetUserVar("user_turndivisor_add", 8)
Spawn2:
TNT1 A 0 A_Setangle(angle-user_maxturn/user_turndivisor)
BHOL Y 1 A_ChangeVelocity(user_speed,0,0,CVF_RELATIVE|CVF_REPLACE)
TNT1 A 0 A_SetUserVar("user_turndivisor",user_turndivisor+user_turndivisor_add)
TNT1 A 0 A_Setangle(angle-user_maxturn/user_turndivisor)
BHOL Y 1 A_ChangeVelocity(user_speed,0,0,CVF_RELATIVE|CVF_REPLACE)
TNT1 A 0 A_SetUserVar("user_turndivisor",user_turndivisor+user_turndivisor_add)
TNT1 A 0 A_Setangle(angle-user_maxturn/user_turndivisor)
BHOL Z 1 A_ChangeVelocity(user_speed,0,0,CVF_RELATIVE|CVF_REPLACE)
TNT1 A 0 A_SetUserVar("user_turndivisor",user_turndivisor+user_turndivisor_add)
TNT1 A 0 A_Setangle(angle-user_maxturn/user_turndivisor)
BHOL Z 1 A_ChangeVelocity(user_speed,0,0,CVF_RELATIVE|CVF_REPLACE)
TNT1 A 0 A_SetUserVar("user_turndivisor",user_turndivisor+user_turndivisor_add)
TNT1 A 0 A_ChangeFlag("THRUACTORS", False)
loop
}
}

Actor BlackHoleCounterProtect : PowerProtection
{
	Powerup.Duration 8
	DamageFactor "SaturnCounter", 0.0
}

actor BlackHoleRingSlowDown : PowerSpeed
{
+POWERSPEED.NOTRAIL
powerup.duration 0x7FFFFFFD
Speed 0.40
}

actor SaturnStopper
{
Translation "239:239=223:223"
Projectile
-NOBLOCKMAP
damagetype "SaturnStopper"
Obituary "$OB_SATURN6"
Height 1
Radius 1
Scale 2.5
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 A 0 A_Explode(20,480,0,0,480)
TNT1 A 0 A_PlaySoundEx("weapon/terrafreeze","SoundSlot5")
FST2 ABCDE 1
stop
}
} 

actor SaturnStopperBulletSpreader
{
Projectile
Height 0
Radius 0
const int DEG = 36;
const int SPD = 25;
States
{
Spawn:
TNT1 AA 0
TNT1 A 0 A_TakeFromTarget("MediumUltimateAmmo",15)
TNT1 A 0 A_PlaySoundEx("weapon/SaturnAbsorbShot","Body")
TNT1 A 0 A_SpawnItemEx("SaturnStopperShot",0,0,0,SPD,0,0,(DEG*1))
TNT1 A 0 A_SpawnItemEx("SaturnStopperShot",0,0,0,SPD,0,0,(DEG*2))
TNT1 A 0 A_SpawnItemEx("SaturnStopperShot",0,0,0,SPD,0,0,(DEG*3))
TNT1 A 0 A_SpawnItemEx("SaturnStopperShot",0,0,0,SPD,0,0,(DEG*4))
TNT1 A 0 A_SpawnItemEx("SaturnStopperShot",0,0,0,SPD,0,0,(DEG*5))
TNT1 A 0 A_SpawnItemEx("SaturnStopperShot",0,0,0,SPD,0,0,(DEG*6))
TNT1 A 0 A_SpawnItemEx("SaturnStopperShot",0,0,0,SPD,0,0,(DEG*7))
TNT1 A 0 A_SpawnItemEx("SaturnStopperShot",0,0,0,SPD,0,0,(DEG*8))
TNT1 A 0 A_SpawnItemEx("SaturnStopperShot",0,0,0,SPD,0,0,(DEG*9))
TNT1 A 0 A_SpawnItemEx("SaturnStopperShot",0,0,0,SPD,0,0,(DEG*10))
TNT1 A 0 A_SetAngle(angle+10)
TNT1 AAA 1 A_JumpIfInTargetInventory("IsDead",1,"End")
TNT1 A 1 A_JumpIfInTargetInventory("MediumUltimateAmmo",1,"Spawn")
End:
TNT1 A 0
stop
}
}

actor SaturnStopperShot
{
PROJECTILE
+THRUACTORS
+DONTREFLECT
damagetype "Saturn"
Obituary "$OB_SATURN6"
Damage (7)
radius 12
height 12
scale 2.5
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 A 1
TNT1 A 0 A_ChangeFlag("THRUACTORS",False)
SARI C 1
wait
}
}

actor StoppedInPlaceCounter : Powerup
{
powerup.duration 80
}

actor SaturnStopperFreezer : CustomInventory
{
+INVENTORY.AUTOACTIVATE
States
{
Pickup:
TNT1 A 0
TNT1 A 0 A_JumpIfInventory("StoppedInPlaceCounter", 1, "No")
TNT1 A 0 A_Stop
PLAY H 0 A_GiveInventory("StoppedInPlaceCounter",1)
PLAY H 0 ACS_NamedExecuteAlways("core_flyplayer",0,0,1)
PLAY H 0 ACS_NamedExecuteAlways("core_freezeplayer",0,0,1)
TNT1 A 0 A_SpawnItemEx("SaturnStunnedWatcher")
TNT1 A 1
stop
No:
TNT1 A 0
stop
}
}

actor SaturnStunnedWatcher
{
Height 0
Radius 0
+NOINTERACTION
+NOGRAVITY
const int DST = 40;
const int HGT = 32;
const int DEG = 45;
const int NUM = 8;
var int User_Deg;
States
{
Spawn:
TNT1 AA 0
TNT1 A 0 A_setUserVar("User_Deg",0)
Spawn2:
TNT1 A 1 A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_NOCHECKPOSITION) TNT1 A 0 A_GiveToTarget("MovementFrozen3") TNT1 A 0 A_JumpIfInTargetInventory("IsDead",1,"End")
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*0)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*1)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*2)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*3)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*4)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*5)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*6)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*7)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*0)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*1)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*2)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*3)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*4)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*5)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*6)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*7)-User_Deg)
TNT1 A 0 A_setUserVar("User_Deg",User_Deg+NUM)
TNT1 A 0 A_JumpIfInTargetInventory("StoppedInPlaceCounter",1,1)
Goto End
TNT1 A 1 A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_NOCHECKPOSITION) TNT1 A 0 A_GiveToTarget("MovementFrozen3") TNT1 A 0 A_JumpIfInTargetInventory("IsDead",1,"End")
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*0)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*1)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*2)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*3)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*4)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*5)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*6)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*7)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*0)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*1)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*2)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*3)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*4)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*5)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*6)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*7)-User_Deg)
TNT1 A 0 A_setUserVar("User_Deg",User_Deg+NUM)
TNT1 A 0 A_JumpIfInTargetInventory("StoppedInPlaceCounter",1,1)
Goto End
TNT1 A 1 A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_NOCHECKPOSITION) TNT1 A 0 A_GiveToTarget("MovementFrozen3") TNT1 A 0 A_JumpIfInTargetInventory("IsDead",1,"End")
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*0)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*1)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*2)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*3)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*4)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*5)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*6)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*7)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*0)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*1)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*2)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*3)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*4)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*5)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*6)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*7)-User_Deg)
TNT1 A 0 A_setUserVar("User_Deg",User_Deg+NUM)
TNT1 A 0 A_JumpIfInTargetInventory("StoppedInPlaceCounter",1,1)
Goto End
TNT1 A 1 A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_NOCHECKPOSITION) TNT1 A 0 A_GiveToTarget("MovementFrozen3") TNT1 A 0 A_JumpIfInTargetInventory("IsDead",1,"End")
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*0)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*1)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*2)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*3)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*4)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*5)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*6)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*0.5),0,0,0,(DEG*7)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*0)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*1)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*2)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*3)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*4)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*5)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*6)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX",DST,0,(HGT*1.5),0,0,0,(DEG*7)-User_Deg)
TNT1 A 0 A_setUserVar("User_Deg",User_Deg+NUM)
TNT1 A 0 A_JumpIfInTargetInventory("StoppedInPlaceCounter",1,1)
Goto End
TNT1 A 1 A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_NOCHECKPOSITION) TNT1 A 0 A_GiveToTarget("MovementFrozen3") TNT1 A 0 A_JumpIfInTargetInventory("IsDead",1,"End")
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*0)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*1)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*2)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*3)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*4)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*5)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*6)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*7)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*0)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*1)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*2)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*3)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*4)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*5)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*6)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*7)-User_Deg)
TNT1 A 0 A_setUserVar("User_Deg",User_Deg+NUM)
TNT1 A 0 A_JumpIfInTargetInventory("StoppedInPlaceCounter",1,1)
Goto End
TNT1 A 1 A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_NOCHECKPOSITION) TNT1 A 0 A_GiveToTarget("MovementFrozen3") TNT1 A 0 A_JumpIfInTargetInventory("IsDead",1,"End")
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*0)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*1)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*2)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*3)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*4)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*5)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*6)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*7)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*0)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*1)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*2)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*3)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*4)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*5)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*6)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*7)-User_Deg)
TNT1 A 0 A_setUserVar("User_Deg",User_Deg+NUM)
TNT1 A 0 A_JumpIfInTargetInventory("StoppedInPlaceCounter",1,1)
Goto End
TNT1 A 1 A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_NOCHECKPOSITION) TNT1 A 0 A_GiveToTarget("MovementFrozen3") TNT1 A 0 A_JumpIfInTargetInventory("IsDead",1,"End")
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*0)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*1)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*2)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*3)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*4)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*5)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*6)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*7)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*0)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*1)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*2)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*3)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*4)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*5)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*6)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*7)-User_Deg)
TNT1 A 0 A_setUserVar("User_Deg",User_Deg+NUM)
TNT1 A 0 A_JumpIfInTargetInventory("StoppedInPlaceCounter",1,1)
Goto End
TNT1 A 1 A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_NOCHECKPOSITION) TNT1 A 0 A_GiveToTarget("MovementFrozen3") TNT1 A 0 A_JumpIfInTargetInventory("IsDead",1,"End")
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*0)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*1)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*2)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*3)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*4)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*5)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*6)+User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*0.5),0,0,0,(DEG*7)+User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*0)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*1)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*2)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*3)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*4)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*5)-User_Deg)
TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*6)-User_Deg) TNT1 A 0 A_SpawnitemEx("SaturnStopperGFX2",DST,0,(HGT*1.5),0,0,0,(DEG*7)-User_Deg)
TNT1 A 0 A_setUserVar("User_Deg",User_Deg+NUM)
TNT1 A 0 A_JumpIfInTargetInventory("StoppedInPlaceCounter",1,"Spawn2")
End:
TNT1 A 5 A_GiveToTarget("DarkRingUnstun")
stop
}
}

actor SaturnStopperGFX
{
Translation "4:4=215:215", "235:235=223:223"
-SOLID
+NOGRAVITY
+NOINTERACTION
+CLIENTSIDEONLY
+FORCEXYBILLBOARD
RenderStyle Translucent
Alpha 0.8
height 0
radius 0
scale 2.5
states
{
Spawn:
TNT1 AA 0
BHOL Y 1
stop
}
}

actor SaturnStopperGFX2 : SaturnStopperGFX
{
states
{
Spawn:
TNT1 AA 0
BHOL Z 1
stop
}
}

actor BlackHoleRetaliateCoolDown : Powerup 
{
powerup.duration 17
}

actor SaturnCounterHandler : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_GiveInventory("BlackHoleRetaliateCoolDown",1)
TNT1 A 0 A_PlaySoundEx("weapon/SaturnAbsorbShot","Body")
TNT1 A 0 A_SpawnItemEx("BlackHoleRingShot",0,0,16,0,0,0,0)
TNT1 A 0 A_SpawnItemEx("BlackHoleRingShot",0,0,16,0,0,0,120)
TNT1 A 0 A_SpawnItemEx("BlackHoleRingShot",0,0,16,0,0,0,240)
TNT1 A 0 A_TakeInventory("Base28Ammo",3)
stop
}
}

actor SaturnBlackHoleSpawner
{
Translation "0:0=223:223", "235:235=215:215"
radius 1
height 1
+MISSILE
+THRUACTORS
+NOINTERACTION
+DONTREFLECT
var int user_part;
States
{
Spawn:
TNT1 A 0
TNT1 A 10 A_RearrangePointers(AAPTR_DEFAULT, AAPTR_DEFAULT, AAPTR_TARGET)
Goto TeamCheck

//Black Hole Core would change color and pointer to whoever damaged the spawner.
TeamCheck:
TNT1 A 0 A_JumpIfInTargetInventory("LightTeamFlag",1,"BlackHoleL")
TNT1 A 0 A_JumpIfInTargetInventory("WilyTeamFlag",1,"BlackHoleW")
TNT1 A 0 A_JumpIfInTargetInventory("CossackTeamFlag",1,"BlackHoleC")
TNT1 A 0 A_JumpIfInTargetInventory("KingTeamFlag",1,"BlackHoleK")
Goto BlackHoleN

BlackHoleN: TNT1 A 0 A_SpawnItemEx("SaturnBlackHoleCore", 0, 0, 16, 0, 0, 0, 0, SXF_TRANSFERPOINTERS) Goto BlackHoleIdle
BlackHoleL: TNT1 A 0 A_SpawnItemEx("SaturnBlackHoleCoreL", 0, 0, 16, 0, 0, 0, 0, SXF_TRANSFERPOINTERS) Goto BlackHoleIdle
BlackHoleW: TNT1 A 0 A_SpawnItemEx("SaturnBlackHoleCoreW", 0, 0, 16, 0, 0, 0, 0, SXF_TRANSFERPOINTERS) Goto BlackHoleIdle
BlackHoleC: TNT1 A 0 A_SpawnItemEx("SaturnBlackHoleCoreC", 0, 0, 16, 0, 0, 0, 0, SXF_TRANSFERPOINTERS) Goto BlackHoleIdle
BlackHoleK: TNT1 A 0 A_SpawnItemEx("SaturnBlackHoleCoreK", 0, 0, 16, 0, 0, 0, 0, SXF_TRANSFERPOINTERS) Goto BlackHoleIdle

BlackHoleIdle:
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"Death")
TNT1 A 1 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate")
loop

Detonate:
TNT1 A 25 A_PlaySoundEx("weapon/blackholestart","auto")
TNT1 A 0 A_SpawnItemEx("BlackHoleGravityShot",0,0,16,0,0,0,30* 1,SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_SpawnItemEx("BlackHoleGravityShot",0,0,16,0,0,0,30* 2,SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_SpawnItemEx("BlackHoleGravityShot",0,0,16,0,0,0,30* 3,SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_SpawnItemEx("BlackHoleGravityShot",0,0,16,0,0,0,30* 4,SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_SpawnItemEx("BlackHoleGravityShot",0,0,16,0,0,0,30* 5,SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_SpawnItemEx("BlackHoleGravityShot",0,0,16,0,0,0,30* 6,SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_SpawnItemEx("BlackHoleGravityShot",0,0,16,0,0,0,30* 7,SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_SpawnItemEx("BlackHoleGravityShot",0,0,16,0,0,0,30* 8,SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_SpawnItemEx("BlackHoleGravityShot",0,0,16,0,0,0,30* 9,SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_SpawnItemEx("BlackHoleGravityShot",0,0,16,0,0,0,30*10,SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_SpawnItemEx("BlackHoleGravityShot",0,0,16,0,0,0,30*11,SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_SpawnItemEx("BlackHoleGravityShot",0,0,16,0,0,0,30*12,SXF_TRANSFERTRANSLATION)
TNT1 A 2 A_PlaySoundEx("weapon/blackholeexplode","auto")
Goto Death

Death:
TNT1 A 0
stop
}
}

actor SaturnBlackHoleCore
{
Translation "0:0=223:223", "235:235=215:215"
+NOGRAVITY
+ISMONSTER
+NOTARGETSWITCH
+THRUACTORS
+FORCEXYBILLBOARD
+MOVEWITHSECTOR
+BRIGHT
+THRUSPECIES
+DONTREFLECT
species "SaturnParticle"
height 1
radius 1
maxstepheight 0
Scale 2.5
const int SPD = 5;
const int NUM = 420;
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_RearrangePointers(AAPTR_TRACER, AAPTR_DEFAULT, AAPTR_DEFAULT)
BHOL FEDCB 2
Goto SpawnParts

SpawnParts:
TNT1 A 0 A_SpawnItemEx("SaturnBlackHolePart",0,0,0,0,0,0,30* 1,SXF_SETMASTER|SXF_TRANSFERPOINTERS|SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_SpawnItemEx("SaturnBlackHolePart",0,0,0,0,0,0,30* 2,SXF_SETMASTER|SXF_TRANSFERPOINTERS|SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_SpawnItemEx("SaturnBlackHolePart",0,0,0,0,0,0,30* 3,SXF_SETMASTER|SXF_TRANSFERPOINTERS|SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_SpawnItemEx("SaturnBlackHolePart",0,0,0,0,0,0,30* 4,SXF_SETMASTER|SXF_TRANSFERPOINTERS|SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_SpawnItemEx("SaturnBlackHolePart",0,0,0,0,0,0,30* 5,SXF_SETMASTER|SXF_TRANSFERPOINTERS|SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_SpawnItemEx("SaturnBlackHolePart",0,0,0,0,0,0,30* 6,SXF_SETMASTER|SXF_TRANSFERPOINTERS|SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_SpawnItemEx("SaturnBlackHolePart",0,0,0,0,0,0,30* 7,SXF_SETMASTER|SXF_TRANSFERPOINTERS|SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_SpawnItemEx("SaturnBlackHolePart",0,0,0,0,0,0,30* 8,SXF_SETMASTER|SXF_TRANSFERPOINTERS|SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_SpawnItemEx("SaturnBlackHolePart",0,0,0,0,0,0,30* 9,SXF_SETMASTER|SXF_TRANSFERPOINTERS|SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_SpawnItemEx("SaturnBlackHolePart",0,0,0,0,0,0,30*10,SXF_SETMASTER|SXF_TRANSFERPOINTERS|SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_SpawnItemEx("SaturnBlackHolePart",0,0,0,0,0,0,30*11,SXF_SETMASTER|SXF_TRANSFERPOINTERS|SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_SpawnItemEx("SaturnBlackHolePart",0,0,0,0,0,0,30*12,SXF_SETMASTER|SXF_TRANSFERPOINTERS|SXF_TRANSFERTRANSLATION)
Goto BlackHoleActive

BlackHoleActive:
TNT1 A 0 A_SpawnItemEx("SaturnGravityChecker",0,0,0,0,0,10,0,SXF_TRANSFERPOINTERS)
TNT1 A 0 A_SpawnItemEx("SaturnGravityChecker",0,0,0,0,0,-10,0,SXF_TRANSFERPOINTERS)
BHOL B 1 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End")
TNT1 A 0 A_GiveInventory("VCOnceMore",1) TNT1 A 0 A_JumpIfInventory("VCOnceMore",NUM,"ForcedDetonate")
BHOL B 1 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End")
TNT1 A 0 A_GiveInventory("VCOnceMore",1) TNT1 A 0 A_JumpIfInventory("VCOnceMore",NUM,"ForcedDetonate")
BHOL B 1 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End")
TNT1 A 0 A_GiveInventory("VCOnceMore",1) TNT1 A 0 A_JumpIfInventory("VCOnceMore",NUM,"ForcedDetonate")
BHOL B 1 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End")
TNT1 A 0 A_GiveInventory("VCOnceMore",1) TNT1 A 0 A_JumpIfInventory("VCOnceMore",NUM,"ForcedDetonate")
TNT1 AAA 0 A_SpawnItemEx("SaturnGravityParticle",Random(0,448),0,0,0,0,  Random(5,10),Random(0,359),SXF_TRANSFERPOINTERS)
TNT1 AAA 0 A_SpawnItemEx("SaturnGravityParticle",Random(0,448),0,0,0,0,Random(-10,-5),Random(0,359),SXF_TRANSFERPOINTERS)
BHOL C 1 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End")
TNT1 A 0 A_GiveInventory("VCOnceMore",1) TNT1 A 0 A_JumpIfInventory("VCOnceMore",NUM,"ForcedDetonate")
BHOL C 1 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End")
TNT1 A 0 A_GiveInventory("VCOnceMore",1) TNT1 A 0 A_JumpIfInventory("VCOnceMore",NUM,"ForcedDetonate")
BHOL C 1 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End")
TNT1 A 0 A_GiveInventory("VCOnceMore",1) TNT1 A 0 A_JumpIfInventory("VCOnceMore",NUM,"ForcedDetonate")
BHOL C 1 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End")
TNT1 A 0 A_GiveInventory("VCOnceMore",1) TNT1 A 0 A_JumpIfInventory("VCOnceMore",NUM,"ForcedDetonate")
TNT1 AAA 0 A_SpawnItemEx("SaturnGravityParticle",Random(0,448),0,0,0,0,  Random(5,10),Random(0,359),SXF_TRANSFERPOINTERS)
TNT1 AAA 0 A_SpawnItemEx("SaturnGravityParticle",Random(0,448),0,0,0,0,Random(-10,-5),Random(0,359),SXF_TRANSFERPOINTERS)
BHOL D 1 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End")
TNT1 A 0 A_GiveInventory("VCOnceMore",1) TNT1 A 0 A_JumpIfInventory("VCOnceMore",NUM,"ForcedDetonate")
BHOL D 1 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End")
TNT1 A 0 A_GiveInventory("VCOnceMore",1) TNT1 A 0 A_JumpIfInventory("VCOnceMore",NUM,"ForcedDetonate")
BHOL D 1 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End")
TNT1 A 0 A_GiveInventory("VCOnceMore",1) TNT1 A 0 A_JumpIfInventory("VCOnceMore",NUM,"ForcedDetonate")
BHOL D 1 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End")
TNT1 A 0 A_GiveInventory("VCOnceMore",1) TNT1 A 0 A_JumpIfInventory("VCOnceMore",NUM,"ForcedDetonate")
TNT1 AAA 0 A_SpawnItemEx("SaturnGravityParticle",Random(0,448),0,0,0,0,  Random(5,10),Random(0,359),SXF_TRANSFERPOINTERS)
TNT1 AAA 0 A_SpawnItemEx("SaturnGravityParticle",Random(0,448),0,0,0,0,Random(-10,-5),Random(0,359),SXF_TRANSFERPOINTERS)
BHOL E 1 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End")
TNT1 A 0 A_GiveInventory("VCOnceMore",1) TNT1 A 0 A_JumpIfInventory("VCOnceMore",NUM,"ForcedDetonate")
BHOL E 1 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End")
TNT1 A 0 A_GiveInventory("VCOnceMore",1) TNT1 A 0 A_JumpIfInventory("VCOnceMore",NUM,"ForcedDetonate")
BHOL E 1 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End")
TNT1 A 0 A_GiveInventory("VCOnceMore",1) TNT1 A 0 A_JumpIfInventory("VCOnceMore",NUM,"ForcedDetonate")
BHOL E 1 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End")
TNT1 A 0 A_GiveInventory("VCOnceMore",1) TNT1 A 0 A_JumpIfInventory("VCOnceMore",NUM,"ForcedDetonate")
TNT1 AAA 0 A_SpawnItemEx("SaturnGravityParticle",Random(0,448),0,0,0,0,  Random(5,10),Random(0,359),SXF_TRANSFERPOINTERS)
TNT1 AAA 0 A_SpawnItemEx("SaturnGravityParticle",Random(0,448),0,0,0,0,Random(-10,-5),Random(0,359),SXF_TRANSFERPOINTERS)
BHOL F 1 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End")
TNT1 A 0 A_GiveInventory("VCOnceMore",1) TNT1 A 0 A_JumpIfInventory("VCOnceMore",NUM,"ForcedDetonate")
BHOL F 1 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End")
TNT1 A 0 A_GiveInventory("VCOnceMore",1) TNT1 A 0 A_JumpIfInventory("VCOnceMore",NUM,"ForcedDetonate")
BHOL F 1 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End")
TNT1 A 0 A_GiveInventory("VCOnceMore",1) TNT1 A 0 A_JumpIfInventory("VCOnceMore",NUM,"ForcedDetonate")
BHOL F 1 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate") TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End")
TNT1 A 0 A_GiveInventory("VCOnceMore",1) TNT1 A 0 A_JumpIfInventory("VCOnceMore",NUM,"ForcedDetonate")
TNT1 AAA 0 A_SpawnItemEx("SaturnGravityParticle",Random(0,448),0,0,0,0,  Random(5,10),Random(0,359),SXF_TRANSFERPOINTERS)
TNT1 AAA 0 A_SpawnItemEx("SaturnGravityParticle",Random(0,448),0,0,0,0,Random(-10,-5),Random(0,359),SXF_TRANSFERPOINTERS)
loop

ForcedDetonate:
TNT1 A 0 A_GiveToTarget("SaturnBlackHoleTrigger",1)
Goto Detonate

Detonate:
BHOL A 0 A_KillChildren
BHOL BCDEFBCDEFBCDEFBCDEFBCDEF 1
stop

End:
BHOL BCDEF 2 A_FadeOut
loop
}
}
actor SaturnBlackHoleCoreL : SaturnBlackHoleCore {Translation "0:0=74:74", "235:235=205:205"}
actor SaturnBlackHoleCoreW : SaturnBlackHoleCore {Translation "0:0=41:41", "235:235=171:171"}
actor SaturnBlackHoleCoreC : SaturnBlackHoleCore {Translation "0:0=128:128", "235:235=104:104"}
actor SaturnBlackHoleCoreK : SaturnBlackHoleCore {Translation "0:0=232:232", "235:235=229:229"}

actor SaturnGravityChecker
{
PROJECTILE
+SKYEXPLODE
+DONTBLAST
+DONTSPLASH
Damage (0)
radius 40
height 40
scale 2.5
ReactionTime 70
const int RNG = 448;
states
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
TNT1 A 1 A_CountDown
TNT1 A 0 A_JumpIfInTargetInventory("LightTeamFlag",1,"L")
TNT1 A 0 A_JumpIfInTargetInventory("WilyTeamFlag",1,"W")
TNT1 A 0 A_JumpIfInTargetInventory("CossackTeamFlag",1,"C")
TNT1 A 0 A_JumpIfInTargetInventory("KingTeamFlag",1,"K")
Goto N

N: TNT1 A 0 A_RadiusGive("SaturnGravityItem",RNG,RGF_PLAYERS|RGF_NOTARGET,1) Goto Spawn+2
L: TNT1 A 0 A_RadiusGive("SaturnGravityItemL",RNG,RGF_PLAYERS|RGF_NOTARGET,1) Goto Spawn+2
W: TNT1 A 0 A_RadiusGive("SaturnGravityItemW",RNG,RGF_PLAYERS|RGF_NOTARGET,1) Goto Spawn+2
C: TNT1 A 0 A_RadiusGive("SaturnGravityItemC",RNG,RGF_PLAYERS|RGF_NOTARGET,1) Goto Spawn+2
K: TNT1 A 0 A_RadiusGive("SaturnGravityItemK",RNG,RGF_PLAYERS|RGF_NOTARGET,1) Goto Spawn+2
}
}

actor SaturnGravityItem : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_GiveInventory("SaturnGravityDebuffPickUp",1)
stop

Nope:
TNT1 A 0
stop
}
}

actor SaturnGravityItemL : SaturnGravityItem
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("LightTeamFlag",1,"Nope")
TNT1 A 0 A_GiveInventory("SaturnGravityDebuffPickUp",1)
stop
}
}

actor SaturnGravityItemW : SaturnGravityItem
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("WilyTeamFlag",1,"Nope")
TNT1 A 0 A_GiveInventory("SaturnGravityDebuffPickUp",1)
stop
}
}

actor SaturnGravityItemC : SaturnGravityItem
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("CossackTeamFlag",1,"Nope")
TNT1 A 0 A_GiveInventory("SaturnGravityDebuffPickUp",1)
stop
}
}

actor SaturnGravityItemK : SaturnGravityItem
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("KingTeamFlag",1,"Nope")
TNT1 A 0 A_GiveInventory("SaturnGravityDebuffPickUp",1)
stop
}
}

actor SaturnGravityDebuffPickUp : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("NoPushFlag",1,"Pickup2")
TNT1 A 0 A_SpawnItemEx("SaturnGravityWatcher",0,0,0,0,0,0,0,SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_JumpIf(z-floorz<8,"Pickup2")
TNT1 A 0 ThrustThingZ(0, 10, 1, 1)
stop

Pickup2:
TNT1 A 0
stop
}
}

actor SaturnGravityWatcher
{
Height 0
Radius 0
+NOINTERACTION
-SOLID
+NOGRAVITY
+MISSILE
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_JumpIfInTargetInventory("SaturnGravityTime",1,"Nope")
TNT1 A 0 A_GiveToTarget("SaturnGravityTime",1)
Goto Weight

Weight:
TNT1 AAA 1 A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_COPYINTERPOLATION|WARPF_INTERPOLATE)
TNT1 A 0 A_SpawnItemEx("SaturnGravityParticleDebuff",Random(-32,32),Random(-32,32),32,0,0,-3,0,SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_JumpIfInTargetInventory("SaturnGravityTime",1,"Weight")
Goto Death

Nope:
TNT1 A 0 A_GiveToTarget("SaturnGravityTime",1)
Death:
TNT1 A 0
stop
}
}

actor SaturnGravityTime : Powerup
{
    powerup.duration 10
}

actor SaturnGravityParticle
{
Translation "192:192=176:176", "198:198=184:184"
PROJECTILE
+SKYEXPLODE
+DONTBLAST
+DONTSPLASH
+THRUACTORS
Damage (0)
radius 8
height 8
scale 2.5
ReactionTime 70
states
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
GRAP AAAAAABBBBBBCCCCCCDDDDDD 1 A_CountDown
loop

Death:
TNT1 A 0 A_FadeOut(0.2)
GRAP A 1 A_ScaleVelocity(0.25)
TNT1 A 0 A_FadeOut(0.2)
GRAP B 1 A_ScaleVelocity(0.25)
TNT1 A 0 A_FadeOut(0.2)
GRAP C 1 A_ScaleVelocity(0.25)
TNT1 A 0 A_FadeOut(0.2)
GRAP D 1 A_ScaleVelocity(0.25)
stop
}
}

actor SaturnGravityParticleDebuff
{
PROJECTILE
+BRIGHT
+NOINTERACTION
+FORCEXYBILLBOARD
RenderStyle Translucent
alpha 0.8
radius 8
height 8
scale 2.5
states
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
GRAP ABCD 3
stop
}
}

actor SaturnBlackHolePart
{
+ISMONSTER
+NOCLIP
+NOGRAVITY
+DROPOFF
+MISSILE
+ACTIVATEIMPACT
+ACTIVATEPCROSS
+SHOOTABLE
+DONTREFLECT
+DONTSPLASH
+DONTBLAST
+DONTRIP
+INVULNERABLE
+NOBLOOD
+FORCEXYBILLBOARD
+MOVEWITHSECTOR
+NOTAUTOAIMED
+BRIGHT
+NOINTERACTION
painchance 255
maxstepheight 0
Scale 0.1
height 56
radius 38
var int user_x;
var int user_degrees;
const int NUM_1 = 4;
const int NUM_2 = 32;
+THRUSPECIES
species "SaturnParticle"
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 A 0 A_setUserVar("user_x",448)
TNT1 A 0 A_setUserVar("user_degrees",angle)
Goto BeginSpin

BeginSpin:
TNT1 A 0 A_GiveInventory("CutterFlag",1)
TNT1 A 0 A_JumpIfInventory("CutterFlag",24,"Orbit")
BHOL Z 1 A_Warp(AAPTR_MASTER,user_x,0,0,user_degrees,WARPF_ABSOLUTEANGLE|WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION) 
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End") TNT1 A 0 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate")
TNT1 A 0 A_setUserVar("user_degrees",user_degrees-NUM_1) TNT1 A 0 A_SetScale(scalex+0.1,scaley+0.1)
loop

Orbit:
BHOL Y 1 A_Warp(AAPTR_MASTER,user_x,0,0,user_degrees,WARPF_ABSOLUTEANGLE|WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION) 
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End") TNT1 A 0 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate")
TNT1 A 0 A_setUserVar("user_degrees",user_degrees-NUM_1)
BHOL Y 1 A_Warp(AAPTR_MASTER,user_x,0,0,user_degrees,WARPF_ABSOLUTEANGLE|WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION) 
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End") TNT1 A 0 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate")
TNT1 A 0 A_setUserVar("user_degrees",user_degrees-NUM_1)
BHOL Z 1 A_Warp(AAPTR_MASTER,user_x,0,0,user_degrees,WARPF_ABSOLUTEANGLE|WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION) 
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End") TNT1 A 0 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate")
TNT1 A 0 A_setUserVar("user_degrees",user_degrees-NUM_1)
BHOL Z 1 A_Warp(AAPTR_MASTER,user_x,0,0,user_degrees,WARPF_ABSOLUTEANGLE|WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION) 
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End") TNT1 A 0 A_JumpIfInTargetInventory("SaturnBlackHoleTrigger",1,"Detonate")
TNT1 A 0 A_setUserVar("user_degrees",user_degrees-NUM_1)
loop

Detonate:
BHOL Y 1 A_Warp(AAPTR_MASTER,user_x,0,0,user_degrees,WARPF_ABSOLUTEANGLE|WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION)
TNT1 A 0 A_setUserVar("user_degrees",user_degrees-32) TNT1 A 0 A_setUserVar("user_x",user_x-32)
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End") TNT1 A 0 A_JumpIf(user_x<=0,"Death")
BHOL Z 1 A_Warp(AAPTR_MASTER,user_x,0,0,user_degrees,WARPF_ABSOLUTEANGLE|WARPF_INTERPOLATE|WARPF_NOCHECKPOSITION) 
TNT1 A 0 A_setUserVar("user_degrees",user_degrees-32) TNT1 A 0 A_setUserVar("user_x",user_x-32)
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"End") TNT1 A 0 A_JumpIf(user_x<=0,"Death")
loop

Death:
TNT1 A 0
stop

End:
TNT1 A 0 A_spawnItemEx("ExplosionEffect1")
stop
}
}

actor BlackHoleGravityShot : BlackHoleRingShot {Obituary "$OB_SATURN4"}

actor SaturnBlackHoleTrigger : Powerup
{
    powerup.duration 5
}
