ACTOR StrifeWeapon : Weapon
{
	Weapon.Kickback 100
}

// Same as the bullet puff for Doom -----------------------------------------

ACTOR StrifePuff
{
	+NOBLOCKMAP
	+NOGRAVITY
	+ALLOWPARTICLES
	RenderStyle Translucent
	Alpha 0.25

	states
	{
	Spawn:
		POW3 ABCDEFGH 3
		Stop
	Crash:
		PUFY A 4 Bright
		PUFY BCD 4
		Stop
	}
}
	

// A spark when you hit something that doesn't bleed ------------------------
// Only used by the dagger.

ACTOR StrifeSpark : StrifePuff
{
	RenderStyle Add
	States
	{
	Crash:
		POW2 ABCD 4
		Stop
	}
}

// Punch Dagger -------------------------------------------------------------

ACTOR PunchDagger : StrifeWeapon
{
	Weapon.SelectionOrder 3900
	+WEAPON.NOALERT
	Obituary "$OB_MPPUNCHDAGGER"
	Tag "$TAG_PUNCHDAGGER"
	
	action native A_JabDagger ();
	
	States
	{
	Ready:
		PNCH A 1 A_WeaponReady
		Loop
	Deselect:
		PNCH A 1 A_Lower
		Loop
	Select:
		PNCH A 1 A_Raise
		Loop
	Fire:
		PNCH B 4
		PNCH C 4 A_JabDagger
		PNCH D 5
		PNCH C 4
		PNCH B 5 A_ReFire
		Goto Ready
	}

}	


// The base for Strife projectiles that die with ZAP1 -----------------------

ACTOR StrifeZap1
{
	+NOBLOCKMAP
	+NOGRAVITY
	+DROPOFF
	States
	{
	Spawn:
	Death:
		ZAP1 A 3 A_AlertMonsters
		ZAP1 BCDEFE 3
		ZAP1 DCB 2
		ZAP1 A 1
		Stop
	}
}


// Electric Bolt ------------------------------------------------------------

ACTOR ElectricBolt : StrifeZap1
{
	Speed 30
	Radius 10
	Height 10
	Damage 10
	Projectile
	+STRIFEDAMAGE
	MaxStepHeight 4
	SeeSound "misc/swish"
	ActiveSound "misc/swish"
	DeathSound "weapons/xbowhit"
	Obituary "$OB_MPELECTRICBOLT"
	States
	{
	Spawn:
		AROW A 10 A_LoopActiveSound
		Loop
	}
}


// Poison Bolt --------------------------------------------------------------

ACTOR PoisonBolt native
{
	Speed 30
	Radius 10
	Height 10
	Damage 500
	Projectile
	+STRIFEDAMAGE
	MaxStepHeight 4
	SeeSound "misc/swish"
	ActiveSound "misc/swish"
	Obituary "$OB_MPPOISONBOLT"
	States
	{
	Spawn:
		ARWP A 10 A_LoopActiveSound
		Loop
	Death:
		AROW A 1
		Stop
	}
}


// Strife's Crossbow --------------------------------------------------------

ACTOR StrifeCrossbow : StrifeWeapon
{
	+FLOORCLIP
	Weapon.SelectionOrder 1200
	+WEAPON.NOALERT
	Weapon.AmmoUse1 1
	Weapon.AmmoGive1 8
	Weapon.AmmoType1 "ElectricBolts"
	Weapon.SisterWeapon "StrifeCrossbow2"
	Inventory.PickupMessage "$TXT_STRIFECROSSBOW"
	Tag "$TAG_STRIFECROSSBOW1"
	Inventory.Icon "CBOWA0"
	
	action native A_ClearFlash ();
	action native A_ShowElectricFlash ();
	action native A_FireArrow (class<Actor> proj);

	states
	{
	Spawn:
		CBOW A -1
		Stop
	Ready:
		XBOW A 0 A_ShowElectricFlash
		XBOW A 1 A_WeaponReady
		Wait
	Deselect:
		XBOW A 1 A_Lower
		Loop
	Select:
		XBOW A 1 A_Raise
		Loop
	Fire:
		XBOW A 3 A_ClearFlash
		XBOW B 6 A_FireArrow("ElectricBolt")
		XBOW C 4
		XBOW D 6
		XBOW E 3
		XBOW F 5
		XBOW G 0 A_ShowElectricFlash
		XBOW G 5 A_CheckReload
		Goto Ready+1
	Flash:
		XBOW KLM 5
		Loop
	}
}


