Actor Puppeteer : PlayerPawn
{
	Health 150
	Mass 700
	Scale 0.1
	painchance 128
	limitedtoteam 1
	player.forwardmove 1.0
	player.sidemove 0.9
	Player.Maxhealth 200
	Player.DisplayName "TerrorPuppet"
	player.startitem "PuppeteerHands"
	Player.startitem "ArrowSingle", 35
	Player.StartItem "ClassID", 99
	Player.StartItem "IsGhoul", 1
	Player.StartItem "GhoulTeam", 1
	Player.StartItem "StringAmmo", 3
	player.crouchsprite "PUPP"
	player.soundclass "Pupp"
	Player.ScoreIcon "PUPPST"
	Species "Ghoul"
	Damagefactor "normal", 0.8
	Damagefactor "ChexWarrior", 0.8
	Damagefactor "AntiAirBolt", 1.9
    Damagefactor "fire2", 1.1
	Damagefactor "RenegadeFire", 1.1
    Damagefactor "AltFire2", 1.1
	Damagefactor "minion", 0.0
	Damagefactor "RevyRifleBullet", 0.6
	Damagefactor "KarStiglitz", 0.6
	Damagefactor "PistolBullets", 0.7
	Damagefactor "CalebRevolver", 0.7
	Damagefactor "ChexWarriorPistol", 0.7
    Damagefactor "IlluPewpewRifle", 0.6
	Damagefactor "SamDeagle", 0.6
	Damagefactor "ZombieIce", 0.0
    Damagefactor "ZombiePoison", 0.0
    Damagefactor "ZombieSlaps", 0.0
	Damagefactor "Bluefire", 0.0
	Damagefactor "Tenebra", 0.0
	Damagefactor "Judgement", 0.0
	Species "Ghoul"
	+NOSKIN
	+NOICEDEATH
	+QUICKTORETALIATE
	renderstyle translucent
	alpha 1.0
	States
	{
	Spawn:
		PUPP A 0 A_Changeflag("shootable",true)
		PUPP A 0 SetPlayerProperty(0,0,4)
		PUPP A 0 A_JumpIfInventory("AriaInfluence",10,"Dancing")
		TNT1 A 0 A_JumpIfInventory("GwenGoddessStack",100,"GwenGoddessDeath")
	    PUPP A 1 SetPlayerProperty(0,1,3)
        loop
	See:
		PUPP A 0 A_JumpIfHealthLower(75,"INeedHealingSee")
		TNT1 A 0 A_JumpIfInventory("GwenGoddessStack",100,"GwenGoddessDeath")
		PUPP A 0 A_JumpIfInventory("AriaInfluence",10,"Dancing")
		PUPP A 2 A_SetTranslucent(1.0)
		loop
	INeedHealingSee:
		TNT1 A 0 A_JumpIfInventory("GwenGoddessStack",100,"GwenGoddessDeath")
		PUPP A 0 A_JumpIfInventory("AriaInfluence",10,"Dancing")
		PUPP A 10 A_SetTranslucent(1.0)
		PUPP A 0 A_SpawnItemEx("GhoulINeedHealingTrail",random(-20,20),random(-20,20),0,0,0,10)
		PUPP A 0 A_SpawnItemEx("64GhoulINeedHealingTrail",random(-20,20),random(-20,20),0,0,0,10)
		Goto Spawn
	Dancing:
		PUPP A 0 A_TakeInventory("AriaInfluence",10)
		PUPP A 0 Setplayerproperty(0,1,4)
		PUPP AAAAAAAAAAAAAAAA 1
		PUPP A 0 ThrustThing(angle*random(0,224), 10, 0, 0)
		PUPP A 0 A_TakeInventory("AriaInfluence",10)
		PUPP AAAAAAAAAAAAAAAA 1
		PUPP A 0 ThrustThing(angle*random(0,224), 10, 0, 0)
		PUPP A 0 A_TakeInventory("AriaInfluence",10)
		PUPP AAAAAAAAAAAAAAAA 1
		PUPP A 0 ThrustThing(angle*random(0,224), 10, 0, 0)
		PUPP A 0 A_TakeInventory("AriaInfluence",10)
		PUPP AAAAAAAAAAAAAAAA 1
		PUPP A 0 ThrustThing(angle*random(0,224), 10, 0, 0)
		PUPP A 0 A_TakeInventory("AriaInfluence",10)
		PUPP AAAAAAAAAAAAAAAA 1
		PUPP A 0 ThrustThing(angle*random(0,224), 10, 0, 0)
		PUPP A 0 A_TakeInventory("AriaInfluence",10)
		PUPP AAAAAAAAAAAAAAAA 1
		PUPP A 0 ThrustThing(angle*random(0,224), 10, 0, 0)
		PUPP A 1 Setplayerproperty(0,0,4)
		PUPP A 0 A_TakeInventory("AriaInfluence",10)
		Goto Spawn
	Missile:
		TNT1 A 0 A_JumpIfInventory("GwenGoddessStack",100,"GwenGoddessDeath")
		PUPP A 0 A_JumpIfInventory("AriaInfluence",10,"Dancing")
		PUPP B 12
		goto See
	Pain:
		PUPP B 0 Setplayerproperty(0,0,4)
		PUPP B 0 A_JumpIf(alpha <= 0.1, 2)
		PUPP B 0 A_SetTranslucent(alpha-0.1)
		PUPP B 0 A_GiveInventory("StringAmmo",1)
		TNT1 A 0 A_JumpIfInventory("GwenGoddessStack",100,"GwenGoddessDeath")
		PUPP B 0 A_CustomMissile("PuppetString", 50, 0, random(0, 360))
		PUPP B 12
	PainIn:
		TNT1 A 0 A_JumpIfInventory("GwenGoddessStack",100,"GwenGoddessDeath")
		PUPP B 0 Setplayerproperty(0,0,4)
		PUPP B 2 A_SetTranslucent(alpha+0.1)
		PUPP B 0 A_JumpIf(alpha < 1.0, "PainIn")
		goto See
	Pain.Vivi:
	PUPP A 0 A_SetPitch(pitch - 3.0)
	PUPP A 0 A_SetAngle(angle + (random(-50,50)/10))
	Goto Pain
	Pain.ViviMine:
	PUPP A 0 ThrustThingZ(0,70,0,0)
	Goto Pain
	Death.LoWangVampiric:
	TNT1 A 0 A_GiveToTarget("SWLoWangBloody",1)
	TNT1 A 0 A_JumpIfInventory("BloodCurseItem",1,"Death",AAPTR_TARGET)
	TNT1 A 0 A_GiveToTarget("Health",20)
	Goto Death
	Death.SkarletPistolDrain:
	TNT1 A 0 A_JumpIfInventory("BloodCurseItem",1,"Death",AAPTR_TARGET)
	TNT1 A 0 A_GiveToTarget("Health",50)
	Goto Death
	Death.SkarletVampiric:
	TNT1 A 0 A_JumpIfInventory("BloodCurseItem",1,"Death",AAPTR_TARGET)
	TNT1 A 0 A_GiveToTarget("Health",60)
	Goto Death
	Death.DoomChainSaw:
	TNT1 A 0 A_GiveToTarget("cell",50)
	TNT1 A 0 A_GiveToTarget("RocketAmmo",5)
	TNT1 A 0 A_GiveToTarget("clip1",50)
	TNT1 A 0 A_GiveToTarget("Shell",10)
	Goto Death
	Death.D64Pistol:
	TNT1 A 0 A_GiveToTarget("D64UnmakerUpgrades",1)
	TNT1 A 0 A_GiveToTarget("Cell",75)
	TNT1 A 0 A_GiveToTarget("D64KilledCount",1)
	Goto DeathAnimAlt
	Death.Plasma:
	TNT1 A 0 A_GiveToTarget("CyborgFuel",25)
	Goto DeathAnim
	Death.Telefrag:
	Goto Death.UnmakerLaser
	Pain.GwenPlasma2:
		TNT1 A 0 A_JumpIfInventory("GwenGoddessStack",100,"GwenGoddessDeath")
		PUPP B 0 Setplayerproperty(0,0,4)
		PUPP B 0 A_Pain
		PUPP B 20 Setplayerproperty(0,1,0)
		PUPP B 2 Setplayerproperty(0,0,0)
		Goto See
	GwenGoddessDeath:
		TNT1 A 0 SetPlayerProperty(0,1,4)
		TNT1 A 0 A_SetTranslucent (1.0, 0)
		TNT1 A 0 A_SpawnItemEx("GwenTimeImplosionRing")
		TNT1 A 0 A_Playsound("Gwen/DivineExplosionSound",6,1,0,ATTN_NONE)
		PUPP B 24 SetPlayerProperty(0,1,4)
		TNT1 A 0 A_SpawnItemEx("GwenTimeExplosionRingDamageFX")
		TNT1 A 0 A_SpawnItemEx("GwenTimeExplosionRingDamage")
		TNT1 A 0 A_SpawnItemEx("GwenTimeExplosionRing")
		TNT1 A 0 A_SpawnItemEx("GwenTimeExplosionRingX")
		TNT1 A 0 A_SpawnItemEx("GwenThunderFX")
		TNT1 A 0 A_SpawnItemEx("GwenGoddessStateEXP")
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("GwenThunderFX_Spark2", 0, 0, 8, 0.01 * Random(-300, 300), 0.01 * Random(-300, 300), 0.01 * Random(0, 600), 0, 128, 0)
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("GwenThunderFX_Spark2", 0, 0, 8, 0.01 * Random(-300, 300), 0.01 * Random(-300, 300), 0.01 * Random(0, 600), 0, 128, 0)
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("GwenThunderFX_Spark2", 0, 0, 8, 0.01 * Random(-300, 300), 0.01 * Random(-300, 300), 0.01 * Random(0, 600), 0, 128, 0)
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("GwenThunderFX_Spark2", 0, 0, 8, 0.01 * Random(-300, 300), 0.01 * Random(-300, 300), 0.01 * Random(0, 600), 0, 128, 0)
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("GwenThunderFX_Spark2", 0, 0, 8, 0.01 * Random(-300, 300), 0.01 * Random(-300, 300), 0.01 * Random(0, 600), 0, 128, 0)
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("GwenThunderFX_Spark2", 0, 0, 8, 0.01 * Random(-300, 300), 0.01 * Random(-300, 300), 0.01 * Random(0, 600), 0, 128, 0)
		TNT1 AAAAAAAAAAAA 0 A_SpawnItemEx("KNThunderFX_Smoke", 0, 0, 0, 0.01 * Random(-125, 125), 0.01 * Random(-125, 125), 0.01 * Random(25, 245), 0, 128, 0)
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("GwenThunderFX_Spark", 0, 0, 8, 0.01 * Random(-300, 300), 0.01 * Random(-300, 300), 0.01 * Random(0, 600), 0, 128, 0)
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 A_SpawnItemEx("GwenThunderFX_Spark", 0, 0, 8, 0.01 * Random(-300, 300), 0.01 * Random(-300, 300), 0.01 * Random(0, 600), 0, 128, 0)
		TNT1 A 0 DamageThing(100000)
		Goto Death
	Death:
	DeathAnim:
		TNT1 A 0 A_GiveToTarget("KillBeep",1)
		TNT1 A 0 A_SpawnItemEx("AdditionalGhoulDeathVFX")
	    PUPP B 0 A_GiveToTarget("KilledMe",1)
		PUPP B 0 A_GiveToTarget("KilledTerrorPuppet",1)
		PUPP B 0 A_SetTranslucent(1.0)
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP BBB 4 A_FadeOut(0.1)
		PUPP CCC 4 A_FadeOut(0.1)
		PUPP DDD 4 A_FadeOut(0.1)
		TNT1 A -1
		stop
	DeathAnimAlt:
		TNT1 A 0 A_GiveToTarget("KillIndicator",1)
		TNT1 A 0 A_SpawnItemEx("AdditionalGhoulDeathVFX")
	    PUPP B 0 A_GiveToTarget("KilledMe",1)
		PUPP B 0 A_GiveToTarget("KilledTerrorPuppet",1)
		PUPP B 0 A_SetTranslucent(1.0)
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP BBB 4 A_FadeOut(0.1)
		PUPP CCC 4 A_FadeOut(0.1)
		PUPP DDD 4 A_FadeOut(0.1)
		TNT1 A -1
		stop
	Death.ChexWarrior:
		PUPP B 0 A_GiveToTarget("KillIndicator",1)
		PUPP B 0 A_TakeInventory("KilledCount",999)
		PUPP B 0 A_GiveToTarget("KilledMe",1)
		PUPP B 0 A_GiveToTarget("KilledTerrorPuppet",1)
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_SpawnItemEx("ChexCereal",0,0,32,random(2,3),momy,random(8,12),random(-180,180))
		PUPP B 0 A_GiveToTarget("ChexArmorBonus",25)
		PUPP B 0 A_GiveToTarget("ChexBoop",1)
		PUPP B 0 A_Stop
		PUPP B 0 A_NoGravity
		PUPP B 0 A_ChangeFlag("DONTGIB",1)
		PUPP B 0 A_PlaySoundEx("Teleport/Chex",7)
		PUPP B 3 A_SpawnItem("SmallZorch")
		PUPP B 3 A_SetTranslucent(0.9,0)
		PUPP B 0 A_Scream
		PUPP B 3 A_SetTranslucent(0.8,0)
		PUPP B 0 A_NoBlocking
		PUPP B 3 A_SetTranslucent(0.7,0)
		PUPP B 3 A_SetTranslucent(0.6,0)
		PUPP B 3 A_SetTranslucent(0.5,0)
		PUPP B 3 A_SetTranslucent(0.4,0)
		PUPP B 3 A_SetTranslucent(0.3,0)
		PUPP B 3 A_SetTranslucent(0.2,0)
		PUPP B 3 A_SetTranslucent(0.1,0) 
		TNT1 A 1 A_SetTranslucent(1,0)
		TNT1 A -1
		Stop
	Death.CarolineDamage:
		NULL A 0 A_SpawnItemEx("CarolineHeart",0,0,32,random(2,3),momy,random(8,12),random(-180,180))
		Goto Death.UnmakerLaser
	Death.MapGibber:
		TNT1 A 0 A_PlaySound("car/hit",chan_auto)
	Death.MapGibber2:
	Death.UnmakerLaser:
		TNT1 A 0 A_GiveToTarget("KillBeep",1)
		TNT1 A 0 A_SpawnItemEx("AdditionalGhoulDeathVFX")
		TNT1 A 0 A_TakeInventory("KilledCount",999)
		TNT1 A 0 A_GiveToTarget("KilledMe",1)
		TNT1 A 0 A_GiveToTarget("KilledTerrorPuppet",1)
		TNT1 A 1
		TNT1 A 0 A_NoBlocking
		TNT1 A 0 A_Gravity
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		PUPP B 0 A_CustomMissile("PuppetString",0, 0, random(0, 360))
		TNT1 A 0 A_CustomMissile("ArchvileFirex3", 0,0,random(0,360), 2,0)
		TNT1 A 0 A_CustomMissile("ArchvileFirex3", 0,0,random(0,360), 2,0)
		TNT1 A 0 A_CustomMissile("ArchvileFirex3", 0,0,random(0,360), 2,0)
		TNT1 A 0 A_CustomMissile("ArchvileFirex3", 0,0,random(0,360), 2,0)
		TNT1 A 0 A_CustomMissile("ArchvileFirex3", 0,0,random(0,360), 2,0)
		NULL A 1 A_SpawnItemEx("SoulGIBBER", 0, 0, 0, 0, 0, 0, 0, 160, 0)
		NULL A -1
		Stop
	Death.MarineShotgun:
	PUPP B 0 A_GiveToTarget("grenadeammo",1)
	PUPP B 0 A_GiveToTarget("shell",3)
	PUPP B 0 A_GiveToTarget("clip1",20)
	Goto DeathAnim
	Death.Marinemachinegun:
	PUPP B 0 A_GiveToTarget("grenadeammo",1)
	PUPP B 0 A_GiveToTarget("shell",3)
	PUPP B 0 A_GiveToTarget("clip1",20)
	Goto DeathAnim
	Death.Marinepistol:
	PUPP B 0 A_GiveToTarget("grenadeammo",1)
	PUPP B 0 A_GiveToTarget("shell",3)
	PUPP B 0 A_GiveToTarget("clip1",20)
	Goto DeathAnim
	Death.ChexWarriorPistol:
	Death.ChexWarriorChainsaw:
	Goto Death.ChexWarrior
	Death.RenegadeBullets:
	Death.RenegadeFire:
	Death.ArtilleryDamage:
		TNT1 A 0 A_GiveToTarget("RenegadeKillItem",1)
		Goto DeathAnimAlt
	Death.CalebDynamite:
		TNT1 A 0 A_GiveToTarget("KilledG",1)
	Death.CalebShotgun:
	Death.CalebRevolver:
		TNT1 A 0 A_GiveToTarget("Health",20)
		TNT1 A 0 A_SpawnItemEx("CalebHeart",0,0,32,random(2,3),momy,random(8,12),random(-180,180))
		TNT1 A 0 A_GiveToTarget("CalebHeartbeat",1)
		Goto DeathAnimAlt
	Death.Grenade:
		PUPP B 0 A_GiveToTarget("KilledG",1)
		Goto DeathAnim
	Pain.EngineerSaw:
	Pain.Ghosttrap:
	Pain.GBFire:
	Pain.Misty:
	Pain.GBSaw:
	Pain.GBString:
	Pain.GBNuke:
	Pain.Ice2:
	Pain.Ice:
	Pain.ElecStorm:
	Pain.AltFire2:
	Pain.AltIce2:
	Pain.Fire2:
	Pain.Doggo:
	Pain.LaraArrow:
	Pain.Wind2:
	Pain.Grenade:
	Pain.Grenade2:
	Pain.TemplarLightningRain:
	Pain.CarolineDamage:
	Pain.ChexWarrior:
	Pain.InariPlasma:
	Pain.Plasma:
	Pain.FlameProtect:
	Pain.DutchShotgun:
	Pain.KarenExplo:
	Pain.Sentinel:
	Pain.Divine:
	Pain.GwenPlasma3:
	Pain.MacheteSlicerino:
	Pain.AntiAirbolt:
	Pain.MechPewPews:
	Pain.RainbowNado:
		TNT1 A 0 ACS_NamedExecuteAlways("ChangeActivator",0)
		Goto Pain
	}
}

