//LOST BUBBLEMAN REWORK:
//	Altfire damage decreased: 23 > 20
//	Charged altfire now blocks projectiles
//	Charged altfire speed increased: 10 > 18
//	Charged altfire no longer does a full freeze, instead raises victim slowy and applies a damage and speed debuff (50% and 25% respectively) 
//	Now has a synthfire: Shoots a slow version of altfire (8 speed)
//	Now has a thirdfire: fires a bubble similar to the copyweapon, it travels much faster

Actor Bubbleman : VCBaseClass
{
Player.ScoreIcon "BUBBMUGS"
player.startitem "BaseFlagPack", 1
player.startitem "IsFromMM2"
player.soundclass "bubblemanc"
Player.ViewHeight 45
player.forwardmove 0.75, 0.75
player.sidemove 0.73, 0.73
player.displayname "Bubbleman"
player.startitem "BubbleLeadBoss"
player.startitem "BubbleJumpAmmo",4
player.startitem "Base28Ammo", 28
player.startitem "BubblemanSwimAmmo",240
player.startitem "UltimateAttackItem4", 1
player.startitem "UltSoundWatcherSpawn4"
States
{
Spawn:
BUBM A 0
BUBM B 1
BUBM A 0 A_JumpIfInventory("BubbleLeadAnim",1,"Missile2")
BUBM A 1 A_JumpIf(z-floorz>0, "Jumping")
Goto Spawn+2
See:
BUBM BBBBBCCCCCDDDDDEEEEE 1 A_JumpIf(z-floorz>0, "Jumping")
Goto Spawn
Jumping:
BUBM I 1 A_JumpIf(z-floorz<=0, "Spawn")
BUBM I 0 A_JumpIfInventory("BubbleLeadAnim",1,"Missile2")
BUBM I 0 A_JumpIfInventory("BubblemanUltFlag",1,2)
BUBM I 0 A_JumpIfInventory("IsUnderWater",1,1)
loop
BUBM IIII 1 A_JumpIf(z-floorz<=0, "Spawn")
BUBM JJJJ 1 A_JumpIf(z-floorz<=0, "Spawn")
Goto Jumping
Missile:
BUBM F 0 A_JumpIfInventory("BubbleLeadAnim",1,"Missile2")
BUBM F 1 A_JumpIf(z-floorz>0, "JumpingMissile")
BUBM F 0 A_JumpIfInventory("BubbleLeadAnim",1,"Missile2")
BUBM F 1 A_JumpIf(z-floorz>0, "JumpingMissile")
BUBM F 0 A_JumpIfInventory("BubbleLeadAnim",1,"Missile2")
BUBM F 1 A_JumpIf(z-floorz>0, "JumpingMissile")
BUBM F 0 A_JumpIfInventory("BubbleLeadAnim",1,"Missile2")
BUBM F 1 A_JumpIf(z-floorz>0, "JumpingMissile")
BUBM F 0 A_JumpIfInventory("BubbleLeadAnim",1,"Missile2")
BUBM F 1 A_JumpIf(z-floorz>0, "JumpingMissile")
BUBM GGGG 1 A_JumpIf(z-floorz>0, "JumpingMissile")
Goto Spawn+1
Missile2:
BUBM MMMMMMMMM 1 A_JumpIf(z-floorz>0, "JumpingMissile2")
goto Spawn+1
JumpingMissile:
BUBM K 0 A_JumpIfInventory("IsUnderWater",1,"SJumpingMissile") BUBM K 0 A_JumpIfInventory("BubblemanUltFlag",1,"SJumpingMissile")
BUBM K 0 A_JumpIfInventory("BubbleLeadAnim",1,"JumpingMissile2")
BUBM K 1 A_JumpIf(z-floorz<=0, "Missile")
BUBM K 0 A_JumpIfInventory("BubbleLeadAnim",1,"JumpingMissile2")
BUBM K 1 A_JumpIf(z-floorz<=0, "Missile")
BUBM K 0 A_JumpIfInventory("BubbleLeadAnim",1,"JumpingMissile2")
BUBM K 1 A_JumpIf(z-floorz<=0, "Missile")
BUBM K 0 A_JumpIfInventory("BubbleLeadAnim",1,"JumpingMissile2")
BUBM K 1 A_JumpIf(z-floorz<=0, "Missile")
BUBM K 0 A_JumpIfInventory("BubbleLeadAnim",1,"JumpingMissile2")
BUBM K 1 A_JumpIf(z-floorz<=0, "Missile")
BUBM KKKK 1 A_JumpIf(z-floorz<=0, "Missile")
Goto Jumping
SJumpingMissile:
BUBM K 0 A_JumpIfInventory("BubbleLeadAnim",1,"SJumpingMissile2")
BUBM K 1 A_JumpIf(z-floorz<=0, "Missile")
BUBM K 0 A_JumpIfInventory("BubbleLeadAnim",1,"SJumpingMissile2")
BUBM K 1 A_JumpIf(z-floorz<=0, "Missile")
BUBM K 0 A_JumpIfInventory("BubbleLeadAnim",1,"SJumpingMissile2")
BUBM K 1 A_JumpIf(z-floorz<=0, "Missile")
BUBM K 0 A_JumpIfInventory("BubbleLeadAnim",1,"SJumpingMissile2")
BUBM K 1 A_JumpIf(z-floorz<=0, "Missile")
BUBM LLLL 1 A_JumpIf(z-floorz<=0, "Missile")
Goto Jumping+4
JumpingMissile2:
BUBM N 0 A_JumpIfInventory("IsUnderWater",1,"SJumpingMissile2")BUBM N 0 A_JumpIfInventory("BubblemanUltFlag",1,"SJumpingMissile2")
BUBM NNNNNNNN 1 A_JumpIf(z-floorz<=0, "Missile")
Goto Jumping
SJumpingMissile2:
BUBM NNNNOOOO 1 A_JumpIf(z-floorz<=0, "Missile")
Goto Jumping+4
ClassTimeStop:
PLAY A 0 SetPlayerProperty(0,1,4)
PLAY A 0 ACS_Execute(528,0)
BUBM AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_Stop
PLAY A 0 SetPlayerProperty(0,0,4)
Goto pain+1
ClassPain:
BUBM HHHHHHHHHH 2 A_SpawnItem("PainFX",0,3)
Goto Spawn+1
ClassDeath:
BUBM ] 12 ACS_ExecuteAlways(999,0,0)
BUBM ] 8 A_SpawnItemEx("MM2Death")
BUBM ] 0 A_PlayerScream
NOFX A 0 A_SpawnItemEx("FakeDeathFXMM2",0,0,32)
NOFX A 1 A_CheckPlayerDone
wait
ClassIceDeath:
BUBM A 35
NOFX A 0 A_SpawnItemEx("FrozenDeathFX",0,0,16)
NOFX A 1 A_CheckPlayerDone
wait
WeaponGetM:
CUTM H 0 A_JumpIfInTargetInventory("BubbleLeadWepM",1,2)
CUTM H 0 A_GiveToTarget("WeaponGetter")
CUTM H 0 A_GiveToTarget("BubbleLeadWepM")
goto ClassDeath
}
}

