// =============================================================================
// The berserk morph, turns the player into a 200-health crazy ass dude
// with a red view, increased speed and jump height and fists that utterly
// destroy any infantry they hit.
actor BerserkPlayer : Player {
	+NOSKIN
	-PICKUP
	Health 200
	Player.MaxHealth 200
	Player.DisplayName "Berserker"
	Player.StartItem "BerserkFists", 1
	Player.ForwardMove 1.0 // Doomguy speed!
	Player.SideMove 1.0
	Player.MorphWeapon "BerserkFists"
	Player.JumpZ 16 // Doubled jump height
	DamageFactor "Chemical",		2.25 // AAAAHHH
	DamageFactor "ChemicalSpecial",	2.25 // AAAAHHH
	DamageFactor "MechStomp",		0.35
	
	States {
	// The guy gibs in every death ever.
	Death:
	Death.Chemical:
	Death.Fire:
	Death.Time:
	Death.ChemicalSpecial:
	Death.FireSpecial:
	Death.Energy:
	Ice:
		goto XDeathGo
	}
}

// =============================================================================
// Powerup actor
actor BerserkSwitch : PowerupGiver replaces Berserk 15401 {
	//$Category Powerups
	+INVENTORY.AUTOACTIVATE
	+INVENTORY.ALWAYSPICKUP
	Powerup.Type Berserk
	Powerup.Duration 10500 // Five minutes
	Powerup.Color RedMap
	Inventory.MaxAmount 1
	Tag "Berserk"
	States {
	Spawn:
		PSTR A -1
		stop
	}
}