Actor StringAmmo : Ammo
{
	Inventory.PickupMessage ""
	Inventory.Amount 1
	Inventory.MaxAmount 3
	Inventory.Icon "PUP2F0"
	Ammo.BackPackAmount 3
	Ammo.BackPackMaxAmount 3
	+INVENTORY.IGNORESKILL
	States
	{
	Spawn:
		TNT1 A -1
		Stop
	}
}

Actor PuppeteerHands : Weapon
{
	Weapon.SelectionOrder 350
	Inventory.PickupSound ""
	Weapon.SlotNumber 1
	Inventory.PickupMessage ""
	Obituary "%o was sliced apart by %k's strings." 
	+WEAPON.NOAUTOAIM
	+WEAPON.DONTBOB
	Weapon.Kickback 0
	Weapon.YAdjust 0
	+INVENTORY.UNDROPPABLE
	inventory.icon "TNT1A0"
	Weapon.Ammotype "StringAmmo"
	States
	{
	Spawn:
		BPAK A 400
		Stop
	Ready:
		PUPP E 0
		PUPP E 150 A_WeaponReady
		PUPP E 0 A_GiveInventory("Stringammo",1)
		goto Ready+1
	Select:
		PUPP E 1 A_Raise
		loop
	Deselect:
		PUPP E 1 A_Lower
		loop
	Fire:
		PUPP E 2 offset (0, 55)
		PUPP E 2 offset (0, 75) 
		PUPP E 2 offset (0, 95) A_PlayWeaponSound("pupp/string1")
		PUPP E 0 offset (0, 75) A_FireCustomMissile("PuppetString",0,0,150,22)
		PUPP E 0 offset (0, 75) A_FireCustomMissile("PuppetString",0,0,0,22)
		PUPP E 0 offset (0, 75) A_FireCustomMissile("PuppetString",0,0,-150,22)
		PUPP E 4 offset (0, 55)
		PUPP E 27 offset (0, 32)
		goto Ready
	AltFire:
		PUPP E 1
		PUPP E 0 A_JumpIfInventory("StringAmmo",1,1)
		goto Ready
		PUPP E 2 offset (0, 55) A_TakeInventory("StringAmmo",1)
		PUPP E 0 A_PlayWeaponSound("pupp/string2")
		PUPP E 0 offset (0, 75) A_SpawnItemEx("PuppetStringX")
		PUPP E 12 offset (0, 95)
		PUPP E 2 offset (0, 55)
		PUPP E 8 offset (0, 32)
		goto Ready
	}
}

