Actor ".357 Revolver" : MinigunGiver
{ //Scripted (Mutiplayer weapon spawn can break as well as functions in the upgrade ACS code... this counts for all upgradable weapon actors)
Scale 0.14
Inventory.PickupSound "harold/revolver"
Inventory.PickupMessage "You got the revolver!"
States
{
   Spawn:
     TNT1 A 0
	 TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("CheckWeaponWorldSpawn") == 2,1)
	 Goto SpawnDropped
	 REVA B -1
	 Wait
   SpawnDropped:
     TNT1 A 1 A_SpawnItem("RevolverGiverDropped")
	 Stop
   Pickup:
	 TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("MPWeaponCheck") == 2,"PickupMP")
	 TNT1 A 0 A_JumpIfInventory("Explosive Revolver",1,"GiveUpgrade")
	 TNT1 A 0 A_GiveInventory("BulletMag",12)
	 TNT1 A 1 A_GiveInventory("Revolver",1)
	 Stop
   GiveUpgrade:
     TNT1 A 0 A_GiveInventory("ExplosiveAmmo",12)
     TNT1 A 1 A_GiveInventory("Explosive Revolver",1)
	 Stop
   PickupMP:
     TNT1 A 0 A_JumpIfInventory("Revolver",1,"Nope")
	 TNT1 A 0 A_JumpIfInventory("Explosive Revolver",1,"Nope")
	 TNT1 A 0 A_GiveInventory("BulletMag",12)
     TNT1 A 1 ACS_NamedExecuteAlways("SpawnWeaponActive",0,1)
	 Fail
   Nope:
     REVA B 1
	 Fail
	 }
}

Actor RevolverGiverDropped : ".357 Revolver"
{
States
{
  Spawn:
   REVA B -1
   Loop
  Pickup:
   TNT1 A 0 A_JumpIfInventory("Explosive Revolver",1,"GiveUpgrade")
   TNT1 A 0 A_GiveInventory("BulletMag",12)
   TNT1 A 1 A_GiveInventory("Revolver",1)
   Stop
   }
}

