actor BassBusterBoss : BaseMM8BDMWep_CBM
{
tag "$TAGC_0F"
dropitem "JetUpgradeGiverDropped"

Weapon.AmmoUse 1
Weapon.AmmoGive 3
Weapon.SlotNumber 1
Inventory.Pickupmessage "$PU_BASSBUSTER"
Obituary "$OB_BASSBUSTER"
States
{
Spawn:
C_00 F 1
loop
Ready:
BASB B 0 A_JumpIfInventory("Once",1,"Ready2")
BASB B 0 ACS_ExecuteAlways(981,0,0)
BASB B 0 A_GiveInventory("Once",1)
Goto Ready2
Ready2:
BASB B 0 ACS_ExecuteAlways(998,0,DYE_BASSC)
BASB B 0 A_GiveInventory("AdaptorFlag")
BASB B 1 A_WeaponReady
Goto Ready2+2
Deselect:
BASB B 0 A_TakeInventory("SlideVivifyFlag",9)
BASB BBBBBBBBBBBBBBBBBBBBBB 0 A_Lower
BASB B 1 A_Lower
goto Deselect+1
Select:
BASB BBBBBBBBBBBBBBBBBBBBBB 0 A_Raise
BASB B 1 A_Raise
Loop
Fire:
BASB B 0 A_PlaySoundEx("weapon/mbuster","Weapon")
//BASB B 0 A_FireCustomMissile("BassShot",random(-3,3),0,8,0)
BASB B 0 A_GiveInventory("BassMain_CI",1)
BASB C 2
BASB DB 1
BASB B 0 A_Refire
goto Ready2+2
Hold:
Goto Fire

User1Fire:
BASB B 0 A_PlaySoundEx("weapon/mbuster","Weapon")
BASB B 0 A_GiveInventory("BassMain_CI",1)
BASB C 2
BASB DB 1
goto Ready2+2

Altfire:
BASB B 0 A_JumpIf(ACS_NamedExecuteWithResult("cbm_user1_check")==1, "User1Fire")
BASB B 0 A_JumpIfInventory("BassUpgradeFlag",1,"SlideSlide")
BASB B 0 A_JumpIf(z-floorz==0,"SlideSlide") //A_JumpIf(momz==0, "SlideSlide")
goto Ready2+2
SlideSlide:
BASD B 0 A_GiveInventory("SlideVivifyFlag",1)
BASD B 0 A_Refire(1)
BASD B 0 A_PlaySoundEx("weapon/chargekick","Weapon")
BASD B 0 SetPlayerProperty(0,1,0)
BASD B 0 ACS_ExecuteAlways(CORE_ACS_191,0,APROP_Speed,85,100)
BASD B 2 A_GiveInventory("CopySlideThrust_P",1)
BASD C 8
BASD C 5 SetPlayerProperty(0,0,0)
BASD C 5 ACS_ExecuteAlways(CORE_ACS_191,0,APROP_Speed,1,1)
BASD C 0 A_TakeInventory("SlideVivifyFlag",1)
BASD B 0 A_Refire
BASD B 5
BASD B 0
goto Ready2+2
}
}

actor BassShotB : FastProjectile
{
Translation "204:204=215:215"
PROJECTILE
damagetype "Bass_Shot"
Obituary "$OB_BASSBUSTER"
+FORCEXYBILLBOARD
+BRIGHT
Damage (50)
Speed 64
radius 5
height 5
scale 2.5
States
{
Spawn:
TNT1 A 1
W_0D B 1
wait
}
}
actor BassShotBB : BassShotB{translation "204:204=205:205"}
actor BassShotBR : BassShotB{translation "204:204=171:171"}
actor BassShotBO : BassShotB{translation "204:204=104:104"}
actor BassShotBP : BassShotB{translation "204:204=229:229"}

