// MAD CAT
actor MadCat : MechPlayer_Base {
	health 4000
	radius 64
	height 144
	mass 4000
	player.maxhealth 4000
	//player.colorrange 112, 127
	player.displayname "Mad Cat"
	player.forwardmove 0.54
	player.sidemove 0.15
	player.soundclass "mech"
	damagefactor "Falling", 12.0
	player.damagescreencolor "00 00 00"
	player.viewheight 112
	player.attackzoffset 18
	player.morphweapon "MadCatWeapons"
	scale 0.75
	maxstepheight 40
	states {
	Spawn2:
		MADC BB 7 SetPlayerProperty(0,1,0)
		MADC BA 7
		MADC ZYXWV 7
		MADC K 0 SetPlayerProperty(0,0,0)
		goto Spawn+6
	Spawn:
		MADC A 1
		MADC A 0 SetPlayerProperty(0,0,3)
		MADC A 0 ACS_ExecuteAlways (SC_STEALTH, 0, STEALTH_FORCEOFF)
		MADC A 0 ACS_Execute (315, 0)
		MADC A 0 A_GiveInventory ("MechEjectButton", 1)
		MADC A 0 A_GiveInventory ("IsMech", 1)
		MADC A 0 A_SpawnItemEx ("MechStepSmokePuff", 0, -42, 4)
		MADC A 8 A_SpawnItemEx ("MechStepDamageStrong", 0, -42, 4)
		MADC K 35
		MADC KKKK 35 A_PlaySound ("mech/idle", 5)
		MADC K 35
		goto Spawn+6
	See:
		MADC A 0 SetPlayerProperty(0,0,3)
		MADC ABCD 4 A_JumpIfHealthLower(500,"SeeDamaged")
		MADC E 0 A_PlaySoundEx("mech/idle","SoundSlot5",1,-1)
		MADC E 0 A_SpawnItemEx("MechStepSmokePuff", 0, -42, 4)
		MADC E 4 A_SpawnItemEx("MechStepDamageStrong", 0, -42, 4)
		MADC FGHI 4
		MADC J 0 A_SpawnItemEx("MechStepSmokePuff", 0, 42, 4)
		MADC J 4 A_SpawnItemEx("MechStepDamageStrong", 0, 42, 4)
		MADC A 0 A_JumpIf(WaterLevel >= 1, "InWater")
		Goto Spawn
	SeeDamaged:
		MADC ABCD 4 
		MADC E 0 A_PlaySoundEx("mech/idle","SoundSlot5",1,-1)
		MADC E 0 A_SpawnItemEx("MechStepSmokePuff", 0, -42, 4, 0, 0, 0, 0, 128, 0)
		MADC E 0 A_SpawnItemEx("MechStepDamageStrong", 0, -42, 4, 0, 0, 0, 0, 0, 0)
		MADC E 4 A_SpawnItemEx("EjectedMechSmokePuff",random(-32,32),random(-32,32),random(96,128),0,0,3,0,0,0)
		MADC FGHI 4
		MADC J 0 A_SpawnItemEx("MechStepSmokePuff", 0, 42, 4, 0, 0, 0, 0, 128, 0)
		MADC J 0 A_SpawnItemEx("MechStepDamageStrong", 0, 42, 4, 0, 0, 0, 0, 0, 0)
		MADC J 4 A_SpawnItemEx("EjectedMechSmokePuff",random(-32,32),random(-32,32),random(96,128),0,0,3,0,0,0)
		MADC A 0 A_JumpIf(WaterLevel >= 1, "InWater")
		Goto Spawn
	InWater:
		TNT1 A 0 Thing_Damage(0,400,12) //Drown
		goto Spawn
	Death:
		MADC K 0
		TNT1 A 0 A_JumpIfInventory("IsKamikaze",1,"Death.IonExplosion")
		TNT1 A 0 A_JumpIfInventory("IsBombCrate", 1, "Death.BombExplosion")
	DeathGo:
		MADC L 0 A_NoBlocking
		MADC LM 4
		MADC NOPQRSTUUU 4 A_SpawnItemEx("EjectedMechSmokePuff",random(-32,32),random(-32,32),random(32,64),0,0,3)
		TNT1 A 35 A_SpawnItemEx ("MechExplosionLarge", 0,0,0,0,0,0,0, SXF_NOCHECKPOSITION)
		DISR Z -1 A_SetTranslucent(0,0.0)
		Stop
	Death.IonExplosion:
		TNT1 A 0
		TNT1 A 0 A_JumpIfInventory ("IsRed", 1, "Death.NukeExplosion")
		TNT1 A 0 A_SpawnItemEx ("BlueStrikeKamikaze", 0, 0, 32)
		goto DeathGo
	Death.NukeExplosion:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx("NukeKamikaze", 0, 0, 32)
		goto DeathGo
	Death.BombExplosion:
		PLAY H 0
		PLAY N 0 A_SpawnItemEx("BombExplosion")
		goto DeathGo
	}
}