ACTOR "Explosive Revolver" : Weapon
{ //Scripted (Mutiplayer weapon spawn can break as well as functions in the upgrade ACS code... this counts for all upgradable weapon actors)
//Creator: Fluffy
//Origin: HDAN
//Sprite: REVU/REVS
//Title: "Explosive Revolver" 
Scale 0.3
Weapon.BobSpeed 1.5
Weapon.BobRangeX 0.2
Weapon.BobRangeY 0.4
Weapon.BobStyle Alpha
Weapon.SelectionOrder 440
Weapon.KickBack 120
Weapon.AmmoGive 0 //6
Weapon.AmmoUse 1
Weapon.AmmoType "RevolverCylinder"
Weapon.AmmoType2 "ExplosiveAmmo"
Inventory.PickupSound "harold/revolver"
Inventory.PickupMessage "Revolver"
Obituary "%o was executed %k's Revolver."
Weapon.UpSound "harold/revolver"
Dropitem "RevolverGiverDropped"
Decal "BulletChip"
+WEAPON.AMMO_OPTIONAL
+WEAPON.NOALERT
+WEAPON.CHEATNOTWEAPON
+INVENTORY.UNDROPPABLE
+NOAUTOFIRE
States
{
  Ready:
    TNT1 A 0 A_JumpIfInventory("RevolverStartToken",1,1)
	Goto Startup
	REVU ABCDE 1
	TNT1 A 0 A_TakeInventory("WEMAction",1)
	TNT1 A 0 A_JumpIfInventory("RevolverCylinder",1,"ReadyLoop")
	Goto ReadyEmpty
  ReadyLoop:
    TNT1 A 0 A_JumpIfInventory("RevolverFastMode",1,"Ready2Loop")
	TNT1 A 0 A_JumpIfInventory("RevolverCylinder",1,1)
	Goto ReadyEmpty
	TNT1 A 0 A_JumpIfInventory("HandGrenadeAction",1,"GrenadeCheck")
	TNT1 A 0 A_JumpIfInventory("MineAction",1,"MineCheck")
	TNT1 A 0 A_JumpIfInventory("RailgunAction",1,"Zoom")
	TNT1 A 0 A_JumpIfInventory("WEMAction",1,"LowerWeaponC")
	REVO C 1 A_WeaponReady(WRF_ALLOWRELOAD)
	Loop
  Ready2Loop:
	TNT1 A 0 A_JumpIfInventory("HandGrenadeAction",1,"GrenadeCheck")
	TNT1 A 0 A_JumpIfInventory("MineAction",1,"MineCheck")
	TNT1 A 0 A_JumpIfInventory("RailgunAction",1,"Zoom")
	TNT1 A 0 A_JumpIfInventory("WEMAction",1,"LowerWeaponD")
	REVO D 1 A_WeaponReady(WRF_ALLOWRELOAD)
	Loop
  ReadyEmpty:
	TNT1 A 0 A_JumpIfInventory("HandGrenadeAction",1,"GrenadeCheck")
	TNT1 A 0 A_JumpIfInventory("MineAction",1,"MineCheck")
	TNT1 A 0 A_JumpIfInventory("RailgunAction",1,"Zoom")
	TNT1 A 0 A_JumpIfInventory("WEMAction",1,"LowerWeaponA")
	REVO A 1 A_WeaponReady(WRF_ALLOWRELOAD)
	Loop
  Startup:
    TNT1 A 0 A_GiveInventory("RevolverUpgradeToken",1)
	TNT1 A 0 A_TakeInventory("Revolver",1)
    TNT1 A 0 A_GiveInventory("RevolverStartToken",1)
	TNT1 A 0 A_JumpIfInventory("ExplosiveAmmo",6,1)
	Goto Ready+1
    REVS IABC 1
	REVS D 10
	REVS E 2
	REVS F 4 A_PlayWeaponSound("harold/open")
	REVS GH 2
	Goto Altfire+22
  Deselect:
	TNT1 A 0 A_TakeInventory("HandGrenadeAction",1)
	TNT1 A 0 A_TakeInventory("MineAction",1)
	TNT1 A 0 A_TakeInventory("RailgunAction",1)
	TNT1 A 0 A_TakeInventory("WEMAction",1)
	TNT1 A 0 A_PlayWeaponSound("weapons/weapondown")
	REVO A 1 A_Lower
	TNT1 AA 0 A_Lower
	Goto Deselect+5
  Select:
	TNT1 A 0 A_TakeInventory("HandGrenadeAction",1)
	TNT1 A 0 A_TakeInventory("MineAction",1)
	TNT1 A 0 A_TakeInventory("RailgunAction",1)
	TNT1 A 0 A_TakeInventory("WEMAction",1)
	TNT1 A 0 A_Raise
	Wait
  LowerWeaponC:
	TNT1 A 0 A_TakeInventory("WEMAction",1)
	REVO C 1 Offset(5,39) A_PlayWeaponSound("weapons/weapondown")
	REVO C 1 Offset(14,52)
	REVO C 1 Offset(24,64)
	REVO C 1 Offset(36,87)
	REVO C 1 Offset(48,110)
	REVO C 1 Offset(1,120)
    Wait
  LowerWeaponD:
	TNT1 A 0 A_TakeInventory("WEMAction",1)
	REVO D 1 Offset(5,39) A_PlayWeaponSound("weapons/weapondown")
	REVO D 1 Offset(14,52)
	REVO D 1 Offset(24,64)
	REVO D 1 Offset(36,87)
	REVO D 1 Offset(48,110)
	REVO D 1 Offset(1,120)
    Wait
  LowerWeaponA:
	TNT1 A 0 A_TakeInventory("WEMAction",1)
	REVO A 1 Offset(5,39) A_PlayWeaponSound("weapons/weapondown")
	REVO A 1 Offset(14,52)
	REVO A 1 Offset(24,64)
	REVO A 1 Offset(36,87)
	REVO A 1 Offset(48,110)
	REVO A 1 Offset(1,120)
    Wait
  Fire:
    TNT1 A 0 A_JumpIfInventory("RevolverHarold",1,"Fire3")
    TNT1 A 0 A_JumpIfInventory("RevolverFastMode",1,"Fire2")
	TNT1 A 0 A_JumpIfNoAmmo("Empty")
	TNT1 A 0 A_PlaySound("harold/fire")
	TNT1 A 0 A_AlertMonsters
    TNT1 A 0 A_FireCustomMissile("ExplosiveRevolverTracer",0,1,0,0,0,0)
	TNT1 A 0 Radius_Quake(3,2,0,1,0)
	TNT1 A 0 A_Light1
	TNT1 A 0 A_ZoomFactor(0.975)
	REUF A 1 Bright A_GunFlash
	TNT1 A 0 A_ZoomFactor(0.990)
	REUF B 1 Bright A_Light2
	TNT1 A 0 A_ZoomFactor(1.0)
	REUF C 6 A_Light0
	REUF DEF 1
	TNT1 A 0 A_JumpIfInventory("RevolverCylinder",1,1)
	Goto ReadyEmpty
	REVO A 2
	REVO B 3 A_PlayWeaponSound("harold/pull")
	REVO C 5 A_WeaponReady
	Goto ReadyLoop
  Fire2:
    TNT1 A 0 A_JumpIfNoAmmo("Empty")
	TNT1 A 0 A_AlertMonsters
    REVF EFGH 2
	Goto Fire2Holding
  Fire2Hold:
    REVF I 2
  Fire2Holding:
	TNT1 A 0 A_JumpIfNoAmmo("Empty")
	TNT1 A 0 A_PlaySound("harold/fire")
    TNT1 A 0 A_FireCustomMissile("ExplosiveRevolverTracer",FRandom(-2,2),1,0,0,0,FRandom(-2,2))
    TNT1 A 0 Radius_Quake(3,2,0,1,0)
	TNT1 A 0 A_SetAngle(angle - random(-2.4,1.6))
    TNT1 A 0 A_SetPitch(pitch - 1)
	TNT1 A 0 A_Light1
	TNT1 A 0 A_ZoomFactor(0.975)
	REVF J 1 Bright A_GunFlash
	TNT1 A 0 A_ZoomFactor(0.990)
	REVF K 1 Bright A_Light2
	TNT1 A 0 A_ZoomFactor(1.0)
	REVF L 2 A_Light0
	REVF M 2
	REVF N 2 A_Refire("Fire2Hold")
	REVO D 12 A_WeaponReady(1)
    Goto Ready2Loop
  Fire3:
	TNT1 A 0 A_JumpIfNoAmmo("Empty")
	TNT1 A 0 A_PlaySound("harold/fire")
	TNT1 A 0 A_AlertMonsters
    TNT1 A 0 A_FireCustomMissile("ExplosiveRevolverTracer2",0,1,0,0,0,0)
	TNT1 A 0 Radius_Quake(3,2,0,1,0)
	TNT1 A 0 A_Light1
	TNT1 A 0 A_ZoomFactor(0.975)
	REUF A 1 Bright A_GunFlash
	TNT1 A 0 A_ZoomFactor(0.990)
	REUF B 1 Bright A_Light2
	TNT1 A 0 A_ZoomFactor(1.0)
	REUF C 6 A_Light0
	REUF DEF 1
	TNT1 A 0 A_JumpIfInventory("RevolverCylinder",1,1)
	Goto ReadyEmpty
	REVO A 2
	REVO B 3 A_PlayWeaponSound("harold/pull")
	REVO C 5 A_WeaponReady
	Goto ReadyLoop
  Empty:
    TNT1 A 0 A_JumpIfInventory("RevolverFastMode",1,"Empty2")
	REVO ABC 2
	REVO C 2 A_PlaySoundEx("weapons/click",CHAN_BODY)
	REVO A 2
	TNT1 A 0 A_JumpIfInventory("ExplosiveAmmo",1,"AltFire")
	Goto ReadyEmpty
  Empty2:
    REVF I 2
	REVF O 1 A_PlaySoundEx("weapons/click",CHAN_BODY)
	REVF P 1
	REVF QR 2
	TNT1 A 0 A_JumpIfInventory("ExplosiveAmmo",1,"AltFire")
	Goto Ready2Loop
  AltFire:
	TNT1 A 0 A_JumpIfInventory("RevolverCylinder",6,"ReadyLoop")
	TNT1 A 0 A_JumpIfInventory("ExplosiveAmmo",1,2)
	TNT1 A 0
	Goto ReadyEmpty
    REVQ ABCD 1
	RERE A 2
	RERE B 4 A_PlayWeaponSound("harold/open")
	RERE CD 2
	RERE EFGHI 1
	TNT1 AAAAAA 0 A_SpawnItemEx("RifleCasing",Cos(Pitch)*30,0,25-(Sin(Pitch)*25),Cos(Pitch)*FRandom(-2,-4),FRandom(3,6),-Sin(Pitch)*FRandom(3,6),0,SXF_NOCHECKPOSITION|SXF_TRANSFERPITCH)
	RERE JKLMNOPQ 2
	TNT1 A 0 A_PlayWeaponSound("harold/load")
	RERE RS 3
	RERE T 3 A_PlayWeaponSound("harold/close")
	RERE U 6
	RERE VW 3
	REVQ BA 2
	TNT1 A 0 A_JumpIfInventory("RevolverFastMode",1,"DoReload")
	REVO A 2
	REVO B 3 A_PlayWeaponSound("harold/pull")
	REVO C 5
  DoReload:	
	TNT1 A 0 A_JumpIfInventory("RevolverCylinder", 6, "ReadyLoop")
	TNT1 A 0 A_JumpIfInventory("ExplosiveAmmo", 1, 1)
	Goto ReadyLoop
	TNT1 A 0 A_GiveInventory("RevolverCylinder", 1)
	TNT1 A 0 A_Takeinventory("ExplosiveAmmo",1)
	Goto DoReload
  GrenadeCheck:
	TNT1 A 0 A_JumpIfInventory("HandGrenadeAmmo",1,"GrenadeToss")
	TNT1 A 0 A_TakeInventory("HandGrenadeAction",1)
	Goto ReadyLoop
  GrenadeToss:
	TNT1 A 0 A_PlayWeaponSound("weapons/weapondown") 
	REVU EDCBA 1
	TNT1 A 4
	HGRN ABCDEFGHI 1
	TNT1 A 0 A_PlayWeaponSound("weapons/hgrenadepin")
	HGRN JKLM 2
	TNT1 A 11
	TNT1 A 0 A_PlayWeaponSound("weapons/hgrenadethrow")
	TNT1 A 0 A_TakeInventory("HandGrenadeAmmo",1,TIF_NOTAKEINFINITE)
	HGRN N 1 A_FireCustomMissile("ThrownGrenade",0,0,0,0)
	HGRN OPQRS 1
	HGRN TU 2
	TNT1 A 6 A_TakeInventory("HandGrenadeAction",1)
	Goto Ready
  MineCheck:
	TNT1 A 0 A_JumpIfInventory("MineAmmo",1,"MineToss")
	TNT1 A 0 A_TakeInventory("MineAction",1)
	Goto ReadyLoop
  MineToss:
	TNT1 A 0 A_PlayWeaponSound("weapons/weapondown") 
	REVU EDCBA 1
	TNT1 A 8
	TNT1 A 0 A_PlayWeaponSound("weapons/hgrenadethrow")
	MINE ABCDEF 1
	TNT1 A 0 A_TakeInventory("MineAmmo",1,TIF_NOTAKEINFINITE)
	MINE G 1 A_FireCustomMissile("ThrownMine",0,0,0,0,false)
	MINE HI 1
	MINE JKLM 1
	TNT1 A 5 A_TakeInventory("MineAction",1)
	Goto Ready
  Zoom:
    TNT1 A 0
	TNT1 A 0 A_TakeInventory("RailgunAction",1)
  ChangeMode:
    TNT1 A 0
	TNT1 A 0 A_JumpIfInventory("RevolverHarold",1,"ChangeMode2")
	TNT1 A 0 A_JumpIfInventory("RevolverFastMode",1,"ChangeMode3")
	TNT1 A 0 A_Print("Fast draw!",1)
	TNT1 A 0 A_GiveInventory("RevolverFastMode",1)
	TNT1 A 0 A_PlayWeaponSound("harold/pull")
	REVO C 3 Offset(0,34)
	REVO C 2 Offset(0,37)
	REVO C 2 Offset(0,40)
	REVO D 2 Offset(0,37)
	REVO D 3 Offset(0,34)
	TNT1 A 0 Offset(0,32)
	Goto Ready2Loop
  ChangeMode2:
	TNT1 A 0 A_Print("Normal",1)
	TNT1 A 0 A_TakeInventory("RevolverHarold",1)
	TNT1 A 0 A_PlayWeaponSound("harold/pull")
	REVO C 3 Offset(0,34)
	REVO C 2 Offset(0,37)
	REVO C 2 Offset(0,40)
	REVO C 2 Offset(0,37)
	REVO C 3 Offset(0,34)
	TNT1 A 0 Offset(0,32)
	Goto ReadyLoop
  ChangeMode3:
	TNT1 A 0 A_Print("Spread",1)
	TNT1 A 0 A_TakeInventory("RevolverFastMode",1)
	TNT1 A 0 A_GiveInventory("RevolverHarold",1)
	TNT1 A 0 A_PlayWeaponSound("harold/pull")
	REVO D 3 Offset(0,34)
	REVO D 2 Offset(0,37)
	REVO D 2 Offset(0,40)
	REVO C 2 Offset(0,37)
	REVO C 3 Offset(0,34)
	TNT1 A 0 Offset(0,32)
	Goto ReadyLoop
  Spawn:
	PSUP A -1
	Stop
	}
}

