actor BeatBoostItem : BaseMM8BDMUseItem 10157
{
//$Category MM8BDM-Assists/Mobility
//$Title Beat Call
//$Sprite WEA3I0
Inventory.RespawnTics 245
inventory.amount 1
inventory.maxamount 1
inventory.pickupmessage "$PU_BEATCALL"
Tag "$TAG_BEATCALL"
inventory.icon "BEATBSTI"
Inventory.PickupSound "item/1up"
scale 2.0
+COUNTITEM
+INVBAR
states
{
SpawnLoop:
WEA3 I -1
wait
Use:
TNT1 A 0 A_JumpIfInventory("PowerBeatBoostUpSpeed",1,"Failed")
TNT1 A 0 A_PlaySoundEx("item/beat","Voice")
TNT1 A 0 A_SpawnItemEx("BeatBoostUp_H")
TNT1 A 0 A_SpawnItemEx("BeatTakeoffFX")
stop
Failed:
TNT1 A 0
fail
}
}

actor BeatBoostItem_Respawn : 8BDMItemRespawn
{
	mass 245
}
actor BeatBoostItem_RespawnShadow : 8BDMItemRespawnShadow
{
	mass 245
	States
	{
	Spawn:
		WEA3 I 0
		goto Super::Spawn
	}
}

actor BeatBoostIsActive : Once {}

actor BeatBoosterHasLanded : PowerUp
{
powerup.duration 6
}

actor PowerBeatBoostUpSpeed : PowerSpeed
{
powerup.duration 20
Speed 2.0
+POWERSPEED.NOTRAIL
}

actor PowerBeatBoostSpeed : PowerSpeed
{
powerup.duration 2
Speed 1.66
+POWERSPEED.NOTRAIL
}

actor BeatTakeoffFX : BasicGraphicEffect
{
    States
    {
    SpawnFrame:
        MDAD HIJ 2
        stop
    }
}

actor BeatBoostWarper_P : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_SpawnItemEx("BeatBoostWarper",-32,0,52)
stop
}
}

actor BeatBoostUp_H// : BasicHelper
{

+MISSILE
-SOLID
+NOCLIP
+NOINTERACTION
+NOGRAVITY
+DONTBLAST
+DONTREFLECT
+THRUACTORS
renderstyle none
radius 2
height 2

States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_GiveToTarget("PowerBeatBoostUpSpeed",1)
TNT1 A 0 A_JumpIfInTargetInventory("BeatBoostIsActive",1,"SpawnAlreadyActive")
TNT1 A 0 A_GiveToTarget("BeatBoostIsActive",1)
TNT1 A 0 A_GiveToTarget("BeatBoostWarper_P",1)
SpawnL:
TNT1 A 1 A_GiveToTarget("BeatBoostUp_P",1)
TNT1 A 0 A_GiveInventory("CutterFlag",1)
TNT1 A 0 A_JumpIfInventory("CutterFlag",9,"SpawnL2")
TNT1 A 0 A_JumpIfInTargetInventory("PowerBeatBoostUpSpeed",1,"SpawnL")
stop
SpawnL2:
TNT1 A 1 A_GiveToTarget("BeatBoostUp2_P",1)
TNT1 A 0 A_GiveInventory("CutterFlag",1)
TNT1 A 0 A_JumpIfInventory("CutterFlag",11,"SpawnEnd")
TNT1 A 0 A_JumpIfInTargetInventory("PowerBeatBoostUpSpeed",1,"SpawnL2")
stop
SpawnAlreadyActive:
TNT1 A 1 A_GiveToTarget("BeatBoostUp_P",1)
TNT1 A 0 A_GiveInventory("CutterFlag",1)
TNT1 A 0 A_JumpIfInventory("CutterFlag",10,"SpawnStop")
TNT1 A 0 A_JumpIfInTargetInventory("PowerBeatBoostUpSpeed",1,"SpawnAlreadyActive")
stop
SpawnEnd:
TNT1 A 0 A_TakeFromTarget("PowerBeatBoostUpSpeed",1)
TNT1 A 0 A_GiveToTarget("PowerBeatBoostSpeed",1)
SpawnWatch:
TNT1 A 0 A_JumpIfInTargetInventory("PlayerPropertyGrounded",1,"SpawnDead")
TNT1 A 0 A_JumpIfInTargetInventory("BeatBoosterHasLanded",1,"SpawnDead")
TNT1 A 0 A_JumpIfInTargetInventory("IsDead",1,"SpawnDead")
TNT1 A 1 A_GiveToTarget("BeatBoostFall_P",1)
loop
SpawnDead:
TNT1 A 0 A_TakeFromTarget("PowerBeatBoostUpSpeed",1)
TNT1 A 0 A_TakeFromTarget("PowerBeatBoostSpeed",1)
TNT1 A 0 A_TakeFromTarget("BeatBoosterHasLanded",1)
TNT1 A 0 A_TakeFromTarget("BeatBoostIsActive",1)
TNT1 A 1
stop
SpawnStop:
TNT1 A 1 A_TakeFromTarget("PowerBeatBoostUpSpeed",1)
stop
}
}