actor BassMain_CI : TeamColor_CI
{
states
{
FireX:
TNT1 A 0 A_FireCustomMissile("BassShotB",random(-3,3),0,8,0)
goto Done
FireB:
TNT1 A 0 A_FireCustomMissile("BassShotBB",random(-3,3),0,8,0)
goto Done
FireR:
TNT1 A 0 A_FireCustomMissile("BassShotBR",random(-3,3),0,8,0)
goto Done
FireO:
TNT1 A 0 A_FireCustomMissile("BassShotBO",random(-3,3),0,8,0)
goto Done
FireP:
TNT1 A 0 A_FireCustomMissile("BassShotBP",random(-3,3),0,8,0)
goto Done
}
}








actor BassCoil : BasicItemPickup
{
inventory.pickupmessage "$PU_BASSCOIL"
Tag "$TAG_BASSCOIL"
inventory.icon "TrebCoil"
states
{
Spawn:
TRBB W 1
loop
Use:
WEAP B 0 A_PlaySoundEx("item/refill","Voice")
WEAP B 0 A_SpawnItemEx("BCoilTeleport",40,0,256,0,0,-32,0,32)
stop
}
}

actor BCoilTeleport : PCoilTeleport
{
Translation "192:192=62:62","198:198=95:95"
states
{
Spawn:
TFOG P 0
TFOG P 6
TFOG P 0 A_ChangeFlag("NOINTERACTION", 0)
TFOG PPPPPPPPPP 1 A_CheckFloor("Next")
Goto Next
Next:
TFOG P 0 //A_ChangeFlag("NOGRAVITY", 0)
Goto Death
Death:
TFOG P 0 A_SpawnItemEx("BCoil",0,0,0,0,0,momz,0,33)
stop
}
}

actor BCoil : PCoil
{
states
{
Look:
TFOG Q 0 A_ChangeFlag("NOCLIP",0)
TFOG QR 2
TRBL BBBCCC 1 A_Chase
TRBL B 0 A_CountDown
Goto Look+3
Melee:
TRBL E 1 A_JumpIfInTargetInventory("StrongSpring",1,"Melee2")
TRBL E 18 A_GiveToTarget("SpringActivate",1)
TRBL A 0 A_Die
Goto Death
Melee2:
TRBL E 18 A_GiveToTarget("SpringActivate2",1)
TRBL E 0 A_Die
Goto Death
Death:
TRBL E 0 A_SpawnItemEx("BassItemDeath",0,0,0,0,0,0,0,33)
stop
}
}

actor BassItemDeath : ProtoItemDeath
{
Translation "192:192=62:62","198:198=95:95"
}

actor BassJet : BasicItemPickup
{
inventory.pickupmessage "$PU_BASSJET"
Tag "$TAG_BASSJET"
inventory.icon "TrebJet"
states
{
Spawn:
TRBB V 1
loop
Use:
TNT1 A 0 A_PlaySoundEx("item/refill","Voice")
TNT1 A 0 A_JumpIfInventory("BassJetCounter",1,2)
TNT1 A 0 A_SpawnItemEx("BCoilTeleport2",40,0,256,0,0,-32,0,32)
stop
TNT1 A 0 A_GiveInventory("BassJetCounter",8)
stop
}
}

actor BCoilTeleport2 : BCoilTeleport
{
states
{
Spawn:
TFOG P 0
TFOG P 6
TFOG P 0 A_ChangeFlag("NOINTERACTION", 0)
TFOG PPPPPPPPPP 1 A_CheckFloor("Next")
Goto Next
Next:
TFOG P 0 //A_ChangeFlag("NOGRAVITY", 0)
Goto Death
Death:
TFOG P 0 A_SpawnItemEx("BassJetter",0,0,0,0,0,momz,0,33)
stop
}
}