Actor NeoRevolverMode : Inventory {Inventory.MaxAmount 1}

Actor RevolverStartToken : Inventory {Inventory.MaxAmount 1}
ACTOR RevolverFastMode : Inventory {Inventory.MaxAmount 1}
ACTOR RevolverHarold : Inventory {Inventory.MaxAmount 1}
Actor RevolverUpgradeToken : Inventory {inventory.maxamount 1}

Actor ExplosiveAmmo : Ammo 18067
  {
  Scale 0.4
  Inventory.PickupSound "items/clip"
  Inventory.PickupMessage "High Explosive Bullets!"
  Inventory.Icon "BULPB0"
  Inventory.amount 5
  Inventory.maxamount 50
  Ammo.backpackamount 10
  Ammo.backpackmaxamount 100
  +INVENTORY.BIGPOWERUP
  States
  {
  Spawn:
    BULP B -1
    Stop
    }
}

ACTOR ExplosiveAmmoBox : ExplosiveAmmo
  {
  Scale 1.4
  Inventory.Amount 20
  Inventory.PickupSound "items/clipbox"
  Inventory.PickupMessage "High Explosive Bullet Box!"
  States
  {
  Spawn:
    MSAW A -1
    Stop
    }
}

ACTOR ExplosiveRevolverTracer : PlayerExplosiveTracer
{
Scale 0.12 //0.16
Speed 195
Alpha 1
DeathSound "harold/explosion"
DamageType "Normal"
Missiletype "ExplosiveRevolverSmokeSpawner"
MissileHeight 5
+FORCERADIUSDMG
States
{
  Spawn:
    REL3 B 1 Bright //A_SpawnitemEx("ExplosiveRevolverSmokeSpawner",0,0,0,0)
	TNT1 A 0 A_ScaleVelocity(1.1)
    Loop
  Death:
	TNT1 A 0
	TNT1 A 0 A_SpawnItem("RevolverExplosiveEffect")
    CGE2 A 1 Bright A_Explode(Random(40,60)*5,72)
	CGE2 ABBBCCCDDDEEEFFFFGGGGHHHIIIJJJJJKKKKKLLLLL 1 Bright A_FadeOut(0,01)
	CGE2 LLLL 1 Bright A_FadeOut(0,03)
    Stop
   }
}

