//	Mobility recoded
actor Punk : VCBaseClass
{
	Player.ScoreIcon "PUNKMUGS"
	player.startitem "BaseFlagPack", 1
	player.startitem "IsFromGB3"
	player.soundclass "punkc"
	player.displayname "Punk"
	player.jumpz 12
	player.startitem "ScrewCrusherBoss"
	player.startitem "CanThirdFire", 1
	player.startitem "UltimateAttackItem3", 1
	player.startitem "UltSoundWatcherSpawn3"
	Player.ViewHeight 50
	States
	{
		Spawn:
		PUNK A 0
		PUNK B 1 A_JumpIf(z-floorz>0, "Jumping")
		PUNK A 1 A_JumpIf(z-floorz>0, "Jumping")
		Goto Spawn+2
		
		See:
		PUNK BBBBBCCCCCDDDDDEEEEE 1 A_JumpIf(z-floorz>0, "Jumping")
		Goto Spawn

		Jumping:
		PUNK I 1 A_JumpIf(z-floorz<=0, "Land")
		loop
		
		Land:
		PUNK [ 1 A_JumpIf(z-floorz>0, "Jumping")
		PUNK [ 1 A_JumpIf(z-floorz>0, "Jumping")
		PUNK [ 1 A_JumpIf(z-floorz>0, "Jumping")
		PUNK [ 1 A_JumpIf(z-floorz>0, "Jumping")
		goto Spawn+2

		Missile:
		PUNK A 0 A_JumpIfInventory("PunkCannonAnim",1,"Animation2")
		PUNK FFFFF 1 A_JumpIf(z-floorz>0, "JumpingMissile")
		
		Missile2:
		PUNK GGGG 1 A_JumpIf(z-floorz>0, "JumpingMissile2")
		Goto Spawn+1
		
		JumpingMissile:
		PUNK A 0 A_JumpIfInventory("PunkCannonAnim",1,"Animation2")
		PUNK JJJJJ 1 A_JumpIf(z-floorz<=0, "Missile")
		
		JumpingMissile2:
		PUNK KKKK 1 A_JumpIf(z-floorz<=0, "Missile2")
		goto Spawn+2

		Animation1: //Cannonball pose
		PUNK VWXY 2
		
		Animation2:
		PUNK XYXY 1
		PUNK XYXY 1 A_JumpIfInventory("PunkCannonAnim",1,"Animation2")
		
		Animation4:
		PUNK WV 2
		goto Spawn+1
		
		Animation3: //User1 thumbs down pose
		PUNK NNNNNN 1 A_JumpIf(z-floorz>0, "JumpingA3")
		goto Spawn+1
		
		JumpingA3:
		PUNK ZZZZZZ 1 A_JumpIf(z-floorz<=0, "Animation3")
		goto Jumping
		
		ClassTimeStop:
		PLAY A 0 SetPlayerProperty(0,1,4)
		PLAY A 0 ACS_Execute(528,0)
		PUNK AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_Stop
		PLAY A 0 SetPlayerProperty(0,0,4)
		Goto pain+1
		ClassPain:
		PUNK HHHHHHHHHH 2 A_SpawnItem("PainFX",0,3)
		PUNK H 0 A_JumpIfInventory("PunkCannonAnim",1,"Animation2")
		Goto Spawn+1
		ClassDeath:
		PUNK H 20 ACS_ExecuteAlways(999,0,0)
		PUNK H 0 A_PlayerScream
		NOFX A 0 A_SpawnItemEx("FakeDeathFXMMV", 0, 0, 32, 0, 0, 0, 0, 1)
		NOFX A 1 A_CheckPlayerDone
		wait
		ClassIceDeath:
		PUNK A 35
		NOFX A 0 A_SpawnItemEx("FrozenDeathFX",0,0,16)
		NOFX A 1 A_CheckPlayerDone
		wait
		WeaponGetM:
		CUTM H 0 A_JumpIfInTargetInventory("ScrewCrusherWepM",1,2)
		CUTM H 0 A_GiveToTarget("WeaponGetter")
		CUTM H 0 A_GiveToTarget("ScrewCrusherWepM")
		goto ClassDeath
	}
}

actor ScrewCrusherBoss : VCBaseWeapon 
{
+WEAPON.NOAUTOAIM
Obituary "$OB_PUNK1"
weapon.Ammotype "BaseAltfireAmmo"
States
{
Ready:
TNT1 A 0
PNKA A 0 A_JumpIfInventory("BaseAltfireAmmo",28,"Ready.TF")
PNKA A 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",3,112)) PNKA A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
PNKA A 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",3,112)) PNKA A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
PNKA A 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",3,112)) PNKA A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
PNKA A 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",3,112)) PNKA A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
PNKA A 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",3,112)) PNKA A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
PNKA A 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",3,112)) PNKA A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
PNKA A 0 A_GiveInventory("BaseAltfireAmmo",2)
goto Ready

Ready.TF:
PNKA A 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",3,112)) PNKA A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") PNKA A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
PNKA A 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",3,112)) PNKA A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") PNKA A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
PNKA A 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",3,112)) PNKA A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") PNKA A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
PNKA A 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",3,112)) PNKA A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") PNKA A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
PNKA A 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",3,112)) PNKA A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") PNKA A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
PNKA A 1 A_WeaponReady(WRF_NOSECONDARY*CallACS("VC_AmmoCheck",3,112)) PNKA A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") PNKA A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
PNKA A 0 A_GiveInventory("BaseAltfireAmmo",2)
goto Ready

Deselect:
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
PNKA A 1 A_Lower
Loop

Select:
TNT1 A 0
TNT1 A 0 ACS_ExecuteAlways(991,0,3944)
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
PNKA A 1 A_Raise
Loop

User1:
PNKA A 1 A_FireCustomMissile("SuzyPreview",0,0,0,8)
PNKA AA 1 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
PNKA A 0

User1.Finish:
PNKA A 0 A_PlaySoundEx("weapon/punkthumbsdown","Weapon")
PNKA A 0 ACS_NamedExecuteWithResult("VC_SetState",3)
PNKA F 2
PNKA F 0 A_TakeInventory("BaseAltfireAmmo",28)
PNKA G 10 A_FireCustomMissile("PunkSuzyStart",0,0,0,8)
PNKA A 2
goto Ready

Fire:
PNKA A 0 A_JumpIfInventory("BaseCustomFlag1",1,"Fire.Ult")
PNKA C 1 Offset(-67, 28)
PNKA D 1 Offset(-134, 37)
PNKA D 1 Offset(-121, 13)
PNKA D 1 Offset(-71, -2)
PNKA D 1 Offset(-11, -12)
PNKA D 0 A_PlaySoundEx("weapon/screwcrusher","Weapon")
PNKA C 0 A_FireCustomMissile("PunkCrusher",0,0,1,8)
PNKA E 1 Offset(60, -26) A_GiveInventory("BaseAltfireAmmo",2)
PNKA E 1 Offset(129, -36)
PNKA E 1 Offset(192, -44)
TNT1 A 3 Offset(60, 90)
TNT1 A 6 Offset(60, 90) A_GiveInventory("BaseAltfireAmmo",2)
TNT1 A 4 Offset(60, 90) A_GiveInventory("BaseAltfireAmmo",2)
PNKA AA 1 Offset(30, 60)
Goto Ready

Fire.Ult:
TNT1 A 0 A_TakeInventory("VC_Timer",999)
TNT1 A 0 A_ChangeFlag("FLOORHUGGER",0)
TNT1 A 0 A_SpawnItemEx("NapalmExplodeFX")
TNT1 A 0 A_GiveInventory("Visible")
TNT1 A 0 ThrustThingZ(0,40,0,0)
TNT1 A 0 A_StopSound(CHAN_WEAPON)
TNT1 A 0 A_PlaySoundEx("weapon/punkpopout","Body")
TNT1 A 0 A_PlaySoundEx("weapon/punkpopout2","Auto")
PNKA AAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("PunkUltRock",random(-32,32),random(-32,32),0,random(-36,36),0,random(12,48),random(0,359))
TNT1 A 0 A_TakeInventory("MediumUltimateAmmo",75)
TNT1 AAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("PunkUltHitbox")
goto UltLoop

Altfire:
RATU A 0 A_JumpIfInventory("NoAltfire",1,"Ready")
PNKA A 0 A_ChangeFlag("INVULNERABLE",1)
PNKA A 0 A_GiveInventory("InvProtection",1)
HAZH D 0 A_ChangeFlag("PICKUP",0)
PNKA A 0 A_PlaySoundEx("weapon/punkcurl","Weapon")
PNKA A 0 ACS_NamedExecuteWithResult("VC_SetState",1)
PNKA AA 1 OffSet(0,48) A_SetGravity(1.2)
PNKA AA 1 OffSet(0,69)
PNKA AA 1 OffSet(0,90)
TNT1 A 0 ThrustThingZ(0,24,0,0)
TNT1 AAAAA 1 A_SpawnItemEx("PunkBounceHitbox")

Altfire.AirLoop:
PNKA A 0 A_GiveInventory("PunkCannonAnim")
TNT1 A 0 A_GiveInventory("ColdWaterHandler")
TNT1 A 0 A_SetGravity(1.2)
TNT1 A 0 A_GiveInventory("VC_Timer",1)
TNT1 A 0 A_JumpIfInventory("VC_Timer",280,"Altfire.Launch")
TNT1 A 0 A_SpawnItemEx("PunkBounceHitbox")
PNKA A 0 A_JumpIfInventory("CutterFlag",3,"Altfire.Launch")
TNT1 A 1 A_CheckFloor("Altfire.StrongQuake")
loop

Altfire.StrongQuake:
PNKA A 0 A_GiveInventory("CutterFlag",1)
PNKA A 0 A_Quake(6,10,0,128)
PNKA A 0 ThrustThingZ(0,24,0,0)
TNT1 A 0 A_PlaySoundEx("misc/quake","Weapon")
TNT1 AAAAAAAAAA 1 A_SpawnItemEx("PunkBounceHitbox")
goto Altfire.AirLoop

Altfire.Launch:
TNT1 AAA 1 A_Stop
PNKA A 0 A_TakeInventory("BaseAltfireAmmo",112)
PNKA A 0 SetPlayerProperty(0,1,4)
PNKA A 0 A_PlaySoundEx("weapon/punkroll","Weapon")

Altfire.Loop:
TNT1 A 0 A_SpawnItemEx("PunkCannonImage",0,0,0,0,0,0,0,SXF_TRANSFERTRANSLATION)
TNT1 A 0 A_GiveInventory("PunkMobility",1)//A_ChangeVelocity(cos(pitch)*60,0,-sin(pitch)*60,CVF_RELATIVE|CVF_REPLACE)
TNT1 A 1 A_SpawnItemEx("PunkCannonHitbox", 0, 0, -16, momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION)
TNT1 A 0 A_GiveInventory("WeaponCharge",1)
TNT1 A 0 A_JumpIfInventory("BaseCustomFlag2",1,"Altfire.Crash")
TNT1 A 0 A_JumpIfInventory("WeaponCharge",15,"Altfire.End")
loop

Altfire.Crash:
TNT1 A 0 A_Stop
TNT1 A 0 A_Quake(2,20,0,300)
TNT1 AAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("PunkBallHitbox", 0, 0, -16, momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION)
TNT1 A 0 SetPlayerProperty(0,0,4)
TNT1 A 0 A_Stop
goto Altfire.End2

Altfire.End:
TNT1 A 0 A_JumpIfInventory("BaseCustomFlag2",1,"Altfire.Crash")
TNT1 A 0 SetPlayerProperty(0,0,4)
TNT1 A 1 A_ChangeVelocity(CallACS("VC_XYMob",25), 0, momz, CVF_REPLACE | CVF_RELATIVE)
TNT1 A 0 A_JumpIfInventory("BaseCustomFlag2",1,"Altfire.Crash")
TNT1 AAA 1

Altfire.End2:
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",4)
TNT1 A 0 A_ChangeFlag("INVULNERABLE",0)
HAZH D 0 A_ChangeFlag("PICKUP",1)
PNKA A 0 A_TakeInventory("HalfHalfDamageProtection")
PNKA A 0 A_TakeInventory("InvProtection",1)
TNT1 A 0 A_TakeInventory("CutterFlag",999)
TNT1 A 0 A_TakeInventory("WeaponCharge",999)
TNT1 A 0 A_GiveInventory("GravityRestore")
PNKA AAAAA 1 OffSet(0,90) A_TakeInventory("PunkCannonAnim")
PNKA AAA 1 OffSet(0,69) A_TakeInventory("BaseCustomFlag2")
PNKA A 1 OffSet(0,48) A_TakeInventory("VC_Timer",999)
goto Ready

UltimateAttack:
TNT1 A 0 ACS_NamedExecuteAlways("VC_UltimateText",0,116)
TNT1 A 0 ACS_ExecuteAlways(191,0,APROP_JumpZ,0,1)
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",1)
HAZH D 0 A_TakeInventory("UnSolid",1)
HAZH D 0 A_ChangeFlag("SOLID",0)
HAZH D 0 A_ChangeFlag("PICKUP",0)
HAZH D 0 A_ChangeFlag("THRUACTORS",1)
TNT1 A 0 A_GiveInventory("UltBuildCooldownGiver",1)
CUTA A 0 A_PlaySoundEx("classes/ultimateactivation","SoundSlot6")
TNT1 A 0 A_ChangeFlag("INVULNERABLE",1)
PNKA A 0 A_GiveInventory("PunkCannonAnim")
PNKA A 0 A_GiveInventory("InvProtection",1)
PNKA A 0 A_GiveInventory("BaseCustomFlag1")
PNKA A 0 A_GiveInventory("BaseAltfireAmmo",112)
PNKA AA 1 OffSet(0,48) A_Stop
PNKA AA 1 OffSet(0,69) A_Stop
PNKA AA 1 OffSet(0,90) A_Stop 
TNT1 A 3 ThrustThingZ(0,32,1,0)

UltLoop:
TNT1 A 0 A_JumpIfInventory("MediumUltimateAmmo",1,1)
goto UltFinish
TNT1 A 0 A_GiveInventory("VC_Timer",1)
TNT1 A 0 A_JumpIfInventory("VC_Timer",280,"UltStart")
TNT1 A 1 A_CheckFloor("UltStart")
loop

UltStart:
TNT1 A 0 A_GiveInventory("PunkSpeed")
PNKA A 0 A_GiveInventory("PunkCannonAnim")
PNKA A 0 A_GiveInventory("Invisible")
PNKA A 0 A_ChangeFlag("FLOORHUGGER",1)
PNKA A 0 A_PlaySoundEx("weapon/spreaddrillhit","Body")
TNT1 A 0 A_StopSound(0)
PNKA AAAAAAAA 0 A_SpawnItemEx("PunkUltRock",random(-32,32),random(-32,32),0,random(-6,6),0,random(2,8),random(0,359))

UltReady:
PNKA A 0 A_GiveInventory("PunkCannonAnim")
TNT1 A 0 A_PlaySoundEx("weapon/punkdig","Weapon")
TNT1 AA 0 A_SpawnItemEx("PunkUltRock",random(-32,32),random(-32,32),0,random(-6,6),0,random(2,8),random(0,359))
TNT1 A 0 A_Quake(1,2,0,128)
TNT1 A 0 A_TakeInventory("MediumUltimateAmmo",2)
TNT1 A 1 A_WeaponReady(WRF_NOSECONDARY)
TNT1 A 0 A_JumpIfInventory("MediumUltimateAmmo",1,1)
goto Fire.Ult
TNT1 AA 0 A_SpawnItemEx("PunkUltRock",random(-32,32),random(-32,32),0,random(-6,6),0,random(2,8),random(0,359))
TNT1 A 0 A_Quake(1,2,0,128)
TNT1 A 1 A_WeaponReady(WRF_NOSECONDARY)
TNT1 A 0 A_JumpIfInventory("MediumUltimateAmmo",1,1)
goto Fire.Ult
TNT1 AA 0 A_SpawnItemEx("PunkUltRock",random(-32,32),random(-32,32),0,random(-6,6),0,random(2,8),random(0,359))
TNT1 A 0 A_Quake(1,2,0,128)
TNT1 A 1 A_WeaponReady(WRF_NOSECONDARY)
TNT1 A 0 A_JumpIfInventory("MediumUltimateAmmo",1,1)
goto Fire.Ult
TNT1 AA 0 A_SpawnItemEx("PunkUltRock",random(-32,32),random(-32,32),0,random(-6,6),0,random(2,8),random(0,359))
TNT1 A 0 A_Quake(1,2,0,128)
TNT1 A 1 A_WeaponReady(WRF_NOSECONDARY)
TNT1 A 0 A_JumpIfInventory("MediumUltimateAmmo",1,1)
goto Fire.Ult
TNT1 AA 0 A_SpawnItemEx("PunkUltRock",random(-32,32),random(-32,32),0,random(-6,6),0,random(2,8),random(0,359))
TNT1 A 0 A_Quake(1,2,0,128)
TNT1 A 1 A_WeaponReady(WRF_NOSECONDARY)
TNT1 A 0 A_JumpIfInventory("MediumUltimateAmmo",1,"UltReady")
goto Fire.Ult

UltFinish:
TNT1 A 0 A_TakeInventory("BaseCustomFlag1")
TNT1 A 0 A_GiveInventory("Visible")
TNT1 A 0 A_TakeInventory("MediumUltimateAmmo",999)
TNT1 A 0 A_TakeInventory("UltAttackFlag",1)
HAZH D 0 A_ChangeFlag("THRUACTORS",0)
DRIA A 0 A_SpawnItemEx("ReSolidifier")
TNT1 A 0 A_ChangeFlag("PICKUP",1)
TNT1 A 0 ACS_NamedExecuteWithResult("VC_SetState",4)
PNKA A 0 A_StopSound(CHAN_WEAPON)
TNT1 A 0 A_ChangeFlag("FLOORHUGGER",0)
TNT1 A 0 A_TakeInventory("PunkCannonAnim",999)
TNT1 A 0 A_TakeInventory("PunkSpeed")
PNKA AA 1 OffSet(0,90) A_Stop
PNKA AA 1 OffSet(0,69) A_Stop
PNKA AA 1 OffSet(0,48) A_Stop
TNT1 A 0 A_TakeInventory("PowerUltBuildCooldown",1)
TNT1 A 0 A_ChangeFlag("INVULNERABLE",0)
PNKA A 0 A_TakeInventory("InvProtection",1)
TNT1 A 0 ACS_ExecuteAlways(191,0,APROP_JumpZ,12,1)
goto Ready

Flash:
TNT1 A 0 A_JumpIfInventory("IsDead",1,"NoFlash")
TNT1 A 5 A_GiveInventory("BaseAltfireAmmo",2)
loop
}
}