Actor BubblemanOPPleaseNerf : PowerProtection
{
	Powerup.Duration 0x7FFFFFFF
	DamageFactor "BubbleLead", 0.0
}

Actor BubblemanHealThing : CustomInventory
{
	States
	{
		Pickup:
		TNT1 A 0 A_JumpIfInventory("MM2Healing_P",1,"Nope")
		TNT1 A 0 A_GiveInventory("MM2Healing_P",1)
		TNT1 A 0 A_JumpIf(CheckClass("Bubbleman"),"Success")
		Goto Nope
		Success:
		TNT1 A 0 ACS_NamedExecuteAlways("VC_MM2Heal",0)
		Nope: TNT1 A 0
		Stop
	}
}

Actor BubblemanSwimAmmo : Ammo
{
	Inventory.Amount 1
	Inventory.MaxAmount 240
	+INVENTORY.IGNORESKILL
}

Actor NoMultiJump : Inventory
{
	Inventory.Amount 1
	Inventory.MaxAmount 1
}

Actor BubbleLeadAnim : Powerup
{
	Powerup.Duration 10
}

Actor BubbleLeadBoss : VCBaseWeapon
{
Weapon.AmmoGive 28
Weapon.AmmoType "Base28Ammo"
Weapon.AmmoUse 0
Obituary "$OB_BUBBLEMAN1"
+WEAPON.NOAUTOAIM
States
{
Deselect:
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
HEMD A 1 A_Lower
Loop
Select:
TNT1 A 0 A_GiveInventory("BubblemanOPPleaseNerf",1)
TNT1 A 0 A_GunFlash
TNT1 A 0 ACS_ExecuteAlways(991,0,742)
SelectX:
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
HEMD A 1 A_Raise
Loop

Ready:
BUBA A 1 A_WeaponReady BUBA A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") BUBA A 0 A_JumpIf(CallACS("VC_CheckBtn",3)==3 && CallACS("VC_AmmoCheck",0,9) == 0,"User1")
BUBA A 1 A_WeaponReady BUBA A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") BUBA A 0 A_JumpIf(CallACS("VC_CheckBtn",3)==3 && CallACS("VC_AmmoCheck",0,9) == 0,"User1")
BUBA A 1 A_WeaponReady BUBA A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack") BUBA A 0 A_JumpIf(CallACS("VC_CheckBtn",3)==3 && CallACS("VC_AmmoCheck",0,9) == 0,"User1")
BUBA A 0 A_GiveInventory("Base28Ammo",1)
Goto Ready

UltimateAttack:
TNT1 A 0 ACS_NamedExecuteAlways("VC_UltimateText",0,17)
TNT1 A 0 A_GiveInventory("BubblemanUlt_CI",1)
BUBA A 1
Goto Ready

Fire:
BUBA A 0 A_GiveInventory("BubblemanMain_CI")
BUBA BCCB 2
BUBA A 3
Goto Ready

Altfire:
RATU A 0 A_JumpIfInventory("NoAltfire",1,"NoAmmo")
BUBA A 0 A_JumpIfInventory("BubblemanUltFlag",1,"Ready")
BUBA A 0 A_JumpIfInventory("Base28Ammo",14,"Altfire.Charge")
BUBA A 0 A_JumpIfInventory("Base28Ammo",3,"Altfire.Uncharged")
Goto NoAmmo

NoAmmo:
BUBA A 3 A_GiveInventory("Base28Ammo",1)
goto Ready

Altfire.Reset1:
BUBA AA 0 A_ClearRefire
BUBA A 0 A_TakeInventory("BubbleCharge",999)
Goto Altfire.Uncharged
Altfire.Reset2:
BUBA AA 0 A_ClearRefire
BUBA A 0 A_TakeInventory("BubbleCharge",999)
Goto Altfire.Charged
Altfire.Reset3:
BUBA AA 0 A_ClearRefire
BUBA A 0 A_TakeInventory("BubbleCharge",999)
Goto Altfire.Charged2

Altfire.Uncharged:
BUBA A 0 A_JumpIfInventory("Base28Ammo",3,3)
BUBA AA 0 A_ClearRefire
Goto Ready
TOAD A 0 A_GiveInventory("ToadChargeDamageTake")
BUBA A 0 A_PlaySoundEx("weapon/bubblemanlead","Weapon")
BUBA J 1 A_GiveInventory("BubblemanAlt_CI",1)
BUBA J 1 Offset(0, 48)
BUBA J 1 Offset(0, 56)
BUBA K 1 Offset(0, 60)
BUBA L 2 Offset(0, 62)
BUBA J 1 Offset(0, 60)
BUBA J 1 Offset(0, 56)
BUBA J 1 Offset(0, 48)
BUBA J 1 Offset(0, 40)
BUBA J 1 Offset(0, 36)
BUBA A 1 A_WeaponReady(14)
BUBA A 0 A_Refire("Altfire.Uncharged")
BUBA A 0 A_JumpIf(CallACS("VC_CheckBtn",3)==3 && CallACS("VC_AmmoCheck",0,9) == 0,"User1") 
BUBA AA 0 A_ClearRefire
goto Ready

Altfire.Charged:
TOAD A 0 A_GiveInventory("ToadChargeDamageTake")
BUBA A 0 A_PlaySoundEx("weapon/bubblemanlead","Weapon")
BUBA A 0 A_PlaySoundEx("weapon/wrapfire","Auto")
BUBA J 2 A_GiveInventory("BubblemanAlt2_CI",1)
BUBA J 2 Offset(0, 48)
BUBA J 2 Offset(0, 56)
BUBA K 2 Offset(0, 60)
BUBA L 2 Offset(0, 62)
BUBA J 2 Offset(0, 60)
BUBA J 1 Offset(0, 56)
BUBA J 1 Offset(0, 48)
BUBA J 1 Offset(0, 40)
BUBA J 1 Offset(0, 36)
BUBA A 3 A_WeaponReady(14)
goto Ready

Altfire.Charged2:
TOAD A 0 A_GiveInventory("ToadChargeDamageTake")
BUBA A 0 A_PlaySoundEx("weapon/bubblemanlead","Weapon")
BUBA A 0 A_PlaySoundEx("weapon/wrapfire","Auto")
BUBA J 2 A_GiveInventory("BubblemanAlt3_CI",1)
BUBA J 2 Offset(0, 48)
BUBA J 2 Offset(0, 56)
BUBA K 2 Offset(0, 60)
BUBA L 2 Offset(0, 62)
BUBA J 2 Offset(0, 60)
BUBA J 1 Offset(0, 56)
BUBA J 1 Offset(0, 48)
BUBA J 1 Offset(0, 40)
BUBA J 1 Offset(0, 36)
BUBA A 3 A_WeaponReady(14)
goto Ready


Altfire.Charge:
BUBA A 0 Offset(0,42)
Altfire.ChargeHold:
TOAD A 0 A_GiveInventory("ToadChargeDamageGive")
BUBA A 1 A_GiveInventory("BubbleCharge",1)
BUBA A 0 A_JumpIfInventory("BubbleCharge",40,"Altfire.Charge2")
BUBA A 0 A_RailWait
BUBA A 0 A_Refire("Altfire.ChargeHold")
Goto Altfire.Reset1
Altfire.Charge2:
BUBA A 0 Offset(0,52)
BUBA A 0 A_GiveInventory("LeftClickFlag")
Altfire.ChargeHold2:
TOAD A 0 A_GiveInventory("ToadChargeDamageGive")
BUBA A 1
BUBA A 0 A_JumpIf(CallACS("VC_CheckBtn",4)==7,"Altfire.Reset3")
BUBA A 0 A_Refire("Altfire.ChargeHold2")
Goto Altfire.Reset2


User1:
BUBA A 0 A_JumpIfInventory("Base28Ammo",3,3)
BUBA AA 0 A_ClearRefire
Goto Ready
TOAD A 0 A_GiveInventory("ToadChargeDamageTake")
BUBA A 0 A_PlaySoundEx("weapon/bubblemanlead","Weapon")
BUBA J 1 A_GiveInventory("BubblemanTF_CI",1)
BUBA J 1 Offset(0, 48)
BUBA J 1 Offset(0, 56)
BUBA K 1 Offset(0, 60)
BUBA L 2 Offset(0, 62)
BUBA J 1 Offset(0, 60)
BUBA J 1 Offset(0, 56)
BUBA J 1 Offset(0, 48)
BUBA J 1 Offset(0, 40)
BUBA J 1 Offset(0, 36)
BUBA A 1 A_WeaponReady(14)
BUBA A 0 A_JumpIf(CallACS("VC_CheckBtn",3)==3 && CallACS("VC_AmmoCheck",0,9) == 0,"User1") //BUBA A 0 A_JumpIf(CallACS("VC_CheckBtn",3)==3 /*&& CallACS("VC_AmmoCheck",0,3) == 1*/,"User1")//A_Refire("Altfire.Uncharged")
BUBA AA 0 A_ClearRefire
goto Ready


Flash:
TNT1 A 0 A_JumpIfInventory("IsDead",1,"NoFlash")
TNT1 A 0 A_JumpIfInventory("BubblemanUltFlag",1,"Flash.SwimAlways")
TNT1 A 0 A_JumpIfInventory("IsTreadingWater",1,"Flash.Swim")
TNT1 A 1
loop
Flash.SwimAlways:
TNT1 A 1 SetPlayerProperty(0,1,3)
TNT1 A 0 A_JumpIfInventory("BubblemanUltFlag",1,"Flash.SwimAlways")
TNT1 A 0 SetPlayerProperty(0,0,3)
Goto Flash
Flash.Ammo:
TNT1 A 0 A_JumpIfInventory("BubblemanUltFlag",1,"Flash.SwimAlways")
TNT1 A 0 A_JumpIfInventory("BubblemanSwimAmmo",280,"Flash")
TNT1 A 0 A_JumpIfInventory("IsDead",1,"NoFlash")
TNT1 A 0 A_JumpIfInventory("IsTreadingWater",1,"Flash.Swim")
TNT1 A 1 A_GiveInventory("BubblemanSwimAmmo",1)
loop

Flash.Swim:
TNT1 A 0 A_GiveInventory("BubbleSwimSound_P",1)
Flash.SwimLoop:
TNT1 A 0 A_JumpIfInventory("IsDead",1,"NoFlash")
TNT1 A 1 A_GiveInventory("BubbleSwimFlash_P",1)
TNT1 A 0 A_JumpIf(z-floorz==0,"Flash.LandEnd")
TNT1 A 0 A_JumpIfInventory("BubblemanSwimAmmo",1,"Flash.SwimLoop")
TNT1 A 0 SetPlayerProperty(0,0,3)
goto Flash.Land

Flash.Land:
TNT1 A 0 A_JumpIf(z-floorz==0,"Flash.LandEnd")
TNT1 A 0 A_JumpIf(momz==0,"Flash.LandZ")
TNT1 A 0 A_JumpIfInventory("IsDead",1,"NoFlash")
TNT1 A 1
loop
Flash.LandZ:
TNT1 A 1
TNT1 A 0 A_JumpIf(z-floorz==0,"Flash.LandEnd")
TNT1 A 0 A_JumpIf(momz==0,"Flash.LandEnd")
goto Flash.Land+2
Flash.LandEnd:
TNT1 A 1 A_GiveInventory("BubbleSwimFlashEnd_P",1)
goto Flash.Ammo
}
}

