
actor HuntingRifle : Weapon
{
  obituary "%o was prey for %k's hunting rifle."
  radius 20
  height 16
  decal BulletChip
  //attacksound "HuntingRifle/Fire"
  inventory.pickupmessage "You got the Hunting Rifle!"
  weapon.selectionorder 200
  weapon.slotnumber 5
  weapon.kickback 125
  
  weapon.ammotype "HuntingRifleBullet"
  weapon.ammouse 1
  weapon.ammogive 5
  
  Weapon.AmmoType2 "HuntingRifleClip"
  Weapon.AmmoUse2 0
  +WEAPON.ALT_AMMO_OPTIONAL
  
  Weapon.UpSound "rifle/cock1"
  
  
  +NOALERT
  
  +SHOOTABLE
  +NOBLOOD
  //+CANPASS
  +WINDTHRUST
  +NOAUTOFIRE
  Health 100
  
  states
  {
  Ready:
    TNT1 A 0
    LDHR A 1 A_WeaponReady(WRF_NOSWITCH)
    LDHR A 0 A_TakeInventory("HuntingRifleZoom",10)
    LDHR A 0 A_JumpIfNoAmmo("NoAmmo") //- Only works in Fire state
    LDHR A 1 A_WeaponReady
    //LDHR A 0 A_JumpIfInventory("HuntingRifleBullet", 1, "LoadClip")
    loop
  Deselect: 
    LDHR A 1 A_Lower
    loop
  Select:
    //LDHR A 0 A_JumpIfInventory("HuntingRifleToken1",1,"Ready")
    LDHR A 1 A_Raise
    loop
  NoAmmo:
    TNT1 A 0
    TNT1 A 0 //A_Log("HuntingRifle NoAmmo")
    LDHR A 1 A_JumpIfInventory("HuntingRifleClip", 1, "LoadClip")
    LDHR A 1 A_WeaponReady
    goto Ready
  NoAmmoAfterFiring:
    TNT1 A 0
    TNT1 A 0 //A_Log("HuntingRifle NoAmmoAfterFiring")
    TNT1 A 0 A_JumpIfInventory("HuntingRifleClip", 1, "LoadClipAfterFiring")
    LDHR A 1 A_WeaponReady
    goto Ready
  LoadClip:
    TNT1 A 0 
    LDHR A 2 Offset(0,35)
    LDHR A 2 Offset(0,38)
    LDHR A 2 Offset(0,44)
    LDHR A 2 Offset(0,52)
    LDHR A 2 Offset(0,62)
    LDHR A 2 Offset(0,72)
   LoadClipAfterFiring:
    LDHR A 2 Offset(0,82)
    LDHR A 3 Offset(-1,82) A_PlaySound ("rifle/cock1", CHAN_WEAPON)
    LDHR A 4 Offset(0,82) 
    LDHR A 3 Offset(-2,84) A_PlaySound ("rifle/load", CHAN_WEAPON)
    LDHR A 4 Offset(0,82)
    LDHR A 5 Offset(-1,84) 
    LDHR A 6 Offset(-2,83) 
    LDHR A 5 Offset(0,82)
    LDHR A 3 Offset(-3,83)
    LDHR A 4 Offset(0,82)  A_PlaySound("rifle/cock2", CHAN_WEAPON)
    LDHR A 3 Offset(-2,84) 
    LDHR A 4 Offset(0,82)
    LDHR A 5 Offset(-1,84) A_TakeInventory("HuntingRifleClip", 1)//ACS_ExecuteAlways(949, 0, 0)
    LDHR A 4 Offset(0,82)
    LDHR A 4 Offset(0,86)
    LDHR A 2 Offset(0,0) A_GiveInventory("HuntingRifleBullet", 5)
    LDHR A 2 Offset(0,82) 
    LDHR A 0 A_Jump(256, "FinishCocking")
    goto FinishCocking
    /*
    LDHR A 2 Offset(0,72)
    LDHR A 2 Offset(0,62)
    LDHR A 2 Offset(0,52)
    LDHR A 2 Offset(0,44)
    LDHR A 2 Offset(0,38)
    LDHR A 3 Offset(0,35)
    LDHR A 3 Offset(0,32)
    goto Ready 
    */    
    
  Fire:
    TNT1 A 0
    LDHR A 0 A_AlertMonsters
    LDHR A 0 A_FireBullets(10, 10, -1, 300, "NoHuntingRifleGibPuff", FBF_USEAMMO|FBF_NORANDOM)
	LDHR A 0 ThrustThing(angle*256/360, -2, 0)
    LDHR A 0 A_PlaySound("HuntingRifle/Fire", CHAN_WEAPON, 1.0)
    LDHR A 0 //A_Quake (2, 2, 0, 1)
    LDHR A 0 A_SetPitch (pitch-0.5)
	LDHR B 0 Radius_Quake(5, 6, 0, 4, 0)
    LDHR B 1
	LDHR C 2
    LDHR D 2 Offset(0, 16)
    LDHR E 4 Offset(0, 14)
    LDHR FGH 2 Offset(0, 10)	 
	LDHR H 3 Offset(0, 20)
	LDHR H 4 Offset(0, 45)
	LDHR H 5 Offset(0, 50)
	LDHR G 4 Offset(0, 80)
    LDHR A 0 A_JumpIfNoAmmo("NoAmmoAfterFiring")

  FinishCocking:
	LDHR F 4 Offset(0, 80)
	LDHR E 4 Offset(0, 80)
	LDHR D 5 Offset(0, 80)
	LDHR T 0 A_PlaySound("HuntingRifle/Reload", CHAN_ITEM)
	LDHR H 3 Offset(0, 79)
	LDHR E 0 A_SpawnItemEx("DeadBulletCasing", 16.0, 15.0, 44.0, 0.0, 4.0, 2.0)
	LDHR H 4 Offset(0, 79)
	LDHR G 5 Offset(0, 83)
	LDHR F 8 Offset(0, 82)
	LDHR E 6 Offset(0, 81)
	LDHR D 6 Offset(0, 80)
	LDHR D 4 Offset(0, 70)
	LDHR D 4 Offset(-1, 50)
	LDHR D 4 Offset(-3, 40)
	LDHR D 4 Offset(-4, 30)
	//LDHR D 4 Offset(0, 20)
    
	//LDHR A 1 A_ReFire 
    goto Ready
  Spawn:
    LDHR P -1
    stop
  AltFire:
    TNT1 A 0
    LDHR A 0 A_GiveInventory("HuntingRifleZoom", 1)
    LDHR A 0
    LDHR A 0 A_GiveInventory("HuntingRifleScope")
    LDHR A 0 A_SelectWeapon("HuntingRifleScope")
    LDHR A 0 A_Lower
    LDHR A 0 A_Lower
    LDHR A 0 A_Lower
    LDHR A 0 A_Lower
    LDHR A 0 A_Lower
    goto AltFire+3
    }
}