actor MadCatUsed : MadCat {
	player.maxhealth 4000
	health 2000
}

actor MadCatSwitch : PermanentPowerup {Powerup.Type "MadCat"}
actor MadCatSwitchUsed : PermanentPowerup {powerup.type "MadCatUsed"}

actor PowerMadCat : PowerMorph {
	PowerMorph.PlayerClass "MadCat"
	PowerMorph.MorphStyle (MRF_FULLHEALTH|MRF_ADDSTAMINA|MRF_NEWTIDBEHAVIOUR|MRF_WHENINVULNERABLE)
}

actor MadCatSwitchPickup : CustomInventory {
	inventory.pickupsound "mech/start"
	translation "112:127=[255,255,255]:[0,0,0]"
	+INVENTORY.AUTOACTIVATE
	scale 0.75
	states {
	Spawn:
		MADC Z -1
		loop
	Pickup:
		TNT1 A 0 ACS_ExecuteWithResult (353, 0)
		stop
	Use:
		TNT1 A 0 ACS_ExecuteAlways (699, 0, 1)
		RAVN I 0 A_GiveInventory ("IsMech", 1)
		TNT1 A 0 A_GiveInventory ("MadCatSwitchUsed", 1)
		RAVN I 0 A_GiveInventory("MechEjectButton",1)
		stop
	}
}

actor PowerMadCatUsed : PowerMorph {
	PowerMorph.PlayerClass "MadCatUsed"
	PowerMorph.MorphStyle (MRF_FULLHEALTH|MRF_ADDSTAMINA|MRF_NEWTIDBEHAVIOUR|MRF_WHENINVULNERABLE)
}