Actor IsTreadingWater : VCOnce{}

Actor BubblemanMain_CI : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_PlaySoundEx("weapon/mm2shot","Weapon")
TNT1 A 0 A_JumpIfInventory("BubblemanUltFlag",1,"Pickup2")
TNT1 A 0 A_FireCustomMissile("BubblemanBuster",0,0,8,0)
stop
Pickup2:
TNT1 A 0 A_PlaySoundEx("weapon/pshot","Body")
TNT1 A 0 A_FireCustomMissile("BubblemanBuster2",0,0,8,0)
stop
}
}

Actor BubblemanBuster : FastProjectile
{
	PROJECTILE
	Scale 2.5
	Speed 65
	Radius 10
	Height 10
	Damage (12)
	DamageType "BubbleBuster"
	Obituary "$OB_BUBBLEMAN2"
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
		TNT1 A 1
		Spawn_L:
		BUBA D 2 A_SpawnItemEx("BubblemanFXTrail",-4,0,0,-2)
		Goto Spawn_L
		Death:
		BUBA D 0 A_JumpIf(ScaleX < 0 || ScaleY < 0 || Alpha <= 0, "Death2")
		BUBA D 1 A_SetScale(ScaleX - 0.25, ScaleY - 0.25) BUBA D 0 A_FadeOut(0.07)
		loop
		Death2: TNT1 A 0
		Stop
	}
}