ACTOR StrifeCrossbow2 : StrifeCrossbow
{
	Weapon.SelectionOrder 2700
	Weapon.AmmoUse1 1
	Weapon.AmmoGive1 0
	Weapon.AmmoType1 "PoisonBolts"
	Weapon.SisterWeapon "StrifeCrossbow"
	Tag "$TAG_STRIFECROSSBOW2"

	States
	{
	Ready:
		XBOW H 1 A_WeaponReady
		Loop
	Deselect:
		XBOW H 1 A_Lower
		Loop
	Select:
		XBOW H 1 A_Raise
		Loop
	Fire:
		XBOW H 3
		XBOW B 6 A_FireArrow("PoisonBolt")
		XBOW C 4
		XBOW D 6
		XBOW E 3
		XBOW I 5
		XBOW J 5 A_CheckReload
		Goto Ready
	Flash:
		Stop
	}
}

// Assault Gun --------------------------------------------------------------

actor AssaultGun : StrifeWeapon
{
	+FLOORCLIP
	Weapon.SelectionOrder 600
	Weapon.AmmoUse1 1
	Weapon.AmmoGive1 20
	Weapon.AmmoType1 "ClipOfBullets"
	Inventory.Icon "RIFLA0"
	Tag "$TAG_ASSAULTGUN"
	Inventory.PickupMessage "$TXT_ASSAULTGUN"
	Obituary "$OB_MPASSAULTGUN"
	States
	{
	Spawn:
		RIFL A -1
		Stop
	Ready:
		RIFG A 1 A_WeaponReady
		Loop
	Deselect:
		RIFG B 1 A_Lower
		Loop
	Select:
		RIFG A 1 A_Raise
		Loop
	Fire:
		RIFF AB 3 A_FireAssaultGun
		RIFG D 3 A_FireAssaultGun
		RIFG C 0 A_ReFire
		RIFG B 2 A_Light0
		Goto Ready
	}
}


// Standing variant of the assault gun --------------------------------------

ACTOR AssaultGunStanding : WeaponGiver
{
	DropItem "AssaultGun"
	Inventory.PickupMessage "$TXT_ASSAULTGUN"
	States
	{
	Spawn:
		RIFL B -1
		Stop
	}
}


// Mini-Missile Launcher ----------------------------------------------------


ACTOR MiniMissileLauncher : StrifeWeapon
{
	+FLOORCLIP
	Weapon.SelectionOrder 1800
	Weapon.AmmoUse1 1
	Weapon.AmmoGive1 8
	Weapon.AmmoType1 "MiniMissiles"
	Inventory.Icon "MMSLA0"
	Tag "$TAG_MMLAUNCHER"
	Inventory.PickupMessage "$TXT_MMLAUNCHER"

	action native A_FireMiniMissile ();

	States
	{
	Spawn:
		MMSL A -1
		Stop
	Ready:
		MMIS A 1 A_WeaponReady
		Loop
	Deselect:
		MMIS A 1 A_Lower
		Loop
	Select:
		MMIS A 1 A_Raise
		Loop
	Fire:
		MMIS A 4 A_FireMiniMissile
		MMIS B 4 A_Light1
		MMIS C 5 Bright
		MMIS D 2 Bright A_Light2
		MMIS E 2 Bright
		MMIS F 2 Bright A_Light0
		MMIS F 0 A_ReFire
		Goto Ready
	}
}
	

// Rocket Trail -------------------------------------------------------------

ACTOR RocketTrail
{
	+NOBLOCKMAP
	+NOGRAVITY
	RenderStyle Translucent
	Alpha 0.25
	SeeSound "misc/missileinflight"
	States
	{
	Spawn:
		PUFY BCBCD 4
		Stop
	}
}