actor BeatBoostUp_P : CustomInventory
{
States
{
Pickup:
TNT1 A 0 //A_SpawnItemEx("BeatBoostFX")
TNT1 A 0 ThrustThingZ(0,60,0,0)//30
stop
}
}
actor BeatBoostUp2_P : CustomInventory
{
States
{
Pickup:
TNT1 A 0 ThrustThingZ(0,30,0,0)
stop
}
}

actor BeatBoostFall_P : CustomInventory
{
States
{
Pickup:
TNT1 A 0 //A_JumpIfInventory("FlightDisableFlag",1,"")
TNT1 A 0 A_JumpIf(z-floorz<=0,"FoundGround")
TNT1 A 0 A_JumpIf(CallACS("core_checkforjump")==1,"FoundGround")
TNT1 A 0 A_JumpIfInventory("RushJetCounter", 1, "FoundGround")
TNT1 A 0 A_JumpIfInventory("RushMarineCounter", 1, "MarineCheck")
TNT1 A 0 A_JumpIf(momz<0,"Hover")
goto ResetSpeed

MarineCheck:
TNT1 A 0 A_JumpIfInventory("IsUnderwater", 1, "FoundGround")
TNT1 A 0 A_JumpIfInventory("HasFeetInWater", 1, "FoundGround")
goto Pickup+5

FoundGround:
TNT1 A 0 A_GiveInventory("BeatBoosterHasLanded",1)
stop

ResetSpeed:
TNT1 A 0 //A_TakeInventory("PowerBeatBoostSpeed",1)
TNT1 A 0 //A_Log("SPEED DOWN")
stop

Hover:
TNT1 A 0 ThrustThingZ(0,6,1,0)//12
TNT1 A 0 A_GiveInventory("PowerBeatBoostSpeed",1)
TNT1 A 0 //A_Log("SPEED UP")
stop
}
}

actor BeatBoostWarper : BasicGraphicEffect
{
+DONTBLAST
reactiontime 20
States
{
SpawnFrame:
TNT1 A 0
Goto SpawnA
SpawnA:
BEAT AA 1 A_Warp(AAPTR_TARGET,-32,0,52,0,WARPF_COPYINTERPOLATION|WARPF_NOCHECKPOSITION)
BEAT A 0 A_JumpIfInTargetInventory("BeatBoostIsActive",1,"SpawnB")
goto Exit
SpawnB:
BEAT BB 1 A_Warp(AAPTR_TARGET,-32,0,52,0,WARPF_COPYINTERPOLATION|WARPF_NOCHECKPOSITION)
BEAT B 0 A_JumpIfInTargetInventory("BeatBoostIsActive",1,"SpawnC")
goto Exit
SpawnC:
BEAT CC 1 A_Warp(AAPTR_TARGET,-32,0,52,0,WARPF_COPYINTERPOLATION|WARPF_NOCHECKPOSITION)
BEAT C 0 A_JumpIfInTargetInventory("BeatBoostIsActive",1,"SpawnA")
goto Exit
Exit:
BEAT C 1 A_JumpIf(true, "Death")
wait
Death:
BEAT C 0 A_SpawnItemEx("BeatCallLeave", 0, 0, 0, 1, 0, 0, 0, SXF_MULTIPLYSPEED|SXF_WEPFXCOLOR)
BEAT C 0
stop
}
}

actor BeatCallLeave : BasicProjectile
{
    +RIPPER
    Radius 4
    Height 4
    damage (0)
    Speed 60
    States
    {
    Spawn:
        BEAT C 0
        BEAT C 1 A_ChangeVelocity(0, 0, 3)
        wait
    }
}



// LEGACY
// ==============================================================================
actor BeatCall : BaseMM8BDMUseItem //10157
{
//$Category MM8BDM-Assists
//$Title Beat Call
//Inventory.RespawnTics 210
inventory.amount 1
inventory.maxamount 1
inventory.pickupmessage "$PU_BEATCALL"
Inventory.PickupSound "item/1up"
scale 2.0
+COUNTITEM
states
{
Spawn:
WEA3 I 1
loop
Pickup:
WEA3 I 0 A_JumpIfInventory("BeatCounter", 1, "Failure")
WEA3 I 0 A_GiveInventory("BeatCallCheck",1)
stop
Failure:
TNT1 A 0
stop
}
}

actor BeatCallCheck : PowerProtection 
{
powerup.duration 0x7FFFFFFD
damagefactor "FALLING", 0.01
damagefactor "FALLINGTAG", 0.01
damagefactor "FIRE", 0.01
damagefactor "DROWNING", 0.01
damagefactor "DROWNINGTAG", 0.01
damagefactor "SLIME", 0.01
damagefactor "SLIMETAG", 0.01
damagefactor "Ice", 0.01
}