Actor BubblemanBuster2 : BubblemanBuster
{
	Damage (19)
	Obituary "$OB_BUBBLEMAN5"
	DamageType "BubbleCrit"
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
		TNT1 A 1
		Spawn_L:
		BUBT DDEEFF 1 A_SpawnItemEx("BubblemanFXTrail2",-4,0,0,random(-1,0),random(-1,1),random(-1,1))
		Goto Spawn_L
		Death:
		BUBA D 0 A_JumpIf(ScaleX < 0 || ScaleY < 0 || Alpha <= 0, "Death2")
		BUBT DEF 1 A_SetScale(ScaleX - 0.25, ScaleY - 0.25) BUBA D 0 A_FadeOut(0.21)
		loop
		Death2: TNT1 A 0
		Stop
	}
}
Actor BubblemanFXTrail : BasicClientSide
{
	+FLOATBOB
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileFXCode",1)
		BUBT A 1 A_SetScale(ScaleX - 0.04, ScaleY - 0.04) BUBT A 0 A_FadeOut(0.05)
		BUBT A 1 A_SetScale(ScaleX - 0.04, ScaleY - 0.04) BUBT A 0 A_FadeOut(0.05)
		BUBT B 1 A_SetScale(ScaleX - 0.04, ScaleY - 0.04) BUBT B 0 A_FadeOut(0.05)
		BUBT B 1 A_SetScale(ScaleX - 0.04, ScaleY - 0.04) BUBT B 0 A_FadeOut(0.05)
		BUBT C 1 A_SetScale(ScaleX - 0.04, ScaleY - 0.04) BUBT C 0 A_FadeOut(0.05)
		BUBT C 1 A_SetScale(ScaleX - 0.04, ScaleY - 0.04) BUBT C 0 A_FadeOut(0.05)
		Goto Spawn+2
	}
}