ACTOR RevolverExplosiveEffect : SentientExplosiveEffect
{
States
{
Spawn:
    TNT1 A 0
    TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
	TNT1 AA 0 A_SpawnItemEx("OrangeParticleSpawner", 0, 0, 0, 0, 0, 0, 0) 
    TNT1 AAA 0 A_CustomMissile("Kaboom28", 0, 0, random(0,360), 2, random(0,360))
	TNT1 AA 0 A_CustomMissile("Kaboom29", 0, 0, random(0,360), 2, random(0,360))
	TNT1 AAA 0 A_CustomMissile("SmokeFX6", 0, 0, random(0,360), 2, random(0,360))
	TNT1 AAA 0 A_CustomMissile("SmokeFX7", 0, 0, random(0,360), 2, random(0,360))
	TNT1 A 1
	Stop
	}
}

Actor Kaboom28 : Kaboom
{
Speed 4
Scale 0.16
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(304) == 1, "Toaster")
CGE2 ABBCCDDEEFFFGGGHHHIIIJJJJKKKL 1 Bright A_FadeOut(0,01)
CGE2 LLLL 1 Bright A_FadeOut(0,03)
Stop
}
}

Actor Kaboom29 : Kaboom16 { Scale 0.19 }

ACTOR ExplosiveRevolverTracer2 : ExplosiveRevolverTracer
{
speed 8
Scale 0.04
Missiletype ""
DeathSound "sentient/chaingunex"
var int user_flytime;
var int user_flytime2;
States
{
  Spawn:
   SMBM A 1 Bright A_SpawnitemEx("ExplosiveRevolverSmokeSpawner",0,0,0,0,0,0,0,0,168)
   TNT1 A 0 A_Jump(128,3)
   TNT1 A 0 A_SpawnitemEx("ExplosiveRevolverTracer3",0,0,0,velx*1.1,vely*1.1,velz*1.1,angle+user_flytime+Frandom(-2,2),SXF_TRANSFERPOINTERS)
   TNT1 A 0 A_SpawnitemEx("ExplosiveRevolverTracer3",0,0,0,velx*1.1,vely*1.1,velz*1.1,angle-user_flytime+Frandom(-2,2),SXF_TRANSFERPOINTERS)
   TNT1 A 0 A_ScaleVelocity(1.1)
   TNT1 A 0 A_JumpIf(user_flytime >= 12,"SpeedUp")
   TNT1 A 0 A_SetUserVar("user_flytime",user_flytime+1)
   Loop
  SpeedUp:
   REL3 A 1 Bright A_SpawnitemEx("ExplosiveRevolverSmokeSpawner",0,0,0,0)
   SMBM A 1 Bright A_SpawnitemEx("ExplosiveRevolverSmokeSpawner",0,0,0,0)
   TNT1 A 0 A_ScaleVelocity(1.4)
   TNT1 A 0 A_JumpIf(user_flytime2 >= 6,"SpeedUp2")
   TNT1 A 0 A_SetUserVar("user_flytime2",user_flytime2+1)
   Loop
  SpeedUp2:
   SMBM A 1 Bright A_SpawnitemEx("ExplosiveRevolverSmokeSpawner",0,0,0,0)
   TNT1 A 0 A_ScaleVelocity(1.4)
   Loop
  Death:
   TNT1 A 0
   TNT1 A 0 A_SetTranslucent(0.75,1)
   TNT1 A 0 A_SpawnItem("SentientExplosiveEffect")
   MISL B 4 Bright A_Explode(Random(15,35)*5,140)
   MISL CD 3 Bright
   Stop
   }
}

