// 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.4
	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:
		MAD2 BB 7 SetPlayerProperty(0,1,0)
		MAD2 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:
		MAD2 B -1
		loop
	Pickup:
		TNT1 A 0 ACS_ExecuteWithResult (353, 0)
		stop
	Use:
		TNT1 A 0 ACS_ExecuteAlways (699, 0, 1)
		TNT1 A 0 A_GiveInventory ("MadCatSwitchUsed", 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 480
	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 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 35
		MHUD C 2 A_Refire
		goto Ready
	FireShockRifle:
		MHUD A 10 A_JumpIfInventory ("GeneporiumCharge", 4, 2)
		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", 4)
		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 2 BRIGHT A_FireBullets (6.2, 6.2, 2, 10, "VoltagePuff")
		MHUD A 1
		MHUD A 0 A_ReFire
		MHUD A 4
		goto Ready
	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 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 BBBBBBBBBB 2 A_FireCustomMissile ("LongRangeMissile", 0, 0, random(-48,-22), random(64,72))
		MHUD C 20
		MHUD A 2 A_Refire
		Goto Ready
	Flash:
		TNT1 A 1 Bright A_Light2
		TNT1 A 2 Bright A_Light1
		Goto LightDone
	AltFire:
		MHUD A 0
		MHUD A 35 ACS_ExecuteAlways (314, 0)
		MHUD C 18
		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)
		loop
	Death:
		TNT1 A 1 A_SpawnItemEx("MadCatSpawnShit",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_CLIENTSIDE|SXF_NOCHECKPOSITION)
		TNT1 AA 2 BRIGHT A_SpawnItemEx ("ShockCannonExplosion",0,0,0,0,0,0,0,SXF_CLIENTSIDE|SXF_NOCHECKPOSITION)
		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 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 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 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 VWXYZ 7
		MAD2 AB 7
		MAD2 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
	}
}