Actor HuntingRifleScope: Weapon //NOT TO BE SPAWNED
{ 
  obituary "%o was picked-off By %k's scoped hunting rifle."
  weapon.kickback 125
  weapon.ammotype "HuntingRifleBullet"
  weapon.ammouse 1
  weapon.ammogive 0

  Weapon.AmmoType2 "HuntingRifleClip"
  Weapon.AmmoUse2 0
  +WEAPON.ALT_AMMO_OPTIONAL  
  
  +DONTBOB
  +NOALERT
  +UNDROPPABLE
  +UNTOSSABLE //-- Zandronum 3.0
  +NOAUTOFIRE //Semi-automatic!

  States
  {
  Spawn:
    LDHR P 0
	stop //Hacky way of implementing UNTOSSABLE for Zandronum < 3.0
    //Loop
  Ready:
    LDHR T 0
    LDHR T 2 A_WeaponReady
    //LDHR T 0 A_TakeInventory("HuntingRifleToken2",1)
	LDHR T 0 A_JumpIfNoAmmo("ResetAndRemove")
	LDHR T 0 A_JumpIfInventory("HuntingRifle", 1, "Ready")
	LDHR T 0 A_Jump(256, "ResetAndRemove")
  ResetAndRemove:
	TNT1 A 0
    LDHR T 1 A_ZoomFactor(1.0)
	LDHR T 0 A_TakeInventory("HuntingRifleZoom", 10)
	LDHR T 0 A_TakeInventory("HuntingRifleScope", 1)
    stop //Remove the scope from inventory if the rifle is dropped
  Deselect:
    LDHR T 0
    LDHR T 0 
    Goto AltFireDeselect//AltFire+2
  Select:
  	LDHR T 0 A_JumpIfInventory("HuntingRifle", 1, "ContinueSelecting")
	LDHR T 0 A_Jump(255, "ResetAndRemove")
  ContinueSelecting:
	LDHR T 0 A_PlaySound("HuntingRifle/Scope", CHAN_BODY)
    LDHR T 0 A_ZoomFactor(4.0)
    LDHR T 0
    LDHR T 0 A_Raise
    Loop 
    
  Fire:
    TNT1 A 0
    LDHR T 0 A_AlertMonsters
    LDHR T 0
	LDHR A 0 ThrustThing(angle*256/360, -2, 0)
    LDHR T 0 A_PlaySound("HuntingRifle/Fire", CHAN_WEAPON, 1.0)
    LDHR T 0 A_FireBullets (0.1, 0.1, -1, 300, "NoHuntingRifleGibPuff", FBF_USEAMMO|FBF_NORANDOM)
    LDHR T 0 //A_Quake (2, 2, 0, 1)
    LDHR T 0 A_SetPitch (pitch-0.5)
    //LDHR T 15 
  //ReloadAfterFire: - This label makes Fire wonky since Fire is a zero length state (Zandronum 3.0 issue?)
	LDHR T 0 A_ZoomFactor(1.0, ZOOM_INSTANT)
	LDHR B 0 Radius_Quake(5, 6, 0, 16, 0)
	LDHR B 1
	LDHR C 2
	LDHR H 3 Offset(0, 20)
	LDHR H 4 Offset(0, 45)
	LDHR H 5 Offset(0, 50)
	LDHR G 4 Offset(0, 80)
    LDHR A 0 A_JumpIfNoAmmo("NoAmmoAfterFiring")
   FinishCocking:
	LDHR F 4 Offset(0, 80)
	LDHR E 4 Offset(0, 80)
	LDHR D 5 Offset(0, 80)
	LDHR T 0 A_PlaySound("HuntingRifle/Reload", CHAN_ITEM)
	LDHR H 3 Offset(0, 79)
	LDHR E 0 A_SpawnItemEx("DeadBulletCasing", 16.0, 15.0, 44.0, 0.0, 4.0, 2.0)
	LDHR H 4 Offset(0, 79)
	LDHR G 5 Offset(0, 83)
	LDHR F 8 Offset(0, 82)
	LDHR E 6 Offset(0, 81)
	LDHR D 6 Offset(0, 80)
	LDHR D 4 Offset(0, 70)
	LDHR D 4 Offset(0, 50)
	LDHR D 4 Offset(0, 40)
	LDHR D 4 Offset(0, 30)
	LDHR D 4 Offset(0, 20)
	LDHR T 3 Offset(0, 53)
	LDHR T 3 Offset(0, 50)
	LDHR T 2 Offset(0, 46)
	LDHR T 2 Offset(0, 44)
	LDHR T 2 Offset(0, 42)
	LDHR T 2 Offset(0, 40)
	LDHR T 3 Offset(0, 37)
	LDHR T 3 Offset(0, 35)
	LDHR T 7 Offset(0, 33)
    Goto ZoomToLevel
    
  NoAmmoAfterFiring:
    TNT1 A 0
    TNT1 A 0 A_JumpIfInventory("HuntingRifleClip", 1, "LoadClipAfterFiring")
    LDHR A 1 A_WeaponReady
    goto Ready
   LoadClipAfterFiring:
    LDHR A 2 Offset(0,82)
    LDHR A 3 Offset(-1,82) A_PlaySound ("rifle/cock1", CHAN_WEAPON)
    LDHR A 4 Offset(0,82) 
    LDHR A 3 Offset(-2,84) A_PlaySound ("rifle/load1", CHAN_WEAPON)
    LDHR A 4 Offset(0,82)
    LDHR A 5 Offset(-1,84) 
    LDHR A 6 Offset(-2,83) 
    LDHR A 5 Offset(0,82)
    LDHR A 3 Offset(-3,83)
    LDHR A 4 Offset(0,82)  A_PlaySound("rifle/cock2", CHAN_WEAPON)
    LDHR A 3 Offset(-2,84) 
    LDHR A 4 Offset(0,82)
    LDHR A 5 Offset(-1,84) A_TakeInventory("HuntingRifleClip", 1)
    LDHR A 4 Offset(0,82)
    LDHR A 4 Offset(0,86)
    LDHR A 2 Offset(0,0) A_GiveInventory("HuntingRifleBullet", 5)
    LDHR A 2 Offset(0,82) 
    LDHR A 0 A_Jump(256, "FinishCocking")
    goto FinishCocking    
    
  Zoom4:
    LDHR T 0 
    LDHR T 5 A_ZoomFactor(4.0)
	goto Ready
  Zoom12:
    LDHR T 0 
    LDHR T 5 A_ZoomFactor(12.0)
	goto Ready
  Zoom24:
    LDHR T 0 
    LDHR T 5 A_ZoomFactor(24.0)
	goto Ready
	
  AltFire:
	LDHR T 0 A_GiveInventory("HuntingRifleZoom", 1)
  ZoomToLevel:
    //LDHR T 0 A_JumpIfInventory("HuntingRifleToken2",1,"Ready")
    LDHR T 0 A_JumpIfInventory("HuntingRifleZoom",4,"AltFireDeselect")
	LDHR T 0 A_PlaySound("HuntingRifle/Scope", CHAN_BODY)
	LDHR T 0 A_JumpIfInventory("HuntingRifleZoom",3,"Zoom24")
	LDHR T 0 A_JumpIfInventory("HuntingRifleZoom",2,"Zoom12")
	LDHR T 0 A_JumpIfInventory("HuntingRifleZoom",1,"Zoom4")
    Goto Zoom4
  AltFireDeselect: 
    LDHR T 3 A_ZoomFactor(1.0)
    LDHR T 0 A_TakeInventory("HuntingRifleZoom", 0x7FFFFFFF)
    LDHR T 0 A_TakeInventory("HuntingRifleZoom")
	LDHR T 0 A_PlaySound("HuntingRifle/Scope", CHAN_BODY)
    LDHR T 0 A_ZoomFactor(1.0)
    LDHR T 0 A_SelectWeapon("HuntingRifle")
   Lower:
	TNT1 A 0
    LDHR T 1 A_Lower
    loop
  }
}

ACTOR HuntingRifleZoom : Inventory
{
	Inventory.MaxAmount 4

    +UNDROPPABLE
    +UNTOSSABLE //-- Zandronum 3.0
}

ACTOR NoHuntingRifleGibPuff : BulletPuff
{
  +NOEXTREMEDEATH
}