actor BassJetter : BCoil
{
+DONTREFLECT
meleerange 40
states
{
Look:
TFOG P 0
goto Melee
OldLook:
TFOG Q 0 A_ChangeFlag("NOCLIP",0)
TFOG QR 2
TRBL BBBCCC 1 A_Chase
TRBL B 0 A_CountDown
Goto OldLook+3
Melee:
TNT1 A 0 A_JumpIfInTargetInventory("BassJetCounter",1,"Refill")
TNT1 A 0 A_GiveToTarget("BassJetterActivate_P")
TNT1 A 1
stop
Refill:
TNT1 A 0 A_GiveToTarget("BassJetCounter",8)//20
stop
Death:
TNT1 A 0 A_SpawnItemEx("BassItemDeath",0,0,0,0,0,0,0,33)
stop
}
}

actor BassJetCounter : Inventory
{
inventory.amount 1
inventory.maxamount 8//20
}

actor BassJetterActivate_P : CustomInventory
{
states
{
Pickup:
TNT1 A 0 A_GiveInventory("BassJetCounter",8)
TNT1 A 0 A_SpawnItemEx("BassJetterWatcher_H",0,0,0,0,0,0,0,32)
TNT1 A 0 A_SpawnItemEx("BassJetterWarper")
TNT1 A 0 ACS_NamedExecuteAlways("core_flyplayer",0,0,2)
stop
}
}
actor BassJetterDeactivate_P : CustomInventory
{
states
{
Pickup:
TNT1 A 0 ACS_NamedExecuteAlways("core_flyplayer",0,0,0)
stop
}
}

actor BassJetterWatcher_H : BasicHelper
{
+SERVERSIDEONLY
+NOTIMEFREEZE
States
{
Spawn:
TNT1 A 0
TNT1 A 35
TNT1 A 0 A_TakeFromTarget("BassJetCounter",1)
TNT1 A 0 A_JumpIfInTargetInventory("SpinTime",1,"Death2")
TNT1 A 0 A_JumpIfInTargetInventory("InBoat",1,"Death2")
TNT1 A 0 A_JumpIfInTargetInventory("BassJetCounter",1,"Spawn")
TNT1 A 0 A_GiveToTarget("BassJetterDeactivate_P")
stop
Death2:
TNT1 A 0 A_TakeFromTarget("BassJetCounter",8)
TNT1 A 0 A_GiveToTarget("BassJetterDeactivate_P")
stop
}
}