actor MadCatWeapons : AOWWeapon {
	Weapon.SelectionOrder 1
	//Weapon.AmmoUse 0
	//Weapon.AmmoGive 0
	//Weapon.AmmoType "Titan-RocketAmmo"
	Obituary "$OB_MADCAT"
	+WEAPON.CHEATNOTWEAPON
	+WEAPON.DONTBOB
	states {
	Ready:
		MHUD A 1 A_WeaponReady
		Loop
	Deselect:
		MHUD A 0 A_JumpIfHealthLower(1,1)
		goto Ready
		MHUD CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 0 A_Lower
		TNT1 A 1 A_Lower
		goto Deselect+29
	Select:
		MHUD C 0
		MHUD CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC 0 A_Raise
		TNT1 A 1 A_Raise
		goto Select+31
	Fire:
		MHUD A 0 A_JumpIfInventory("Wolverine-WhatWeapon",2,"FireMissiles")
		MHUD A 0 A_JumpIfInventory("Wolverine-WhatWeapon",1,"FireShockRifle")
		//Continue firing PPCs
		MHUD A 0 A_JumpIfInventory("Reload-ShockCannon",1,"FireMissiles")
		MHUD C 0 A_PlayWeaponSound("ppc/fire")
		MHUD A 0 ACS_ExecuteAlways(319, 0, 2, 5) // reload
		MHUD C 0 A_GunFlash
		MHUD B 0 A_JumpIfInventory("IsRed", 1, "FireRed")
		MHUD A 0 A_FireCustomMissile("ShockCannonBall", 0, 0, 64, 0)
		MHUD A 0 A_FireCustomMissile("ShockCannonBall", 0, 0, -64, 0)
		MHUD D 15 BRIGHT
		MHUD C 16
		MHUD C 2 A_Refire
		goto Ready
	FireRed:
		MHUD A 0 A_FireCustomMissile("ShockCannonBallRed", 0, 0, 64, 0)
		MHUD A 0 A_FireCustomMissile("ShockCannonBallRed", 0, 0, -64, 0)
		MHUD D 15 BRIGHT
		MHUD C 16
		MHUD C 2 A_Refire
		goto Ready
	FireShockRifle:
		MHUD A 10 A_JumpIfInventory ("GeneporiumCharge", 2, 1)
		Goto NoAmmo
		MHUD B 0 Radius_Quake(2,8,0,1,0)
		MHUD A 0 A_GunFlash
		MHUD B 0 A_PlayWeaponSound ("voltrifle/fire")
		MHUD B 0 A_TakeInventory ("GeneporiumCharge", 2)
		MHUD B 0 A_JumpIfInventory("IsRed", 1, "FireShockRifleRed1")
		MHUD B 2 BRIGHT A_FireBullets (6.2, 6.2, 2, 10, "VoltagePuff")
		MHUD A 1
		MHUD B 0 A_GunFlash
		MHUD B 0 A_PlayWeaponSound ("voltrifle/fire")
		MHUD B 0 A_SpawnItemEx ("CellCasing", 8, -96, 128, random(1,3), random (-8, -12), random(1,3), 0,0,128)
		MHUD B 0 A_SpawnItemEx ("CellCasing", 8, 96, 128, random(-3,-1), random (8, 12), random(1,3), 0,0,128)
		MHUD B 0 A_JumpIfInventory("IsRed", 1, "FireShockRifleRed2")
		MHUD B 2 BRIGHT A_FireBullets (6.2, 6.2, 2, 10, "VoltagePuff")
		MHUD A 1
		MHUD A 0 A_ReFire
		MHUD A 4
		goto Ready
	FireShockRifleRed1:
		MHUD B 2 BRIGHT A_FireBullets (6.2, 6.2, 2, 10, "VoltagePuffRed")
		Goto FireShockRifle+7
	FireShockRifleRed2:
		MHUD B 2 BRIGHT A_FireBullets (6.2, 6.2, 2, 10, "VoltagePuffRed")
		Goto FireShockRifle+14
	FireMissiles:
		MHUD A 0 A_JumpIfInventory ("Reload-LRM", 1, "FireShockRifle")
		MHUD A 10 A_JumpIfInventory ("MechRocketAmmo", 20, 1)
		Goto NoAmmo
		MHUD A 2 A_PlayWeaponSound ("lrm/fire")
		MHUD B 0 Radius_Quake (2, 70, 0, 1, 0)
		MHUD A 0 ACS_ExecuteAlways (319, 0, 1, 5) // reload
		MHUD A 0 A_TakeInventory ("MechRocketAmmo", 20)
		MHUD B 0 Bright A_GunFlash
		MHUD A 0 A_JumpIfInventory("IsBlue", 1, "FireMissilesBlue1")
		MHUD BBBBBBBBBB 2 A_FireCustomMissile ("LongRangeMissile", 0, 0, random(22,48), random(64,72))
		MHUD A 10
		MHUD A 2 A_PlayWeaponSound ("lrm/fire")
		MHUD B 0 Bright A_GunFlash
		MHUD A 0 A_JumpIfInventory("IsBlue", 1, "FireMissilesBlue2")
		MHUD BBBBBBBBBB 2 A_FireCustomMissile ("LongRangeMissile", 0, 0, random(-48,-22), random(64,72))
		MHUD C 20
		MHUD A 2 A_Refire
		Goto Ready
	FireMissilesBlue1:
		MHUD BBBBBBBBBB 2 A_FireCustomMissile ("LongRangeMissileBlue", 0, 0, random(22,48), random(64,72))
		Goto FireMissiles+19
	FireMissilesBlue2:
		MHUD BBBBBBBBBB 2 A_FireCustomMissile ("LongRangeMissileBlue", 0, 0, random(-48,-22), random(64,72))
		Goto FireMissiles+32
	Flash:
		TNT1 A 1 Bright A_Light2
		TNT1 A 2 Bright A_Light1
		Goto LightDone
	AltFire:
		MHUD A 0
		MHUD A 15 ACS_ExecuteAlways (314, 0)
		MHUD C 10
		Goto Ready
	NoAmmo:
		MHUD A 10 A_WeaponReady (WRF_NOPRIMARY)
		goto Ready
	Spawn:
		TNT1 A 0 
		stop
	}
}