actor BubblemanFXTrail2 : BubblemanFXTrail
{
	translation "0:4=204:204"
}

Actor BubblemanUltFlag : Powerup
{
	Powerup.Duration 700
}

Actor BubblemanAlt_CI : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_TakeInventory("Base28Ammo",4,1)
TNT1 A 0 A_GiveInventory("BubbleLeadAnim")
TNT1 A 0 A_FireCustomMissile("BubblemanLead",0,0,0,10)
BUBA A 0 A_TakeInventory("LeftClickFlag")
stop
}
}

Actor BubblemanAlt2_CI : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_TakeInventory("Base28Ammo",14,1)
TNT1 A 0 A_GiveInventory("BubbleLeadAnim")
TNT1 A 0 A_FireCustomMissile("BubblemanLeadCharged",0,0,0,10)
BUBA A 0 A_TakeInventory("LeftClickFlag")
stop
}
}

Actor BubblemanAlt3_CI : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_TakeInventory("Base28Ammo",14,1)
TNT1 A 0 A_GiveInventory("BubbleLeadAnim")
TNT1 A 0 A_FireCustomMissile("BubblemanLeadCharged2",0,0,0,10)
BUBA A 0 A_TakeInventory("LeftClickFlag")
stop
}
}

Actor BubblemanTF_CI : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_TakeInventory("Base28Ammo",9,1)
TNT1 A 0 A_GiveInventory("BubbleLeadAnim")
TNT1 A 0 A_FireCustomMissile("BubbleLeadSpawnerRM",0,0,0,10)
stop
}
}