actor BeatCallProtection : PowerProtection 
{
powerup.duration 0x7FFFFFFD
damagefactor "FALLING", 0.0
damagefactor "FALLINGTAG", 0.0
damagefactor "FIRE", 0.0
damagefactor "DROWNING", 0.0
damagefactor "DROWNINGTAG", 0.0
damagefactor "SLIME", 0.0
damagefactor "SLIMETAG", 0.0
damagefactor "Ice", 0.0
}

actor BeatWarper : BasicGraphicEffect
{
States
{
SpawnFrame:
BEAT AABBCC 1 A_Warp(AAPTR_TARGET, 0,0,52,0,WARPF_NOCHECKPOSITION )
BEAT C 1 A_JumpIFInTargetInventory("BeatCounter", 1, "Spawn")
BEAT C 0 A_SpawnItemEx("TeleportFogFancy")
stop
}
}

actor BeatCounter : Inventory
{
inventory.amount 1
inventory.maxamount 20
}

/////////////////////////////////////////////////
// LEGACY 
//////////////////////////////////////////////////

actor BeatActivate : CustomInventory
{
inventory.amount 1
inventory.maxamount 1
+INVENTORY.AUTOACTIVATE
states
{
Spawn:
TNT1 A 1
loop
Pickup:
TNT1 A 0 ACS_NamedExecuteAlways("core_beatflight",0,0,1)
TNT1 A 1 A_SpawnItemEx("BeatWarper")
stop
}
}


actor BeatGiver
{
Height 1
Radius 1
+NOINTERACTION
-SOLID
+NOGRAVITY
+MISSILE
States
{
Spawn:
TNT1 AAA 1 A_GiveToTarget("BeatFX1",1)
TNT1 AAA 1 A_GiveToTarget("BeatFX3",1)
TNT1 AAA 1 A_GiveToTarget("BeatFX2",1)
TNT1 A 0 A_TakeFromTarget("BeatCounter",1)
TNT1 A 0 A_JumpIfInTargetInventory("SpinTime",1,"Death2")
TNT1 A 0 A_JumpIfInTargetInventory("BeatCounter",5,"Spawn")
TNT1 A 0 A_TakeFromTarget("BeatCallCheck",1)
TNT1 A 0 A_JumpIfInTargetInventory("BeatCounter",1,"Spawn")
TNT1 A 0 A_TakeFromTarget("BeatCallCheck",1)
TNT1 A 0 A_TakeFromTarget("BeatCounter",100)
TNT1 A 0 ACS_NamedExecuteWithResult("core_flyplayer",ACS_NamedExecuteWithResult("core_gettarget")-999,0) // $WeapFixes
stop
Death2:
TNT1 A 0 A_TakeFromTarget("BeatCallCheck",1)
TNT1 A 0 A_TakeFromTarget("BeatCounter",100)
TNT1 A 0 ACS_NamedExecuteWithResult("core_flyplayer",ACS_NamedExecuteWithResult("core_gettarget")-999,0) // $WeapFixes
stop
}
}


actor BeatFX1 : CustomInventory
{
inventory.amount 1
inventory.maxamount 1
+AUTOACTIVATE
States
{
Spawn:
TNT1 A 1
loop
Use:
TNT1 A 1 //SetPlayerProperty(0,1,3)
TNT1 A 1 A_SpawnItemEx("BeatFeet1",0,0,52,0,0,0,0,SXF_NOCHECKPOSITION)
stop
}
}

actor BeatFX2 : CustomInventory
{
inventory.amount 1
inventory.maxamount 1
+AUTOACTIVATE
States
{
Spawn:
TNT1 A 1
loop
Use:
TNT1 A 1 //SetPlayerProperty(0,1,3)
TNT1 A 1 A_SpawnItemEx("BeatFeet2",0,0,52,0,0,0,0,SXF_NOCHECKPOSITION)
stop
}
}

actor BeatFX3 : CustomInventory
{
inventory.amount 1
inventory.maxamount 1
+AUTOACTIVATE
States
{
Spawn:
TNT1 A 1
loop
Use:
TNT1 A 1 //SetPlayerProperty(0,1,3)
TNT1 A 1 A_SpawnItemEx("BeatFeet3",0,0,52,0,0,0,0,SXF_NOCHECKPOSITION)
stop
}
}

actor BeatFeet1 : BasicGraphicEffect
{
States
{
SpawnFrame:
BEAT A 2
stop
}
}

actor BeatFeet2 : BasicGraphicEffect
{
States
{
SpawnFrame:
BEAT B 2
stop
}
}

actor BeatFeet3 : BasicGraphicEffect
{
States
{
SpawnFrame:
BEAT C 2
stop
}
}