actor Reload-ShockCannon : Inventory {}

actor ShockCannonBall {
	PROJECTILE
	radius 8
	height 8
	speed 50
	damage (250)
	renderstyle Add
	alpha 0.9
	scale 1.5
	deathsound "ppc/explode"
	damageType "Energy"
	obituary "$OB_MADCAT"
	states {
	Spawn:
		PPCX A 1 BRIGHT
		PPCX A 0 A_SpawnItemEx ("ShockCannonBallFX")
		PPCX A 0 BRIGHT A_Explode (4, 256, 0)
		loop
	Death:
		TNT1 A 1 A_SpawnItemEx("MadCatSpawnShit",0,0,0)
		stop
	}
}

actor ShockCannonBallRed : ShockCannonBall
{
	states 
	{
	Spawn:
		PPCX B 1 BRIGHT
		PPCX B 0 A_SpawnItemEx ("ShockCannonBallFXRed")
		PPCX B 0 BRIGHT A_Explode (4, 256, 0)
		loop
	Death:
		TNT1 A 1 A_SpawnItemEx("MadCatSpawnShitRed",0,0,0)
		stop
	}
}

actor MadcatSpawnShit {
	Radius 1
	Height 1
	States {
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx ("ShockCannonBallImpact",0,0,0,0,0,0,0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION)
		TNT1 AAAA 0 A_SpawnItemEx ("ShockCannonBallFX",0,0,0,random(-8,8),random(-8,8),random(-8,8),0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION)
		TNT1 AAAA 2 BRIGHT A_SpawnItemEx ("ShockCannonExplosion2",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS)
		TNT1 AA 2 BRIGHT A_SpawnItemEx ("ShockCannonExplosion",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS)
		stop
	}
}

actor MadcatSpawnShitRed
{
	Radius 1
	Height 1
	States 
	{
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_SpawnItemEx ("ShockCannonBallImpactRed",0,0,0,0,0,0,0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION)
		TNT1 AAAA 0 A_SpawnItemEx ("ShockCannonBallFXRed",0,0,0,random(-8,8),random(-8,8),random(-8,8),0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION)
		TNT1 AAAA 2 BRIGHT A_SpawnItemEx ("ShockCannonExplosion2",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS)
		TNT1 AA 2 BRIGHT A_SpawnItemEx ("ShockCannonExplosion",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION|SXF_TRANSFERPOINTERS)
		stop
	}
}
		