Actor BubblemanLead
{
	PROJECTILE
	Scale 2.5
	Speed 35
	-NOGRAVITY
	Gravity 0.94
	Damage (20)//(17)
	DamageType "Bubbleman"
	Obituary "$OB_BUBBLEMAN1"
	Radius 16
	Height 16
	+DOOMBOUNCE
	-BOUNCEONFLOORS
	+NOEXPLODEFLOOR
	BounceCount 4
	BounceFactor 0.9
	WallBounceFactor 0.9
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
		TNT1 A 0 A_SetArg(0,3)
		Spawn_L:
		BBLD AAABBB 1 A_CheckFloor("Bounce.Floor")
		Goto Spawn_L
		Bounce.Floor:
		BBLD A 0 A_ScaleVelocity(0.9)
		BBLD A 0 A_CountDownArg(0,"Death")
		BBLD A 0 ThrustThingZ(0,35,0,0)
		BBLD AAA 1
		GotO Spawn+3
		Death:
		TNT1 A 0 A_SetScale(1.25)
		TNT1 A 0 A_ChangeFlag("NOGRAVITY",1)
		TNT1 A 0 A_Stop
		VLT2 B 3 A_Stop
		Stop
	}
}

Actor BubblemanLeadCharged
{
	PROJECTILE
	Scale 1.5
	Height 24
	Radius 24
	Damage (20)
	health 99999
	+FLOATBOB
	+NOTARGETSWITCH
	+SHOOTABLE
	+INVULNERABLE
	//+USEDAMAGEEVENTSCRIPT
	+DONTRIP
	-NOINTERACTION
	-NOBLOCKMAP
	//+THRUSPECIES
	DamageType "BubbleTrap"
	Obituary "$OB_BUBBLEMAN4"
	Speed 17//10
	ReactionTime 60
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
		//TNT1 A 0 A_GiveInventory("IsJoe",1)
		VLT2 AAA 3 A_CountDown
		Goto Spawn+3
		Death:
		TNT1 A 0 A_PlaySoundEx("classes/burstpop","Weapon")
		TNT1 A 0 A_Stop
		VLT2 B 3
		Stop
	}
}

Actor BubblemanLeadCharged2 : BubblemanLeadCharged
{
speed 8
}

/*
actor TopParryBox
{
+MISSILE
Speed 0
+DONTSPLASH
+NOEXPLODEFLOOR
+FLOORCLIP
+NOGRAVITY
Damage 0
Height 64
Radius 32
health 99999
scale 2.5
+SHOOTABLE
+NOBLOOD
-SOLID
painchance 256
bloodtype ""
species "TopParryType"
+THRUSPECIES
+CANTSEEK
+DONTRIP
+GHOST
+NORADIUSDMG
+NOTARGETSWITCH
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_JumpIfInTargetInventory("TopSpinAnim",1,"Death")
TNT1 AAAAA 1 A_Warp(AAPTR_TARGET, 0, 0, 0, 0, WARPF_NOCHECKPOSITION|WARPF_INTERPOLATE)
stop
Death:
TNT1 A 0 //A_PlaySound("item/protoreflect")
TNT1 A 1
stop
Pain:
TNT1 A 0 A_JumpIfInTargetInventory("TopSpinAnim",1,"Death")
TNT1 A 0 A_JumpIfInTargetInventory("TopPainFlag",1,"Death")
//TNT1 A 0 A_GiveToTarget("TopmanParrySelfProtect",1)
Pain.TopmanThird:
Pain.TopmanThird2:
TNT1 A 0 A_ChangeFlag("NOCLIP",1)
TNT1 A 0 A_SpawnItemEx("TopParryFX",0,0,0,0,0,2,0,1)
TNT1 A 0 A_GiveToTarget("TopParryAnim",1)
TNT1 A 0 A_PlaySound("item/protoreflect")
TNT1 A 2 A_GiveToTarget("TopManCharge",25)
stop
}
}*/

actor BubbleVision : PowerProtection
{
	Powerup.Color "0 10 35", 0.4
	Powerup.Duration -20
	DamageFactor "BubbleBuster", 1.5
}

actor BubbleTrapTime : Inventory
{
	inventory.amount 1
	inventory.maxamount 70
}

actor BubbleTrapWatcher
{
Height 0
Radius 0
+NOINTERACTION
-SOLID
+NOGRAVITY
+MISSILE
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_GiveToTarget("BubbleFreeze",1)
loopit:
TNT1 A 1 A_GiveToTarget("BubbleGravity",1)
TNT1 A 0 A_TakeFromTarget("BubbleTrapTime",1)
TNT1 A 0 A_GiveToTarget("BubbleVision",1)
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Death")
TNT1 A 0 A_JumpIfInTargetInventory("BubbleTrapTime",1,"loopit")
Death:
TNT1 A 0 //A_GiveToTarget("MovementReturnFailSafe")
TNT1 A 0 A_TakeFromTarget("BubbleVision",999)
stop
}
}

actor BubbleFreeze : CustomInventory
{
inventory.amount 1
inventory.maxamount 1
states
{
Pickup:
TNT1 A 0 //SetPlayerProperty(0,1,4)
TNT1 A 0 A_Stop
stop
}
}