// Rocket Puff --------------------------------------------------------------

ACTOR MiniMissilePuff : StrifePuff
{
	-ALLOWPARTICLES
	States
	{
	Spawn:
		Goto Crash
	}
}

// Mini Missile -------------------------------------------------------------

ACTOR MiniMissile
{
	Speed 20
	Radius 10
	Height 14
	Damage 10
	Projectile
	+STRIFEDAMAGE
	MaxStepHeight 4
	SeeSound "weapons/minimissile"
	DeathSound "weapons/minimissilehit"
	Obituary "$OB_MPMINIMISSILELAUNCHER"
	States
	{
	Spawn:
		MICR A 6 Bright A_RocketInFlight
		Loop
	Death:
		SMIS A 0 Bright A_SetTranslucent(1,1)
		SMIS A 0 Bright // State left for savegame compatibility
		SMIS A 5 Bright A_Explode(64,64,1,1)
		SMIS B 5 Bright
		SMIS C 4 Bright
		SMIS DEFG 2 Bright
		Stop
	}
}

// Flame Thrower ------------------------------------------------------------

ACTOR FlameThrower : StrifeWeapon
{
	+FLOORCLIP
	Weapon.SelectionOrder 2100
	Weapon.Kickback 0
	Weapon.AmmoUse1 1
	Weapon.AmmoGive1 100
	Weapon.UpSound "weapons/flameidle"
	Weapon.ReadySound "weapons/flameidle"
	Weapon.AmmoType1 "EnergyPod"
	Inventory.Icon "FLAMA0"
	Tag "$TAG_FLAMER"
	Inventory.PickupMessage "$TXT_FLAMER"
	
	action native A_FireFlamer ();

	States
	{
	Spawn:
		FLAM A -1
		Stop
	Ready:
		FLMT AB 3 A_WeaponReady
		Loop
	Deselect:
		FLMT A 1 A_Lower
		Loop
	Select:
		FLMT A 1 A_Raise
		Loop
	Fire:
		FLMF A 2 A_FireFlamer
		FLMF B 3 A_ReFire
		Goto Ready
	}
}	


// Flame Thrower Projectile -------------------------------------------------

ACTOR FlameMissile
{
	Speed 15
	Height 11
	Radius 8
	Mass 10
	Damage 4
	DamageType Fire
	ReactionTime 8
	Projectile
	-NOGRAVITY
	+STRIFEDAMAGE
	MaxStepHeight 4
	RenderStyle Add
	SeeSound "weapons/flamethrower"
	Obituary "$OB_MPFLAMETHROWER"

	action native A_FlameDie ();

	States
	{
	Spawn:
		FRBL AB 3 Bright
		FRBL C 3 Bright A_Countdown
		Loop
	Death:
		FRBL D 5 Bright A_FlameDie
		FRBL EFGHI 5 Bright
		Stop
	}

}


// Mauler -------------------------------------------------------------------
// The scatter version

ACTOR Mauler : StrifeWeapon
{
	+FLOORCLIP
	Weapon.SelectionOrder 300
	Weapon.AmmoUse1 20
	Weapon.AmmoGive1 40
	Weapon.AmmoType1 "EnergyPod"
	Weapon.SisterWeapon "Mauler2"
	Inventory.Icon "TRPDA0"
	Tag "$TAG_MAULER1"
	Inventory.PickupMessage "$TXT_MAULER"
	Obituary "$OB_MPMAULER1"

	action native A_FireMauler1 ();

	States
	{
	Ready:
		MAUL FGHA 6 A_WeaponReady
		Loop
	Deselect:
		MAUL A 1 A_Lower
		Loop
	Select:
		MAUL A 1 A_Raise
		Loop
	Fire:
		BLSF A 5 Bright A_FireMauler1
		MAUL B 3 Bright A_Light1
		MAUL C 2 A_Light2
		MAUL DE 2
		MAUL A 7 A_Light0
		MAUL H 7
		MAUL G 7 A_CheckReload
		Goto Ready
	Spawn:
		TRPD A -1
		Stop
	}
}