actor ShockCannonBallFX {
	+CLIENTSIDEONLY
	+NOINTERACTION
	states {
	Spawn:
		TNT1 A 0
		TNT1 AAAA 0 A_SpawnItemEx ("VoltageSpark", random(-16,16), random(-16,16), random(-16,16), random(-8,8), random(-8,8), random(-8,8), 0, 0, 32)
		TNT1 AAAA 0 A_SpawnItemEx ("VoltageSpark", random(-32, 0), random(-16,16), random(-16,16), random(-8,8), random(-8,8), random(-8,8), 0, 0, 32)
		TNT1 AAAA 0 A_SpawnItemEx ("VoltageSpark", random(-54,-32), random(-16,16), random(-16,16), random(-8,8), random(-8,8), random(-8,8), 0, 0, 32)
		TNT1 AAAA 0 A_SpawnItemEx ("VoltageSpark", random(-92,-54), random(-16,16), random(-16,16), random(-8,8), random(-8,8), random(-8,8), 0, 0, 32)
		TNT1 A 0 A_SpawnItemEx("VoltagePuff2", random(-64,64), random(-64,64), random(-64,64), random(-8,8), random(-8,8), random(-8,8), 0, 128, 0)
		stop
	}
}

actor ShockCannonBallFXRed 
{
	+CLIENTSIDEONLY
	+NOINTERACTION
	states 
	{
	Spawn:
		TNT1 A 0
		TNT1 AAAA 0 A_SpawnItemEx ("VoltageSparkRed", random(-16,16), random(-16,16), random(-16,16), random(-8,8), random(-8,8), random(-8,8), 0, 0, 32)
		TNT1 AAAA 0 A_SpawnItemEx ("VoltageSparkRed", random(-32, 0), random(-16,16), random(-16,16), random(-8,8), random(-8,8), random(-8,8), 0, 0, 32)
		TNT1 AAAA 0 A_SpawnItemEx ("VoltageSparkRed", random(-54,-32), random(-16,16), random(-16,16), random(-8,8), random(-8,8), random(-8,8), 0, 0, 32)
		TNT1 AAAA 0 A_SpawnItemEx ("VoltageSparkRed", random(-92,-54), random(-16,16), random(-16,16), random(-8,8), random(-8,8), random(-8,8), 0, 0, 32)
		TNT1 A 0 A_SpawnItemEx("VoltagePuff2Red", random(-64,64), random(-64,64), random(-64,64), random(-8,8), random(-8,8), random(-8,8), 0, 128, 0)
		stop
	}
}

actor ShockCannonBallImpact {
	+NOCLIP
	+NOINTERACTION
	+CLIENTSIDEONLY
	renderstyle Add
	alpha 0.9
	scale 3.0
	reactiontime 7
	states {
	Spawn:
		PPCX A 0
		PPCX AAAAAA 0 A_SpawnItemEx("ShockCannonTrail",0,0,random(16,32),0,0,random(16,32),0,128,0)
		PPCX AAAAAAAA 0 A_SpawnItemEx("VoltageSpark", random(-64,64), random(-64,64), random(-64,64), random(-8,8), random(-8,8), random(-8,8))
	Idle:
		PPCX A 2 bright A_FadeOut(0.05)
		PPCX AAAAAAAA 0 A_SpawnItemEx("VoltageSpark", random(-64,64), random(-64,64), random(-64,64), random(-8,8), random(-8,8), random(-8,8))
		PPCX AAA 0 A_SpawnItemEx("VoltagePuff", random(-64,64), random(-64,64), random(-64,64), random(-8,8), random(-8,8), random(-8,8))
		PPCX A 0 A_Countdown
		loop
	Death:
		PPCX AAAAAA 2 bright A_FadeOut(0.15)
		stop
	}
}