actor PunkCrusher
{
Obituary "$OB_PUNK1"
PROJECTILE
damagetype "Punk"
Height 16
Radius 16
damage (17)
speed 40
scale 2.5
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
loopit:
SCRE AB 2
loop
Death:
TNT1 A 0 A_SpawnItemEx("PunkBouncingCrusher")
TNT1 A 1 A_PlaySoundEx("weapon/screwcrusher","Body")
stop
XDeath:
TNT1 A 0
stop
}
}


actor PunkBouncingCrusher
{
PROJECTILE
damagetype "Punk"
Obituary "$OB_PUNK1"
scale 2.5
-NOGRAVITY
+DOOMBOUNCE
+BOUNCEONCEILINGS
-ALLOWBOUNCEONACTORS
+CANBOUNCEWATER
bouncecount 5
bouncefactor 0.8
Speed 16
Radius 15
Height 8
gravity 1.8
Damage (10)
reactiontime 45
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
SCRE A 0 A_Recoil(-16)
SCRE A 0 ThrustThingZ(0, 65, 0, 1)
SCRE AB 2 A_Countdown
Goto Spawn+4
}
}

actor PunkCannonImage
{
+NOINTERACTION
-SOLID
+NOGRAVITY
renderstyle add
alpha 1.0
scale 2.5
States
{
Spawn:
TNT1 A 2
Fade:
PUNK XXYY 1 A_FadeOut(0.05)
loop
}
}