ACTOR ExplosiveRevolverTracer3 : ExplosiveRevolverTracer2
{
States
{
  Spawn:
   SMBM A 1 Bright A_SpawnitemEx("ExplosiveRevolverSmokeSpawner",0,0,0,0,0,0,0,0,168)
   TNT1 A 0 A_ScaleVelocity(1.1)
   TNT1 A 0 A_JumpIf(user_flytime >= 12,"SpeedUp")
   TNT1 A 0 A_SetUserVar("user_flytime",user_flytime+1)
   Loop
  SpeedUp:
   REL3 A 1 Bright A_SpawnitemEx("ExplosiveRevolverSmokeSpawner",0,0,0,0)
   SMBM A 1 Bright A_SpawnitemEx("ExplosiveRevolverSmokeSpawner",0,0,0,0)
   TNT1 A 0 A_ScaleVelocity(1.4)
   TNT1 A 0 A_JumpIf(user_flytime2 >= 6,"SpeedUp2")
   TNT1 A 0 A_SetUserVar("user_flytime2",user_flytime2+1)
   Loop
  SpeedUp2:
   SMBM A 1 Bright A_SpawnitemEx("ExplosiveRevolverSmokeSpawner",0,0,0,0)
   TNT1 A 0 A_ScaleVelocity(1.4)
   Loop
   }
}

Actor ExplosiveRevolverSmokeSpawner
{
+NOGRAVITY
+NOINTERACTION
+THRUACTORS
States
{
  Spawn:
   TNT1 A 0
   TNT1 AAAAAAAAAAAA 0 A_SpawnitemEx("ExplosiveRevolverSmokeRandomSpawner",Frandom(-3,3),Frandom(-3,3),Frandom(-3,3),0,0,0,0,0,128)
   Stop
   }
}

Actor ExplosiveRevolverSmokeRandomSpawner : RandomSpawner
{
Dropitem "SmokeFFX8" 256 1
Dropitem "SmokeFFX9" 256 1
}

ACTOR SmokeFFX8 : SmokeFX
{
Scale 0.03
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(304) == 1, "NULL")
SMK3 A 2 A_FadeOut(0.025)
TNT1 A 0 A_SetScale(Scalex+0.005)
SMK3 B 2 A_FadeOut(0.025)
TNT1 A 0 A_SetScale(Scalex+0.005)
SMK3 C 2 A_FadeOut(0.025)
TNT1 A 0 A_SetScale(Scalex+0.005)
SMK3 D 2 A_FadeOut(0.025)
TNT1 A 0 A_SetScale(Scalex+0.005)
SMK3 E 2 A_FadeOut(0.025)
TNT1 A 0 A_SetScale(Scalex+0.005)
SMK3 F 2 A_FadeOut(0.025)
TNT1 A 0 A_SetScale(Scalex+0.005)
SMK3 G 2 A_FadeOut(0.025)
TNT1 A 0 A_SetScale(Scalex+0.005)
SMK3 H 2 A_FadeOut(0.025)
TNT1 A 0 A_SetScale(Scalex+0.005)
SMK3 I 2 A_FadeOut(0.025)
TNT1 A 0 A_SetScale(Scalex+0.005)
SMK3 J 2 A_FadeOut(0.025)
TNT1 A 0 A_SetScale(Scalex+0.005)
SMK3 K 2 A_FadeOut(0.025)
TNT1 A 0 A_SetScale(Scalex+0.005)
SMK3 L 2 A_FadeOut(0.025)
TNT1 A 0 A_SetScale(Scalex+0.005)
SMK3 M 2 A_FadeOut(0.025)
SpawnLoop:
SMK3 M 1 A_FadeOut(0.025)
Wait
}
}

ACTOR SmokeFFX9 : SmokeFFX8 { Renderstyle Add Alpha 0.75 }

ACTOR RevolverCylinder : Ammo 
{ 
Inventory.Amount 0 
Inventory.MaxAmount 6 
Ammo.BackpackAmount 0 
Ammo.BackpackMaxAmount 6 
Inventory.Icon "TNT1A0" 
+IGNORESKILL 
}

ACTOR HDRevolverToken : Inventory {Inventory.MaxAmount 1}