// Berserk lights
Actor BerserkLight {
	+NOINTERACTION
	States
	{
	Spawn:
		TNT1 A 1
	Idle:
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 Light("BerserkLight") A_Warp(AAPTR_TARGET, 0,0,0,0, WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 Light("BerserkLight") A_JumpIfInTargetInventory("PowerBerserkHue",1,"Idle")
		Goto Death
	Death:
		TNT1 A 35 
		Stop
	}
}



Actor BerserkLight2 {
	+NOINTERACTION
	States
	{
	Spawn:
		TNT1 A 1
	Idle:
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 Light("BerserkLight2") A_Warp(AAPTR_TARGET, 0,0,0,0, WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
		TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 Light("BerserkLight2") A_JumpIfInTargetInventory("PowerBerserkHue",1,"Idle")
		Goto Death
	Death:
		TNT1 A 35 
		Stop
	}
}

ACTOR BerserkLights : CustomInventory
{
	+INVENTORY.AUTOACTIVATE
	+INVENTORY.ALWAYSPICKUP
	Inventory.MaxAmount 0
	Tag "Berserk"
	States
	{
	Spawn:
		TNT1 A 1
		Loop
	Pickup:
		TNT1 A 0 A_FireCustomMissile("BerserkLight",0,false)
		TNT1 A 0 A_FireCustomMissile("BerserkLight2",0,false)
		TNT1 A 0 ACS_NamedExecuteAlways("SC_RAT_EFFECTS", 0, 1, 0)
		Stop
	}
}

// =============================================================================
// Red hue
actor PowerBerserkHue : PowerNull {}
actor BerserkHue : BerserkSwitch {
	Powerup.Type BerserkHue
	Powerup.Color "red", 0.15
}

// =============================================================================
// Powerup actor
actor PowerBerserk : AOWMorph {
	PowerMorph.PlayerClass "BerserkPlayer"
}

// =============================================================================
// [Dusk] Berserk fists - instagibbing real man fists that gibs any infantry
actor BerserkFists : Unarmed {
	-WIMPY_WEAPON // well it's not, is it?
	Obituary "$OB_BERSERK"
	Weapon.SelectionOrder 0
	states {
	Select:
		PUNG A 5
		PUNG A 0 A_JumpIfInventory ("PowerBerserk", 1, 1)
		goto Remove
		PUNG A 0 A_JumpIfInventory ("FistReplaced", 1, "ReplaceCleanup")
		PUNG A 0 A_Raise
		PUNG A 1 A_Raise
		goto Select+4
	Ready:
		PUNG A 0 ACS_ExecuteAlways (800, 0)
		PUNG A 1 A_WeaponReady (WRF_NOSWITCH)
		wait
	Fire:
		TNT1 A 0 A_JumpIfInventory("IsInSpawnRoom",1,"Ready")
		PUNG B 0 A_ChangeVelocity(momx*1.1,momy*1.1,momz,CVF_REPLACE)
		PUNG B 0 A_JumpIfInventory("FistSwitch", 1, "Fire2")
		PUNG B 1 Offset(-30,40)
		PUNG B 0 A_SetAngle(Angle-10)
		PUNG B 0 Offset(-24,38) A_CustomPunch (100, 1, 1, "BerserkPuff", 96)
		PUNG B 0 A_SetAngle(Angle+10)
		//PUNG C 1 Offset(-16,36)
		PUNG C 1 Offset(-9,35) A_CustomPunch (100, 1, 1, "BerserkPuff", 96)
		PUNG D 0 A_GiveInventory ("FistSwitch", 1)
		PUNG D 0 A_SetAngle(Angle+10)
		PUNG D 0 Offset(0,33) A_CustomPunch (100, 1, 1, "BerserkPuff", 96)
		PUNG D 1 A_SetAngle(Angle-10)
		PUNG D 1 Offset(15,32)
		//PUNG C 1 Offset(10,37)
		PUNG C 1 Offset(5,38)
		PUNG B 1 Offset(0,39) A_ReFire
		goto Ready
	Fire2:
		PUNG E 1 Offset(30,40)
		PUNG E 0 A_SetAngle(Angle-10)
		PUNG E 0 Offset(24,38) A_CustomPunch (100, 1, 1, "BerserkPuff", 96)
		PUNG E 1 A_SetAngle(Angle+10)
		//PUNG F 1 Offset(16,36)
		PUNG F 1 Offset(9,35) A_CustomPunch (100, 1, 1, "BerserkPuff", 96)
		PUNG G 0 A_GiveInventory ("FistSwitch", 1)
		PUNG G 0 A_SetAngle(Angle+10)
		PUNG G 0 Offset(0,33) A_CustomPunch (100, 1, 1, "BerserkPuff", 96)
		PUNG G 1 A_SetAngle(Angle-10)
		PUNG G 1 Offset(-5,32)
		//PUNG F 1 Offset(1,37)
		PUNG F 1 Offset(6,38) A_TakeInventory("FistSwitch",1)
		PUNG E 1 Offset(10,39) A_ReFire
		goto Ready
	Remove:
		PUNG A 1 offset (1,32)
		PUNG A 0 A_GiveInventory ("Unarmed", 1)
		PUNG A 0 A_SelectWeapon ("Unarmed")
		PUNG A 0 A_GiveInventory ("FistReplaced", 1)
		goto Deselect
	ReplaceCleanup:
		BEAC B 0 A_TakeInventory ("Unarmed", 1)
		BEAC B 0 A_TakeInventory ("FistReplaced", 1)
		goto Select
	}
}

actor BerserkInit : Inventory {}


actor BerserkSoundStart : CustomInventory {
	+AUTOACTIVATE
	+ALWAYSPICKUP
	Inventory.MaxAmount 0
	States {
	Pickup:
	Use:
		TNT1 A 0
		TNT1 A 0 A_PlaySound ("player/berserk", CHAN_ITEM, 1.0, 1)
		stop
	}
}

actor BerserkSoundStop : BerserkSoundStart {
	States {
	Pickup:
	Use:
		TNT1 A 0
		TNT1 A 0 A_StopSound (CHAN_ITEM)
		stop
	}
}

// =============================================================================
actor BerserkPuff : FistPuff {
	+EXTREMEDEATH
	States {
	Melee:
		PUFF A 0
		PUFF A 0 bright A_SpawnItemEx ("FistHit")
		stop
	}
}