actor BassJetterWarper
{
Translation "192:192=62:62","198:198=95:95"
-SOLID
+CLIENTSIDEONLY
+NOGRAVITY
+NOINTERACTION
+MISSILE
Scale 2.5
States
{
Spawn:
TRBL JJJJKKKK 1 A_Warp(AAPTR_TARGET, -10,0,0,0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
TRBL K 1 A_JumpIFInTargetInventory("BassJetCounter", 1, "Spawn")
TRBL K 0 A_SpawnItemEx("BassItemDeath")
stop
}
}

actor BassMarine : BasicItemPickup
{
inventory.pickupmessage "$PU_BASSMARINE"
Tag "$TAG_BASSMARINE"
inventory.icon "TrebSubM"
states
{
Spawn:
TRBB Y 1
loop
Use:
TNT1 A 0 A_PlaySoundEx("item/refill","Voice")
TNT1 A 0 A_JumpIfInventory("BassMarineCounter",1,2)
TNT1 A 0 A_SpawnItemEx("BassMarine3Teleport",40,0,256,0,0,-32,0,32)
stop
TNT1 A 0 A_GiveInventory("BassMarineCounter",20)
stop
}
}

actor BassMarine3Teleport : ProtoMarine3Teleport
{
Translation "192:192=62:62","198:198=95:95"
states
{
Spawn:
TFOG Q 0
TFOG Q 7
TFOG Q 0 A_SpawnItemEx("BassMarine3",0,0,0,0,0,0,0,33)
stop
}
}

actor BassMarine3 : BassJetter
{
states
{
Spawn:
TNT1 A 0
TNT1 A 0 A_JumpIfInTargetInventory("BassMarineCounter",1,"Refill")
TNT1 A 0 A_GiveToTarget("BassMarineActivate_P")
TNT1 A 1
Goto FlyCheck
Refill:
TNT1 A 0 A_GiveToTarget("BassMarineCounter",20)
stop
Death:
TNT1 A 0 A_SpawnItemEx("BassItemDeath",0,0,0,0,0,0,0,33)
stop
}
}

actor BassMarineCounter : Inventory
{
inventory.amount 1
inventory.maxamount 20//80
}

actor BassMarineActivate_P : CustomInventory
{
states
{
Pickup:
TNT1 A 0 A_GiveInventory("BassMarineCounter",20) 
TNT1 A 0 A_SpawnItemEx("BassMarineWatcher_H",0,0,0,0,0,0,0,32)
TNT1 A 0 A_SpawnItemEx("BassMarineWarper")
stop
}
}

actor BassMarineWatcher_H : BasicHelper
{
+SERVERSIDEONLY
+NOTIMEFREEZE
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_SetArg(2,35)
TNT1 A 0 A_SetArg(1,ACS_ExecuteWithResult(257)-999)//TID
SpawnWait:
TNT1 A 0 A_JumpIfInTargetInventory("SpinTime",1,"Death2")
TNT1 A 0 A_JumpIfInTargetInventory("InBoat",1,"Death2")
TNT1 A 0 A_JumpIfInTargetInventory("IsUnderwater",1,"BeginMarine")
TNT1 A 1
TNT1 A 0 A_JumpIfInTargetInventory("BassMarineCounter",1,"SpawnWait")
stop
BeginMarine:
TNT1 A 0 ACS_NamedExecuteAlways("core_flyplayer",0,Args[1],2)
MarineWait:
TNT1 A 0 A_JumpIfInTargetInventory("SpinTime",1,"Death3")
TNT1 A 0 A_JumpIfInTargetInventory("InBoat",1,"Death3")
TNT1 A 1 A_SetArg(2,Args[2]-1)
TNT1 A 0 A_JumpIf(Args[2]<=0,"MarineTake")
TNT1 A 0 A_JumpIfInTargetInventory("BassMarineCounter",1,"MarineCheck")
goto Death3
MarineTake:
TNT1 A 0 A_TakeFromTarget("BassMarineCounter",1)
TNT1 A 0 A_SetArg(2,35)
goto MarineWait+4
MarineCheck:
TNT1 A 0 A_JumpIfInTargetInventory("IsUnderwater",1,"MarineWait")
TNT1 A 1 ACS_NamedExecuteAlways("core_flyplayer",0,Args[1],0)
TNT1 A 1 A_GiveToTarget("ProtoMarineExitWater_P")
goto SpawnWait

Death3:
TNT1 A 0 ACS_NamedExecuteAlways("core_flyplayer",0,Args[1],0)
Death2:
TNT1 A 0 A_TakeFromTarget("BassMarineCounter",9999)
stop
}
}

actor BassMarineWarper : BassJetterWarper
{
States
{
Spawn:
TRBL N 1 A_JumpIFInTargetInventory("IsUnderwater",1,"Marine")
NotUnderwater:
TNT1 A 1 A_JumpIFInTargetInventory("IsUnderwater",1,"MarineStart")
TNT1 A 1 A_JumpIFInTargetInventory("BassMarineCounter",1,"NotUnderwater")
stop
MarineStart:
TNT1 A 1 A_Warp(AAPTR_TARGET,0,0,0,0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
Marine:
TRBL MMMNNN 1 A_Warp(AAPTR_TARGET, 0,0,-16,0,WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
TRBL N 1 A_JumpIFInTargetInventory("BassMarineCounter",1,"Spawn")
TRBL N 0 A_SpawnItemEx("BassItemDeath")
stop
}
}