actor BubbleGravity : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_GiveInventory("BubblePrisonWeaken")
TNT1 A 0 A_GiveInventory("BubblePrisonSlow")
TNT1 A 0 A_SpawnItemEx("BubbleAltBubbleFX",0,0,0,momx,momy,momz,0,SXF_TRANSFERTRANSLATION|SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION)
TNT1 A 0 ThrustThingZ(0,20,0,0)
stop
End:
TNT1 A 0
stop
}
}

actor BubbleAltBubbleFX : ConcreteFX
{
Scale 2.5
States
{
Spawn:
TNT1 A 0
VLT2 A 2
stop
}
}

Actor GiveIsTreadingWater_P : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("BubblemanUltFlag",1,"Nope")
TNT1 A 0 A_GiveInventory("IsTreadingWater",1)
Nope: TNT1 A 0
Stop
}
}

Actor BubbleSwimFlash_P : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("BubblemanUltFlag",1,"DoItReally")
TNT1 A 0 A_JumpIfInventory("BubblemanSwimAmmo",1,"SwimCheck")
TNT1 A 0 SetPlayerProperty(0,0,3)
TNT1 A 0 //A_Log("I HAVE NO AMMO")
stop
DoItReally:
TNT1 A 0 SetPlayerProperty(0,1,3)
stop
SwimCheck:
TNT1 A 0 A_JumpIfInventory("IsUnderWater",1,"Swim")
TNT1 A 0 SetPlayerProperty(0,0,3)
TNT1 A 0 //A_Log("NO SWIM")
stop
Swim:
TNT1 A 0 A_TakeInventory("BubblemanSwimAmmo",1)
//TNT1 A 0 A_JumpIfInventory("FlightDisableFlag",1,"SwimNo")
TNT1 A 0 SetPlayerProperty(0,1,3)
TNT1 A 0 //A_Log("LETS SWIM")
stop
SwimNo:
TNT1 A 0 SetPlayerProperty(0,0,3)
TNT1 A 0 //A_Log("I CANT SWIM")
stop
}
}

actor BubbleSwimSound_P : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("IsUnderWater",1,"Pickup2")
stop
Pickup2:
TNT1 A 0 A_PlaySoundEx("weapon/bubbleswim","Body")
TNT1 AA 0 A_SpawnItemEx("BubbleBubbleSpray")
stop
}
}

Actor BubbleSwimFlashEnd_P : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_TakeInventory("IsTreadingWater",99)
TNT1 A 0 SetPlayerProperty(0,0,3)
stop
}
}

Actor BubbleManShieldProtection : BasicArmorPickup
{
  Armor.SaveAmount 150
  Armor.SavePercent 80
}

Actor BubbleManShieldWatcher
{
Height 0
Radius 0
+NOTARGETSWITCH
+NOINTERACTION
-SOLID
+NOGRAVITY
+MISSILE
-DONTBLAST
States
{
Spawn:
TNT1 A 1 A_GiveToTarget("BubbleShieldFXSpawn",1) TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0) == 0,"Death")
TNT1 A 0 A_GiveInventory("CutterFlag",1)
TNT1 A 0 A_JumpIfInventory("CutterFlag",7,"TakeAmmo")
TNT1 A 0 A_JumpIfInTargetInventory("BubblemanUltFlag",1,1)
goto Death
TNT1 A 0 A_JumpIfInTargetInventory("BasicArmor",1,"Spawn")
goto Death


TakeAmmo:
TNT1 A 0 A_TakeFromTarget("MediumLongUltimateAmmo",4)
TNT1 A 0 A_TakeInventory("CutterFlag",9)
TNT1 A 0 A_JumpIfInTargetInventory("BubblemanUltFlag",1,1)
goto Death
TNT1 A 0 A_JumpIfInTargetInventory("BasicArmor",1,"Spawn")
goto Death

Death:
TNT1 A 0 A_TakeFromTarget("BubblemanUltFlag",999)
TNT1 A 0 A_TakeFromTarget("BubbleManShieldProtection",999)
TNT1 A 0 A_TakeFromTarget("UltBuildCooldownGiver",999)
TNT1 A 0 A_TakeFromTarget("MediumLongUltimateAmmo",999)
TNT1 A 0 A_TakeFromTarget("PowerUltBuildCooldown",999)
TNT1 A 0 A_TakeFromTarget("BasicArmor",999)
TNT1 A 1 A_GiveToTarget("BubbleShieldFXSpawn2",1)
TNT1 AA 1 A_GiveToTarget("BubbleShieldFXSpawn3",1)
stop
}
}