ACTOR "Revolver" : Weapon
{ //Scripted (Mutiplayer weapon spawn can break as well as functions in the upgrade ACS code... this counts for all upgradable weapon actors)
//Creator: Fluffy
//Origin: HDAN/Complex-Armory
//Sprite: REHD/REVG
//Title: ".357 Revolver" 
Weapon.AmmoType "RevolverSpinner"
Weapon.AmmoUse 0
Weapon.AmmoGive 0
Weapon.AmmoType2 "BulletMag"
Weapon.AmmoUse2 1
Weapon.AmmoGive2 0 //6
Weapon.Kickback 45
Weapon.PreferredSkin "Handgun-Marine"
Weapon.SelectionOrder 2
Obituary "%o was breached by %k's revolver."
Inventory.PickupSound "harold/revolver"
Inventory.PickupMessage "You got the revolver!"
Weapon.UpSound "harold/revolver"
Dropitem "RevolverGiverDropped"
Decal BulletChip
Scale 0.14
+WEAPON.PRIMARY_USES_BOTH
+WEAPON.NOALERT
+INVENTORY.UNDROPPABLE
+AMMO_OPTIONAL
+ALT_AMMO_OPTIONAL
States
{
  Spawn:
	REVA B -1
	Stop
  Select:
	TNT1 A 0 A_JumpIfInventory("HDRevolverToken",1,"SelectX")
	TNT1 A 0 A_Raise
	REHD A 1 A_Raise
	Loop
  SelectX:
	TNT1 A 0 A_Raise
	REVG A 1 A_Raise
	Loop
  Deselect:
	TNT1 A 0 A_PlayWeaponSound("weapons/weapondown")
	TNT1 A 0 A_JumpIfInventory("HDRevolverToken",1,"DeselectX")
	TNT1 A 0 A_Lower
	REHD A 1 A_Lower
	Goto Deselect+2
  DeselectX:
	TNT1 A 0 A_Lower
	REVG A 1 A_Lower
	Loop
  LowerWeapon:
	TNT1 A 0 A_TakeInventory("WEMAction",1)
	REHD A 1 Offset(5,39) A_PlayWeaponSound("weapons/weapondown")
	REHD A 1 Offset(14,52)
	REHD A 1 Offset(24,64)
	REHD A 1 Offset(36,87)
	REHD A 1 Offset(48,110)
	REHD A 1 Offset(1,120)
	Wait
  LowerWeaponX:
	TNT1 A 0 A_TakeInventory("WEMAction",1)
	REVG A 1 Offset(5,39) A_PlayWeaponSound("weapons/weapondown")
	REVG A 1 Offset(14,52)
	REVG A 1 Offset(24,64)
	REVG A 1 Offset(36,87)
	REVG A 1 Offset(48,110)
	REVG A 1 Offset(1,120)
	Wait
  Ready:
	TNT1 A 0 A_JumpIfInventory("HDRevolverToken",1,"ReadyX")
	TNT1 A 0 A_TakeInventory("WEMAction",1)
	TNT1 A 0 A_JumpIfInventory("BulletMag",1,3)
	TNT1 A 0 A_JumpIfInventory("RevolverSpinner",1,4)
	REHD A 1 A_WeaponReady(12)
  ReadyLoop:
	TNT1 A 0 A_JumpIfInventory("WEMAction",1,"LowerWeapon")
	TNT1 A 0 A_JumpIfInventory("HandGrenadeAction",1,"GrenadeCheck")
	TNT1 A 0 A_JumpIfInventory("MineAction",1,"MineCheck")
	TNT1 A 0 A_JumpIfInventory("HDRevolverToken",1,"WeaponSkin")
	REHD A 1 A_WeaponReady
	Loop	
  ReadyX:
	TNT1 A 0 A_TakeInventory("WEMAction",1)
	REVG A 1 A_WeaponReady(12)
  ReadyLoopX:
	TNT1 A 0 A_JumpIfInventory("WEMAction",1,"LowerWeaponX")
	TNT1 A 0 A_JumpIfInventory("HandGrenadeAction",1,"GrenadeCheckX")
	TNT1 A 0 A_JumpIfInventory("MineAction",1,"MineCheckX")
	TNT1 A 0 A_JumpIfInventory("HDRevolverToken",1,1)
	Goto WeaponSkin2
	REVG A 1 A_WeaponReady
	Loop
  Fire:
	TNT1 A 0 A_JumpIfInventory("HDRevolverToken",1,"FireX")
	TNT1 A 0 A_JumpIfInventory("RevolverSpinner",1,1)
	Goto Empty
	TNT1 A 0 A_GunFlash
	TNT1 A 0 A_PlayWeaponSound("weapons/neorevolverfire")
	TNT1 A 0 A_TakeInventory("RevolverSpinner",1)
	TNT1 A 0 A_FireBullets(1.2,1.2,-1,random(27,58),"RevolverPuff",0)
	TNT1 A 0 Radius_Quake(5,3,0,1,0)
	REHD B 2 Bright A_FireCustomMissile("RevolverTracer",Frandom(-1,1),0,0,0,0,Frandom(-1,1))
	REHD C 2 Bright A_AlertMonsters
	REHD DEF 1
	REHD GHI 2
	Goto Ready
  FireX:
	REVG A 0 A_JumpIfInventory("RevolverSpinner",1,1)
	Goto EmptyX
	REVG A 0 A_GunFlash
	REVG A 0 A_PlayWeaponSound("Weapons/Revolver")
	REVG A 0 A_TakeInventory("RevolverSpinner",1)
	TNT1 A 0 A_FireBullets(1.2,1.2,-1,random(27,58),"RevolverPuff",0)
	REVG B 2 BRIGHT A_FireCustomMissile("RevolverTracer",Frandom(-1,1),0,0,0,0,Frandom(-1,1))
	REVG C 1 Offset(0,38) //A_SetPitch (pitch - 0.1)
	REVG D 1 Offset(0,44) //A_SetPitch (pitch - 0.1)
	REVG D 1 Offset(0,56) //A_SetPitch (pitch - 0.1)
	REVG D 1 Offset(0,52) A_AlertMonsters
	REVG C 1 Offset(0,50)
	REVG C 1 Offset(0,47)
	REVG C 1 Offset(0,44)
	REVG A 1 Offset(0,40) A_Jump(128,2)
	REVG A 1 Offset(0,36)
	REVG A 1 Offset(0,34)
	REVG A 1 Offset(0,33)
	REVG A 1 Offset(0,32)
	Goto Ready
  Empty:
	REHD A 10 A_PlayWeaponSound("weapons/click")
	TNT1 A 0 A_JumpIfInventory("BulletMag",1,"AltFire")
	Goto Ready
  EmptyX:
	REVG A 10 A_PlayWeaponSound("weapons/click")
	TNT1 A 0 A_JumpIfInventory("BulletMag",1,"AltFireX")
	Goto ReadyX
  Altfire:
	TNT1 A 0 A_JumpIfInventory("HDRevolverToken",1,"AltfireX")
	REHD A 0 A_JumpIfInventory("RevolverSpinner",6,"ReadyLoop")
	REHD A 0 A_JumpIfNoAmmo("ReadyLoop")
	Goto Reload
  Reload:
	TNT1 A 0 A_JumpIfNoAmmo("Empty")
	REHD JK 2
	REHD LMN 3
	REHD O 2 A_PlaySound("weapons/neorevolveropen",CHAN_AUTO)
	REHD PQ 2
	REHD RS 3
	REHD TU 2
	REHD V 3 A_PlaySound("weapons/neorevolvereject",CHAN_AUTO)
	REHD WX 3
	TNT1 AAAAAA 0 A_SpawnItemEx("RifleCasing",30,3,25,Random(2,4),Random(3,6),0,0)
	REHD YZ 2
	RE2D ABC 2
	RE2D DE 3
  ReloadLoop:
	TNT1 A 0 A_TakeInventory("BulletMag",1)
	TNT1 A 0 A_GiveInventory("RevolverSpinner",1)
	TNT1 A 0 A_JumpIfInventory("RevolverSpinner",6,2)
	TNT1 A 0 A_JumpIfNoAmmo(1)
	Goto ReloadLoop
	RE2D F 2 A_PlaySound("weapons/neorevolverload",CHAN_AUTO)
	RE2D GH 2
	RE2D IJKLM 2
	RE2D N 3 A_PlaySound("weapons/neorevolverclose",CHAN_AUTO)
	RE2D OP 3
	RE2D Q 2
	RE2D R 1 A_PlaySound("weapons/neorevolverswing",CHAN_AUTO,0.8)
	RE2D STUVWXYZ 1
	RE3D ABCDE 1
	REHD KJ 1
	Goto Ready
  AltfireX:
	REVG A 0 A_JumpIfInventory("RevolverSpinner",6,"ReadyLoopX")
	REVG A 0 A_JumpIfNoAmmo("ReadyLoopX")
	Goto ReloadX
  ReloadX:
	TNT1 A 0 A_JumpIfNoAmmo("EmptyX")
	TNT1 A 0 A_Jump(160,2)
	REVG A 1 Offset(0,35) A_PlaySound("weapons/revolverout")
	REVG C 1 Offset(0,38)
	REVG C 1 Offset(0,44)
	REVG C 1 Offset(0,52)
	REVG D 1 Offset(0,62)
	REVG D 1 Offset(0,72)
	REVG D 1 Offset(0,82)
	TNT1 A 32
  ReloadLoopX:
	TNT1 A 0 A_TakeInventory("BulletMag",1)
	TNT1 A 0 A_GiveInventory("RevolverSpinner",1)
	TNT1 A 0 A_JumpIfInventory("RevolverSpinner",6,2)
	TNT1 A 0 A_JumpIfNoAmmo(1)
	Goto ReloadLoopX
	TNT1 A 3
	RHND A 3 Offset(0,32)
	RHND B 3 A_PlayWeaponSound("weapons/revolverload")
	RHND C 2
	RHND BAD 3
	TNT1 A 4
	REVG D 1 Offset(0,82) A_PlaySound("weapons/revolverin",CHAN_AUTO)
	REVG D 1 Offset(0,72)
	REVG D 1 Offset(0,62)
	REVG C 1 Offset(0,52)
	REVG C 1 Offset(0,44)
	REVG C 1 Offset(0,38)
	REVG A 1 Offset(0,35)
	REVG A 1 Offset(0,32)
	Goto ReadyX
  GrenadeCheck:
	TNT1 A 0 A_JumpIfInventory("HandGrenadeAmmo",1,"GrenadeToss")
	TNT1 A 0 A_TakeInventory("HandGrenadeAction",1)
	Goto ReadyLoop
  GrenadeCheckX:
	TNT1 A 0 A_JumpIfInventory("HandGrenadeAmmo",1,"GrenadeTossX")
	TNT1 A 0 A_TakeInventory("HandGrenadeAction",1)
	Goto ReadyLoopX
  GrenadeToss:
	REHD A 1 Offset(0,35) A_PlayWeaponSound("weapons/weapondown")
	REHD A 1 Offset(0,38)
	REHD A 1 Offset(0,44)
	REHD A 1 Offset(0,52)
	REHD A 1 Offset(0,62)
	REHD A 1 Offset(0,72)
	REHD A 1 Offset(0,82)
	TNT1 A 4 Offset(0,32)
	HGRN ABCDEFGHI 1
	TNT1 A 0 A_PlayWeaponSound("weapons/hgrenadepin")
	HGRN JKLM 2
	TNT1 A 11
	TNT1 A 0 A_PlayWeaponSound("weapons/hgrenadethrow")
	TNT1 A 0 A_TakeInventory("HandGrenadeAmmo",1,TIF_NOTAKEINFINITE)
	HGRN N 1 A_FireCustomMissile("ThrownGrenade",0,0,0,0)
	HGRN OPQRS 1
	HGRN TU 2
	TNT1 A 6 A_TakeInventory("HandGrenadeAction",1)
	REHD A 1 Offset(0,82)
	REHD A 1 Offset(0,72)
	REHD A 1 Offset(0,62)
	REHD A 1 Offset(0,52)
	REHD A 1 Offset(0,44)
	REHD A 1 Offset(0,38)
	REHD A 1 Offset(0,35)
	REHD A 1 Offset(0,32)
	Goto ReadyLoop
  GrenadeTossX:
	REVG A 1 Offset(0,35) A_PlayWeaponSound("weapons/weapondown")
	REVG C 1 Offset(0,38)
	REVG C 1 Offset(0,44)
	REVG C 1 Offset(0,52)
	REVG D 1 Offset(0,62)
	REVG D 1 Offset(0,72)
	REVG D 1 Offset(0,82)
	TNT1 A 4 Offset(0,32)
	HGRN ABCDEFGHI 1
	TNT1 A 0 A_PlayWeaponSound("weapons/hgrenadepin")
	HGRN JKLM 2
	TNT1 A 11
	TNT1 A 0 A_PlayWeaponSound("weapons/hgrenadethrow")
	TNT1 A 0 A_TakeInventory("HandGrenadeAmmo",1,TIF_NOTAKEINFINITE)
	HGRN N 1 A_FireCustomMissile("ThrownGrenade",0,0,0,0)
	HGRN OPQRS 1
	HGRN TU 2
	TNT1 A 6 A_TakeInventory("HandGrenadeAction",1)
	REVG D 1 Offset(0,82)
	REVG D 1 Offset(0,72)
	REVG D 1 Offset(0,62)
	REVG C 1 Offset(0,52)
	REVG C 1 Offset(0,44)
	REVG C 1 Offset(0,38)
	REVG A 1 Offset(0,35)
	REVG A 1 Offset(0,32)
	Goto ReadyLoopX
  MineCheck:
	TNT1 A 0 A_JumpIfInventory("MineAmmo",1,"MineToss")
	TNT1 A 0 A_TakeInventory("MineAction",1)
	Goto ReadyLoop
  MineCheckX:
	TNT1 A 0 A_JumpIfInventory("MineAmmo",1,"MineTossX")
	TNT1 A 0 A_TakeInventory("MineAction",1)
	Goto ReadyLoopX
  MineToss:
	REHD A 1 Offset(0,35) A_PlayWeaponSound("weapons/weapondown")
	REHD A 1 Offset(0,38)
	REHD A 1 Offset(0,44)
	REHD A 1 Offset(0,52)
	REHD A 1 Offset(0,62)
	REHD A 1 Offset(0,72)
	REHD A 1 Offset(0,82)
	TNT1 A 4 Offset(0,32)
	TNT1 A 0 A_PlayWeaponSound("weapons/hgrenadethrow")
	MINE ABCDEF 1
	TNT1 A 0 A_TakeInventory("MineAmmo",1,TIF_NOTAKEINFINITE)
	MINE G 1 A_FireCustomMissile("ThrownMine",0,0,0,0,false)
	MINE HI 1
	MINE JKLM 1
	TNT1 A 5 A_TakeInventory("MineAction",1)
	REHD A 1 Offset(0,82)
	REHD A 1 Offset(0,72)
	REHD A 1 Offset(0,62)
	REHD A 1 Offset(0,52)
	REHD A 1 Offset(0,44)
	REHD A 1 Offset(0,38)
	REHD A 1 Offset(0,35)
	REHD A 1 Offset(0,32)
	Goto ReadyLoop
  MineTossX:
	REVG A 1 Offset(0,35) A_PlayWeaponSound("weapons/weapondown")
	REVG C 1 Offset(0,38)
	REVG C 1 Offset(0,44)
	REVG C 1 Offset(0,52)
	REVG D 1 Offset(0,62)
	REVG D 1 Offset(0,72)
	REVG D 1 Offset(0,82)
	TNT1 A 8 Offset(0,32)
	TNT1 A 0 A_PlayWeaponSound("weapons/hgrenadethrow")
	MINE ABCDEF 1
	TNT1 A 0 A_TakeInventory("MineAmmo",1,TIF_NOTAKEINFINITE)
	MINE G 1 A_FireCustomMissile("ThrownMine",0,0,0,0,false)
	MINE HI 1
	MINE JKLM 1
	TNT1 A 5 A_TakeInventory("MineAction",1)
	REVG D 1 Offset(0,82)
	REVG D 1 Offset(0,72)
	REVG D 1 Offset(0,62)
	REVG C 1 Offset(0,52)
	REVG C 1 Offset(0,44)
	REVG C 1 Offset(0,38)
	REVG A 1 Offset(0,35)
	REVG A 1 Offset(0,32)
	Goto ReadyLoopX
  WeaponSkin:
	RE3D FGHI 1
	RE3D J 1 A_PlayWeaponSound("weapons/neorevolverswing")
	RE3D KLMNOPQRSTU 1
	TNT1 A 5
	REVG D 1 Offset(0,82) A_PlaySound("weapons/revolverin",CHAN_AUTO)
	REVG D 1 Offset(0,72)
	REVG D 1 Offset(0,62)
	REVG C 1 Offset(0,52)
	REVG C 1 Offset(0,44)
	REVG C 1 Offset(0,38)
	REVG A 1 Offset(0,35)
	REVG A 1 Offset(0,32)
	Goto ReadyLoopX
  WeaponSkin2:
	TNT1 A 0 A_TakeInventory("NeoRevolverMode",1)
	REVG A 1 Offset(0,35) A_PlaySound("weapons/revolverout")
	REVG C 1 Offset(0,38)
	REVG C 1 Offset(0,44)
	REVG C 1 Offset(0,52)
	REVG D 1 Offset(0,62)
	REVG D 1 Offset(0,72)
	REVG D 1 Offset(0,82)
	TNT1 A 30 Offset(0,32)
	REHD A 1 Offset(0,82) A_PlaySound("weapons/revolverin",CHAN_AUTO)
	REHD A 1 Offset(0,72)
	REHD A 1 Offset(0,62)
	REHD A 1 Offset(0,52)
	REHD A 1 Offset(0,44)
	REHD A 1 Offset(0,38)
	REHD A 1 Offset(0,35)
	REHD A 1 Offset(0,32)
	Goto ReadyLoop
  Flash:
	TNT1 A 2 BRIGHT A_Light2
	TNT1 A 2 BRIGHT A_Light1
	TNT1 A 0 A_Light0
	Stop
	}
}

