// ============================================================================
// The Open Deck is basically a crate chooser placed into your inventory.
// When activated, it lets you pick an arbitrary crate effect, sans a few
// game-breakers. The rarest effect of the powerup crate.
actor OpenDeck : InventoryItem {
	Inventory.PickupMessage "You got the Open Deck!"
	Inventory.MaxAmount 1
	Inventory.Icon "odekicon"
	Tag "Open Deck"
	States {
	Spawn:
		TNT1 A 0
		stop
	Use:
		TNT1 A 0 ACS_ExecuteAlways (951, 0, 5)
		fail
	}
}

actor CrateChooser : AOWWeapon {
    Weapon.BobSpeed 1.75
    Weapon.BobRangeX 0.2
    Weapon.BobRangeY 0.4
    Weapon.BobStyle Alpha
	+WEAPON.AMMO_OPTIONAL
	+WEAPON.NOAUTOFIRE
	+WEAPON.CHEATNOTWEAPON
	Obituary "$OB_DEFAULT"
	Weapon.PreferredSkin "MarineFist"
	DropItem "CrateChooserDrop"
	States {
	Select:
		ODEK A 1 offset (90,100)
		ODEK A 1 offset (80,89)
		ODEK A 1 offset (70,79)
		ODEK A 1 offset (60,70)
		ODEK A 1 offset (50,62)
		ODEK A 1 offset (40,55)
		ODEK A 1 offset (30,49)
		ODEK A 1 offset (20,44)
		ODEK A 1 offset (15,40)
		ODEK A 1 offset (10,37)
		ODEK A 1 offset (5,34)
		ODEK A 1 offset (0,0)
		TNT1 A 0 A_TakeInventory("SelectAnimation",1)
		goto ready
	Deselect:
	    TNT1 A 0 A_TakeInventory("ActionFragGrenade",1)	
        TNT1 A 0 A_TakeInventory("ActionFlashbang",1)
        TNT1 A 0 A_TakeInventory("ActionRemoteC4",1)	
        TNT1 A 0 A_TakeInventory("ActionMeleeAttack",1)
		TNT1 A 0 A_TakeInventory("ActionReload",1)	
	    ODEK A 1 offset (4,34)
		ODEK A 1 offset (8,40)
		ODEK A 1 offset (16,49)
		ODEK A 1 offset (24,62)
		ODEK A 1 offset (32,79)
		ODEK A 1 offset (40,100)
		TNT1 A 0 offset (1, 33)
		TNT1 A 0 A_TakeInventory ("CrateChooser", 1)
		TNT1 A 1 A_Lower
		wait
	Ready:
	    TNT1 A 0 A_JumpIfInventory("SelectAnimation",1,"Select")
		TNT1 A 0 A_JumpIfInventory("ActionFragGrenade",1,"UseFragGrenade")
		TNT1 A 0 A_JumpIfInventory("ActionFlashbang",1,"UseFlashbang")
		TNT1 A 0 A_JumpIfInventory("ActionRemoteC4",1,"UseRemoteC4")
		TNT1 A 0 A_JumpIfInventory("ActionMeleeAttack",1,"UseMeleeAttack")
		ODEK A 1 A_WeaponReady
		Loop
	Rejected:
		ODEK A 18 A_WeaponReady (WRF_NOPRIMARY)
		goto Ready
	Fire:
		TNT1 A 0 A_JumpIfInventory ("InMenu", 1, "Ready")
		ODEK A 0 A_JumpIf (ACS_ExecuteWithResult (955) == 0, "Rejected")
		ODEK A 0 A_GiveInventory ("CrateChooserFiring", 1)
	    ODEK A 1 offset (4,34)
		ODEK A 1 offset (8,40)
		ODEK A 1 offset (16,49)
		ODEK A 1 offset (24,62)
		ODEK A 1 offset (32,79)
		ODEK A 1 offset (40,100)
		TNT1 A 0 offset (1, 33)
		TNT1 A 18 A_WeaponReady (WRF_NOSWITCH|WRF_NOPRIMARY|WRF_NOBOB) // Allow the user to cancel this
		TNT1 A 0 A_TakeInventory ("CrateChooserFiring", 1)
		TNT1 A 8 ACS_ExecuteAlways (955, 0, 2)
		TNT1 A 0 A_JumpIfInventory ("CrateChooserFailure", 1, "Failure")
		TNT1 A 0 A_TakeInventory ("CrateChooser", 1)
		goto Ready
	Failure:
		ODEK A 1 offset (0, 128)
		ODEK A 1 offset (0, 120)
		ODEK A 1 offset (0, 112)
		ODEK A 1 offset (0, 104)
		ODEK A 1 offset (0, 96)
		ODEK A 1 offset (0, 88)
		ODEK A 1 offset (0, 80)
		ODEK A 1 offset (0, 72)
		ODEK A 1 offset (0, 64)
		ODEK A 1 offset (0, 56)
		ODEK A 1 offset (0, 48)
		ODEK A 1 offset (0, 40)
		ODEK A 1 offset (0, 32)
		ODEK A 0 A_TakeInventory ("CrateChooserFiring", 1)
		ODEK A 0 A_TakeInventory ("CrateChooserFailure", 1)
		goto Ready
	AltFire:
		ODEK A 0 A_JumpIfInventory ("InMenu", 1, "Ready")
		ODEK A 0 A_JumpIfInventory ("CrateChooserFiring", 1, "Failure")
		ODEK A 1 ACS_ExecuteAlways (955, 0, 1)
		goto Ready
	Spawn:
		TNT1 A 0
		stop
	}
}

actor CrateChooserDrop : AOWWeapon {
	states {
	Spawn:
		TNT1 AA 0 A_SpawnItemEx ("PowerupCrate")
		stop
	}
}

actor CrateChooserRotation : Inventory {
	Inventory.MaxAmount 100
}

actor CrateChooserFiring : Inventory {}
actor CrateChooserGo : Inventory {}
actor CrateChooserFailure : Inventory {}