Actor BubbleShieldFXSpawn : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_SpawnItemEx("BubbleShieldFX",0,0,0,momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM, 0)
stop
}
}
Actor BubbleShieldFXSpawn2 : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_PlaySoundEx("classes/burstpop","Body")
TNT1 AA 0 A_TakeInventory("MediumLongUltimateAmmo",999)
TNT1 A 0 A_SpawnItemEx("BubbleShieldFX2",0,0,0,momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM, 0)
stop
}
}
Actor BubbleShieldFXSpawn3 : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_SpawnItemEx("BubbleShieldFX2",0,0,0,momx, momy, momz, 0, SXF_ABSOLUTEMOMENTUM, 0)
stop
}
}

Actor BubbleShieldFX
{
Scale 2.5
+NOTARGETSWITCH
+NOINTERACTION
+NOGRAVITY
Radius 2
Height 2
States
{
Spawn:
VLT2 AA 1
stop
}
}

Actor BubbleShieldFX2 : BubbleShieldFX { Scale 3.0 States { Spawn: VLT2 BB 1
stop }}

Actor BubblemanUlt_CI : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_PlaySoundEx("classes/ultimateactivation","Auto")
TNT1 A 0 A_PlaySoundEx("classes/burstpoof","SoundSlot7")
TNT1 A 0 A_GiveInventory("BubblemanUltFlag",1)
TNT1 A 0 A_GiveInventory("UltBuildCooldownGiver",1)
TNT1 A 0 A_TakeInventory("UltAttackFlag",999)
TNT1 A 0 A_TakeInventory("MediumLongUltimateAmmo",1)
TNT1 A 0 A_SpawnItemEx("BubbleManShieldWatcher")
TNT1 A 0 A_GiveInventory("BubbleManShieldProtection",1)
stop
}
}

actor BubbleBubbleSpray : PumpBubbleSpray
{
	States
	{
	Spawn:
		TNT1 A 0
		TNT1 AAAAAAAA 1 A_SpawnItemEx("BubbleTinyBubble", frandom(0, 32), 0, frandom(20,-4), frandom(0, 4), 0, frandom(-8, -2), random(0,359))
		stop
	}
}

actor BubbleTinyBubble : PumpTinyBubble
{
	translation "0:255=4:4"
}

actor BubbleCharge : inventory
{
	inventory.amount 1
	inventory.maxamount 40
}

actor BubbleLeadSpawnerRM
{
PROJECTILE
+NOINTERACTION
+NOCLIP
Damage(0)
Height 1
Radius 1
Speed 0
States
{
Spawn:
TNT1 A 1
TNT1 A 0 A_SpawnItemEx("BubbleLeadStartRM",8,0,-16,8,0,5,0,0,0)
stop
}
}

actor BubbleLeadStartRM : BasicProjectile
{
+HITTRACER
-NOGRAVITY
+FORCEXYBILLBOARD
Damage (23)
DamageType "BubbleLead"
Obituary "$OB_BUBBLELEAD"
Height 16
Radius 20
States
{
Spawn:
BUBB ABCB 3
loop
Death:
TNT1 A 0 A_JumpIf(z-floorz==0,"Death2")
TNT1 A 1
stop
Crash:
TNT1 A 0 A_GiveInventory("AlienHealThing",1,AAPTR_TRACER)
XDeath:
TNT1 A 1 A_SpawnItemEx("SoakifyEffect")
stop
Death2:
TNT1 A 1 A_SpawnItemEx("BubbleLeadRM",0,0,0,56,0,0,0,0,0)
stop
}
}

actor BubbleLeadRM : BasicProjectile
{
+HITTRACER
-NOGRAVITY
+NOEXPLODEFLOOR
+STEPMISSILE
maxstepheight 14
+BOUNCEONCEILINGS
+FORCEXYBILLBOARD
BounceCount 1
Damage (24)
DamageType "BubbleLead"
Obituary "$OB_BUBBLELEAD"
Height 16
Radius 20
gravity 3.0
speed 22
reactiontime 51
States
{
Spawn:
BUBB A 0
BUBB ABCB 4 A_CountDown
loop
Crash:
TNT1 A 0 A_GiveInventory("AlienHealThing",1,AAPTR_TRACER)
Death:
TNT1 A 2 A_SpawnItemEx("SoakifyEffect")
stop
}
}

Actor MegaManDeflectProj_CI : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_PlaySound("item/protoreflect")
/*TNT1 A 0 A_CheckFlag("DONTREFLECT","Pickup2")
TNT1 A 0 A_ChangeVelocity(-40,0,40,CVF_RELATIVE|CVF_REPLACE)
stop
Pickup2:
TNT1 A 0*/
stop
}
}

actor BubblePrisonSlow : PowerSpeed
{
Speed 0.75
powerup.duration 3
}

actor BubblePrisonWeaken : PowerDamage
{
Powerup.Duration 3
DamageFactor "Normal", 0.5
}