actor PunkCannonHitbox
{
species "DustManType"
+THRUSPECIES
Obituary "$OB_PUNK2"
PROJECTILE
+NOEXPLODEFLOOR
Radius 32
Height 64
scale 2.5
speed 0
damage (75)
Damagetype "PunkAlt"
States
{
Spawn:
TNT1 A 2
stop
}
}

actor PunkBallHitbox : BasicExplosion
{
Obituary "$OB_PUNK2"
damagetype "PunkRip"
States
{
Spawn:
TNT1 A 0
TNT1 A 1 A_Explode(1,96,0,0,96)
stop
}
}

actor PunkBounceHitbox : BasicExplosion
{
Obituary "$OB_PUNK2"
damagetype "PunkBounce"
States
{
Spawn:
TNT1 A 0
TNT1 A 1 A_Explode(3,48,0,0,48)
stop
}
}

Actor PunkBounceProtect : PowerProtection
{
	Powerup.Duration 3
	DamageFactor "PunkBounce", 0.0
}

actor PunkCannonAnim : Powerup
{
Powerup.Duration 35
}

actor PunkUltRock
{
+CLIENTSIDEONLY
PROJECTILE
+DOOMBOUNCE
bouncecount 4
-NOGRAVITY
+THRUACTORS
damage 0
scale 2.5
radius 2
height 2
bouncefactor 0.4
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
TNT1 A 0 A_Jump(128,"Spawn2")
Spawn1:
PUNK L 1
loop
Spawn2:
PUNK M 1
loop
}
}