Actor PuppetString
{
	PROJECTILE
	+FLOORHUGGER
	+RIPPER
	+BLOODLESSIMPACT
	
	Speed 6
	Damage (0)
	Radius 6
	Height 16
	SeeSound "pupp/string1"
	
	states
	{
	Spawn:
		TNT1 A 1 A_SpawnItemEx("PuppetStringMissile",0,0,0,momx,momy,32,0,SXF_ABSOLUTEMOMENTUM | SXF_TRANSFERPOINTERS)//A_CustomMissile("PuppetStringMissile",0,0,0,CMF_TRACKOWNER|CMF_AIMDIRECTION,90)
		TNT1 A 0 A_PlaySoundEx("pupp/stringloop","body",0,-1)
		loop
	Death:
		TNT1 A 1  A_PlaySoundEx("pupp/string2","body",0)
		stop
	}
}

Actor PuppetString2
{
	PROJECTILE
	+FLOORHUGGER
	+RIPPER
	+BLOODLESSIMPACT
	
	Speed 0
	Damage (0)
	Radius 6
	Height 16
	
	reactiontime 30
	
	SeeSound "pupp/string1"
	
	states
	{
	Spawn:
		TNT1 A 1 A_SpawnItemEx("PuppetStringMissile",0,0,0,momx,momy,32,0,SXF_ABSOLUTEMOMENTUM | SXF_TRANSFERPOINTERS)//A_CustomMissile("PuppetStringMissile",0,0,0,CMF_TRACKOWNER|CMF_AIMDIRECTION,90)
		TNT1 A 0 A_PlaySoundEx("pupp/stringloop","body",0,-1)
		TNT1 A 0 A_CountDown
		loop
	Death:
		TNT1 A 1  A_PlaySoundEx("pupp/string2","body",0)
		stop
	}
}