// Mauler Torpedo version ---------------------------------------------------

ACTOR Mauler2 : Mauler
{
	Weapon.SelectionOrder 3300
	Weapon.AmmoUse1 30
	Weapon.AmmoGive1 0
	Weapon.AmmoType1 "EnergyPod"
	Weapon.SisterWeapon "Mauler"
	Tag "$TAG_MAULER2"

	action native A_FireMauler2Pre ();
	action native A_FireMauler2 ();

	States
	{
	Ready:
		MAUL IJKL 7 A_WeaponReady
		Loop
	Deselect:
		MAUL I 1 A_Lower
		Loop
	Select:
		MAUL I 1 A_Raise
		Loop
	Fire:
		MAUL I 20 A_FireMauler2Pre
		MAUL J 10 A_Light1
		BLSF A 10 Bright A_FireMauler2
		MAUL B 10 Bright A_Light2
		MAUL C 2
		MAUL D 2 A_Light0
		MAUL E 2 A_ReFire
		Goto Ready
	}
}


// Mauler "Bullet" Puff -----------------------------------------------------

ACTOR MaulerPuff
{
	+NOBLOCKMAP
	+NOGRAVITY
	+PUFFONACTORS
	RenderStyle Add
	DamageType Disintegrate
	states
	{
	Spawn:
		MPUF AB 5
		POW1 ABCDE 4
		Stop
	}
}

// The Mauler's Torpedo -----------------------------------------------------

ACTOR MaulerTorpedo
{
	Speed 20
	Height 8
	Radius 13
	Damage 1
	DamageType Disintegrate
	Projectile
	+STRIFEDAMAGE
	MaxStepHeight 4
	RenderStyle Add
	SeeSound "weapons/mauler2fire"
	DeathSound "weapons/mauler2hit"
	Obituary "$OB_MPMAULER"

	action native A_MaulerTorpedoWave ();

	States
	{
	Spawn:
		TORP ABCD 4 Bright
		Loop
	Death:
		THIT AB 8 Bright
		THIT C 8 Bright A_MaulerTorpedoWave
		THIT DE 8 Bright
		Stop
	}
}


// The mini torpedoes shot by the big torpedo --------------------------------

ACTOR MaulerTorpedoWave
{
	Speed 35
	Radius 13
	Height 13
	Damage 10
	DamageType Disintegrate
	Projectile
	+STRIFEDAMAGE
	MaxStepHeight 4
	RenderStyle Add
	Obituary "$OB_MPMAULER"
	States
	{
	Spawn:
		TWAV AB 9 Bright
	Death:
		TWAV C 9 Bright
		Stop
	}
}


// High-Explosive Grenade ---------------------------------------------------

ACTOR HEGrenade
{
	Speed 15
	Radius 13
	Height 13
	Mass 20
	Damage 1
	Reactiontime 30
	Projectile
	-NOGRAVITY
	+STRIFEDAMAGE
	+BOUNCEONACTORS
	+EXPLODEONWATER
	MaxStepHeight 4
	BounceType "Doom"
	BounceFactor 0.5
	BounceCount 2
	SeeSound "weapons/hegrenadeshoot"
	DeathSound "weapons/hegrenadebang"
	Obituary "$OB_MPSTRIFEGRENADE"
	States
	{
	Spawn:
		GRAP AB 3 A_Countdown
		Loop
	Death:
		BNG4 A 0 Bright A_NoGravity
		BNG4 A 0 Bright A_SetTranslucent(1,1)
		BNG4 A 2 Bright A_Explode(192,192,1,1)
		BNG4 BCDEFGHIJKLMN 3 Bright
		Stop
	}
}

// White Phosphorous Grenade ------------------------------------------------

ACTOR PhosphorousGrenade
{
	Speed 15
	Radius 13
	Height 13
	Mass 20
	Damage 1
	Reactiontime 40
	Projectile
	-NOGRAVITY
	+STRIFEDAMAGE
	+BOUNCEONACTORS
	+EXPLODEONWATER
	BounceType "Doom"
	MaxStepHeight 4
	BounceFactor 0.5
	BounceCount 2
	SeeSound "weapons/phgrenadeshoot"
	DeathSound "weapons/phgrenadebang"
	Obituary "$OB_MPPHOSPHOROUSGRENADE"
	States
	{
	Spawn:
		GRIN AB 3 A_Countdown
		Loop
	Death:
		BNG3 A 2 A_SpawnItemEx("PhosphorousFire")
		Stop
	}
}