actor SuzyPreview : FastProjectile
{
	PROJECTILE
	+SKYEXPLODE
	+NOEXPLODEFLOOR
	+THRUACTORS
	+DONTBLAST
	+DONTSPLASH
	damage (0)
	speed 600
	radius 16
	height 16
	states
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
		TNT1 A 1
		Death:
		TNT1 A 0 A_SpawnItemEx("SuzyFXHelper",0,0,0,0,0,0)
		TNT1 A 1
		stop
	}
}

actor SuzyFXHelper : BasicHelper
{
+CLIENTSIDEONLY
States
{
Spawn:
TNT1 A 0
TNT1 A 5 A_JumpIf(CallACS("GVH_IsTargetClient")==1,"Spawn2")
goto Death
Spawn2:
TNT1 A 0 A_SpawnItemEx("SuzyFX",0,0,0,0,0,-1000)
TNT1 A 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists")==0,"Death")
stop
Death:
TNT1 A 0
stop
}
}

actor SuzyFX
{
	+SKYEXPLODE
	+NOEXPLODEFLOOR
	+NOTARGETSWITCH
	+DONTBLAST
	PROJECTILE
	scale 2.5
	radius 5
	height 5
	Renderstyle Translucent
	Alpha 0.6
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileFXCode",1)
		GSZY B 2
		stop
	}
}