Actor RevolverShot : NemesisASGBall
{
Damage (Random(27,58))
Species "Player"
Speed 420
Decal BulletChip
DamageType "Normal"
DeathSound ""
States
{
  Spawn:
    TNT1 A 1
	Loop  
  Death:
	TNT1 A 1 A_SpawnItem("ModdedBulletPuff")
	Stop
	}
}

ACTOR RevolverSpinner : Ammo
{
Inventory.Amount 0
Inventory.MaxAmount 6
Ammo.BackpackAmount 0
Ammo.BackpackMaxAmount 6
Inventory.Icon "REVAA0"
+IGNORESKILL
}

ACTOR RevolverPuff : ModdedBulletPuff {DamageType "Marine" +MTHRUSPECIES}

ACTOR RevolverSpinnerClip : BulletMag
{
Inventory.PickupSound "items/clip"
Inventory.PickupMessage "Revolver Clip"
Inventory.Icon "REVAA0"
Inventory.Amount 0
Inventory.MaxAmount 150
Ammo.BackpackAmount 18
Ammo.BackpackMaxAmount 240
Scale 0.5
States
{
Spawn:
REVA A -1
Loop
}
}

ACTOR RevolverTracer : FastProjectile
{
PROJECTILE
Alpha 0.90
RenderStyle Add
Radius 2
Height 2
Scale 0.4
Speed 400
Damage (random(27,58))
Species "Player"
DamageType "Marine"
MissileType TracerTrail
MissileHeight 8
+BLOODSPLATTER
+MTHRUSPECIES
+DONTGIB
States
{
  Spawn:
	PUFF A 1 BRIGHT
	PUFF A 1 BRIGHT A_JumpIfCloser(192,"Whiz") // checksightorrange
	Loop
  Whiz:
	PUFF A 1 BRIGHT A_PlaySound("whiz",1.0,0,ATTN_NONE)
	SpawnNoWhiz:
	PUFF A 1 BRIGHT
	Loop
  Death:
  Crash:
	PUFF B 1 BRIGHT A_SetTranslucent(0.9,0)
	PUFF B 1 BRIGHT A_PlaySound("ricochet")
	PUFF CD 2 BRIGHT
	Stop
  XDeath:
	TNT1 A 3 A_PlaySound("hitflesh")
	Stop
	}
}