// Fire from the Phoshorous Grenade -----------------------------------------

ACTOR PhosphorousFire native
{
	Reactiontime 120
	DamageType Fire
	+NOBLOCKMAP
	+FLOORCLIP
	+NOTELEPORT
	+NODAMAGETHRUST
	+DONTSPLASH
	RenderStyle Add
	Obituary "$OB_MPPHOSPHOROUSGRENADE"

	action native A_Burnarea ();
	action native A_Burnination ();

	states
	{
	Spawn:
		BNG3 B 2 Bright A_Burnarea
		BNG3 C 2 Bright A_Countdown
		FLBE A 2 Bright A_Burnination
		FLBE B 2 Bright A_Countdown
		FLBE C 2 Bright A_Burnarea
		FLBE D 3 Bright A_Countdown
		FLBE E 3 Bright A_Burnarea
		FLBE F 3 Bright A_Countdown
		FLBE G 3 Bright A_Burnination
		Goto Spawn+5
	Death:
		FLBE H 2 Bright
		FLBE I 2 Bright A_Burnination
		FLBE JK 2 Bright
		Stop
	}
}

// High-Explosive Grenade Launcher ------------------------------------------

ACTOR StrifeGrenadeLauncher : StrifeWeapon
{
	+FLOORCLIP
	Weapon.SelectionOrder 2400
	Weapon.AmmoUse1 1
	Weapon.AmmoGive1 12
	Weapon.AmmoType1 "HEGrenadeRounds"
	Weapon.SisterWeapon "StrifeGrenadeLauncher2"
	Inventory.Icon "GRNDA0"
	Tag "$TAG_GLAUNCHER1"
	Inventory.PickupMessage "$TXT_GLAUNCHER"

	action native A_FireGrenade (class<Actor> grenadetype, int angleofs, state flash);

	States
	{
	Spawn:
		GRND A -1
		Stop
	Ready:
		GREN A 1 A_WeaponReady
		Loop
	Deselect:
		GREN A 1 A_Lower
		Loop
	Select:
		GREN A 1 A_Raise
		Loop
	Fire:
		GREN A 5 A_FireGrenade("HEGrenade", -90, "Flash")
		GREN B 10
		GREN A 5 A_FireGrenade("HEGrenade",  90, "Flash2")
		GREN C 10
		GREN A 0 A_ReFire
		Goto Ready
	Flash:
		GREF A 5 Bright A_Light1
		Goto LightDone
	Flash2:
		GREF B 5 Bright A_Light2
		Goto LightDone
	}

}

// White Phosphorous Grenade Launcher ---------------------------------------

ACTOR StrifeGrenadeLauncher2 : StrifeGrenadeLauncher
{
	Weapon.SelectionOrder 3200
	Weapon.AmmoUse1 1
	Weapon.AmmoGive1 0
	Weapon.AmmoType1 "PhosphorusGrenadeRounds"
	Weapon.SisterWeapon "StrifeGrenadeLauncher"
	Tag "$TAG_GLAUNCHER2"

	States
	{
	Ready:
		GREN D 1 A_WeaponReady
		Loop
	Deselect:
		GREN D 1 A_Lower
		Loop
	Select:
		GREN D 1 A_Raise
		Loop
	Fire:
		GREN D 5 A_FireGrenade("PhosphorousGrenade", -90, "Flash")
		GREN E 10
		GREN D 5 A_FireGrenade("PhosphorousGrenade",  90, "Flash2")
		GREN F 10
		GREN A 0 A_ReFire
		Goto Ready
	Flash:
		GREF C 5 Bright A_Light1
		Goto LightDone
	Flash2:
		GREF D 5 Bright A_Light2
		Goto LightDone
	}
}