actor ShockCannonBallImpactRed : ShockCannonBallImpact
{
	states
	{
	Spawn:
		PPCX B 0
		PPCX BBBBBB 0 A_SpawnItemEx("ShockCannonTrailRed",0,0,random(16,32),0,0,random(16,32),0,128,0)
		PPCX BBBBBBBB 0 A_SpawnItemEx("VoltageSparkRed", random(-64,64), random(-64,64), random(-64,64), random(-8,8), random(-8,8), random(-8,8))
	Idle:
		PPCX B 2 bright A_FadeOut(0.05)
		PPCX BBBBBBBB 0 A_SpawnItemEx("VoltageSparkRed", random(-64,64), random(-64,64), random(-64,64), random(-8,8), random(-8,8), random(-8,8))
		PPCX BBB 0 A_SpawnItemEx("VoltagePuffRed", random(-64,64), random(-64,64), random(-64,64), random(-8,8), random(-8,8), random(-8,8))
		PPCX B 0 A_Countdown
		loop
	Death:
		PPCX BBBBBB 2 bright A_FadeOut(0.15)
		stop
	}
}

actor ShockCannonExplosion {
	RenderStyle None
	-RANDOMIZE
	+NOCLIP
	PROJECTILE
	Speed 1
	Damage 0
	Scale 0.7
	Obituary "%o was vaporised by %k's PPC."
	DamageType "Explosion"
	states {
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_PlaySound ("ppc/explode", CHAN_AUTO)
		TNT1 A 5 A_Explode (10, 512, 0)
		stop
	}  
}

actor ShockCannonExplosion2 : ShockCannonExplosion {DamageType "Energy"}

actor ShockCannonTrail {
	radius 1
	height 1
	speed 2
	damage 0
	PROJECTILE
	-RANDOMIZE
	renderstyle Add
	alpha 0.5
	scale 0.75
	states {
	Spawn:
		VOLX AAAAAAAAA 2 bright A_FadeOut(0.07)
		stop
	Death:
		PPCX A 0 BRIGHT A_SpawnItemEx("VoltageDecay",random(-16,16),random(-16,16),random(-16,16),0,0,0,0,128,128)
		stop
	}
}

actor ShockCannonTrailRed : ShockCannonTrail
{
	states
	{	
	Spawn:
		VOLX AAAAAAAAA 2 bright A_FadeOut(0.07)
		stop
	Death:
		PPCX B 0 BRIGHT A_SpawnItemEx("VoltageDecayRed",random(-16,16),random(-16,16),random(-16,16),0,0,0,0,128,128)
		stop
	}
}

actor DamagedMadCat {
	Health 300
	Radius 58
	Height 128
	mass 2000
	+SHOOTABLE
	PainChance 0
	scale 0.75
	bloodtype "HHMetalHit"
	bloodcolor "White"
	damagefactor "Disarm", 0.0
	obituary "%o went boom."
	Translation "112:127=[255,255,255]:[0,0,0]"
	States {
	Spawn:
		MADC K 35 
		MADC KKKK 5 A_SpawnItemEx("EjectedMechSmokePuff",random(-32,32),random(-32,32),random(96,128),0,0,3,0,128,0)
		MADC K 5 A_SpawnItemEx("EjectedMechSmokePuff",random(-32,32),random(-32,32),random(96,128),0,0,3,0,128,0)
		goto Spawn+5
	Death:
		MADC L 0 A_NoBlocking
		MADC LM 4
		MADC NOPQRSTUUU 4 A_SpawnItemEx("EjectedMechSmokePuff",random(-32,32),random(-32,32),random(32,64),0,0,3)
		TNT1 A 35 A_SpawnItemEx ("MechExplosionLarge", 0,0,0,0,0,0,0, SXF_NOCHECKPOSITION)
		DISR K -1
		Stop
	}
}

actor EjectedMadCat {
	scale 0.75
	Translation "112:127=[255,255,255]:[0,0,0]"
	States {
	Spawn:
		MADC VWX 7
		MADC YYYY 35
		MADC B 0 A_SpawnItemEx("MadCatSwitchPickup")
		stop
	}
}

actor MadcatAmmoPackage : CustomInventory {
	+AUTOACTIVATE
	inventory.maxamount 0
	states {
	Pickup:
		TNT1 A 0 A_GiveInventory ("GeneporiumCharge", 400)
		TNT1 A 0 A_GiveInventory ("MechRocketAmmo", 240)
		stop
	}
}