actor PunkSuzyStart : FastProjectile
{
PROJECTILE
+SPECTRAL
Radius 4
Height 4
scale 2.5
+DONTBLAST
+RIPPER
+SKYEXPLODE
speed 600
damage (0)
States
{
Spawn:
TNT1 A 1
Death:
TNT1 A 0 A_CheckFloor("Floor")
TNT1 A 0 A_CheckCeiling("Ceiling")
TNT1 A 1 //A_PlaySoundEx("misc/catcherdrop","Body")
TNT1 A 0 A_SpawnItemEx("PunkSuzyMark",0,0,0,0,0,200,0)
stop
Floor:
TNT1 A 1 //A_PlaySoundEx("misc/catcherdrop","Body")
TNT1 A 0 A_SpawnItemEx("PunkSuzyMark",0,0,0,0,0,200)
stop
Ceiling:
TNT1 A 1 //A_PlaySoundEx("misc/catcherdrop","Body")
TNT1 A 0 A_SpawnItemEx("PunkSuzyMark",0,0,0,0,0,200)
stop
}
}

actor PunkSuzyMark
{
PROJECTILE
+SPECTRAL
+RIPPER
-DONTBLAST
+SKYEXPLODE
radius 2
height 8
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 A 1
goto Death
Death:
TNT1 A 0 A_SpawnItemEx("GiantSuzy",0,0,0,0,0,-30)
stop
}
}