Actor PuppetStringMissile
{
	PROJECTILE
	+RIPPER
	+BLOODLESSIMPACT
	+FORCEYBILLBOARD
	
	DamageType "PuppetStrings"
	
	speed 1
	damage (2)
	radius 6
	height 16
	
	xscale 0.3
	
	Obituary "%o was sliced apart by %k's razor-sharp strings."
	
	states
	{
	Spawn:
		//TNT1 A 1
		STRI A 1 bright
		loop
		//goto Spawn+1
	Death:
		TNT1 A 1
		stop
	}
}

Actor PuppetStringX : PuppetString
{
	Speed 0
	reactiontime 360
	SeeSound "pupp/string1"
	
	states
	{
	Spawn:
		TNT1 A 1 A_SpawnItemEx("PuppetStringMissileX",0,0,0,momx,momy,32,0,SXF_ABSOLUTEMOMENTUM | SXF_TRANSFERPOINTERS)//A_CustomMissile("PuppetStringMissile",0,0,0,CMF_TRACKOWNER|CMF_AIMDIRECTION,90)
		TNT1 A 0 A_PlaySoundEx("pupp/stringloop","body",0,-1)
		TNT1 A 0 A_CountDown
		loop
	Death:
		TNT1 A 1  A_PlaySoundEx("pupp/string2","body",0)
		stop
	}
}

Actor PuppetStringX2 : PuppetString
{
	Speed 6
	reactiontime 100
	SeeSound "pupp/string1"
	
	states
	{
	Spawn:
		TNT1 A 1 A_SpawnItemEx("PuppetStringMissileX",0,0,0,momx,momy,32,0,SXF_ABSOLUTEMOMENTUM | SXF_TRANSFERPOINTERS)//A_CustomMissile("PuppetStringMissile",0,0,0,CMF_TRACKOWNER|CMF_AIMDIRECTION,90)
		TNT1 A 0 A_PlaySoundEx("pupp/stringloop","body",0,-1)
		TNT1 A 0 A_CountDown
		loop
	Death:
		TNT1 A 1  A_PlaySoundEx("pupp/string2","body",0)
		stop
	}
}

Actor PuppetStringMissileX : PuppetStringMissile
{
	damage (0)
	Obituary "%o forgot how to dodge %k's strings."
	
	states
	{
	Spawn:
		//TNT1 A 1
		STRI B 1 bright A_Explode(512,6,0)
		loop
		//goto Spawn+1
	Death:
		TNT1 A 1
		stop
	}
}