actor GiantSuzy
{
Obituary "$OB_PUNK3"
PROJECTILE
Radius 1
Height 1
scale 2.5
-NOGRAVITY
damage(0)
damagetype "PunkSuzy"
+THRUACTORS
+FORCEXYBILLBOARD 
speed 30
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
TNT1 A 0 A_PlaySoundEx("misc/catcherdrop","Body")
loopit:
GSZY B 1
loop
Death:
TNT1 A 0 A_PlaySoundEx("weapon/punksuzy","Body")
GSZY A 0 A_Quake(4,18,0,420)
GSZY A 0 A_Explode(35,96,0,0,96)
GSZY A 0 A_SpawnItemEx("ShortSuzyRadiusThingyFX")
GSZY CDCBCDCBA 2
GSZY C 0 A_SpawnItemEx("RisingGiantSuzy",0,0,0,0,0,50)
stop
}
}

actor ShortSuzyRadiusThingyFX : GravityHoldFX
{
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_SetUserVar("user_angle", random(0, 6))
SpawnLoop:
TNT1 A 0 A_SpawnItemEx("SuzyShockwaveFX", 0, 0, 0, 10, 0, 0, user_angle, SXF_ABSOLUTEANGLE|SXF_NOCHECKPOSITION)
TNT1 A 0 A_SetUserVar("user_angle", user_angle + 20)
TNT1 A 0 A_Countdown
loop
Death:
TNT1 A 0
stop
}
}

actor SuzyShockwaveFX : BasicClientSide
{
+NOCLIP
translation "192:192=[164,230,255]:[164,230,255]"
scale 1.0
Radius 32
Height 8
States
{
Spawn:
	TNT1 AA 0 A_GiveInventory("ProjectileCode")
	QBOP G 2
	QBOP G 5 A_ChangeFlag("NOINTERACTION",0)
	Death:
	QBOP GGGGGGGG 1 A_FadeOut(0.1)
	loop
}
}
actor RisingGiantSuzy : GiantSuzy
{
+NOINTERACTION
+NOGRAVITY
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode")
loopit:
GSZY A 30
stop
Death:
TNT1 A 0
stop
}
}

actor PunkUltHitbox
{
species "DustManType"
+THRUSPECIES
Obituary "$OB_PUNK4"
PROJECTILE
+NOEXPLODEFLOOR
Radius 32
Height 32
scale 2.5
speed 0
damage (1000)
Damagetype "PunkUlt"
States
{
Spawn:
TNT1 A 2
stop
}
}

Actor PunkAltProtect : PowerProtection
{
	Powerup.Duration 35
	DamageFactor "PunkAlt", 0.0
}

actor PunkStopHandler : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_GiveInventory("BaseCustomFlag2",1)
TNT1 A 0 A_Stop
stop
}
}

actor PunkSpeed : PowerSpeed
{
	+POWERSPEED.NOTRAIL
	Powerup.Duration -50
	Speed  1.25
}

actor PunkMobility : BaseMovement
{
States
{
itTimeGo:
TNT1 A 0 A_ChangeVelocity(CallACS("VC_XYMob",cos(pitch)*60),0,-sin(pitch)*60,CVF_RELATIVE|CVF_REPLACE)
stop
}
}