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 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("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
Animation1:
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+2
Missile2:
BUBM MMMMMMMMM 1 A_JumpIf(z-floorz>0, "JumpingMissile2")
goto Spawn+2
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+2
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:
TNT1 A 0 A_JumpIfInventory("BubblemanUltFlag",1,"Ready.Skip")
TNT1 A 0 A_JumpIfInventory("BubbleClawCount",4,"Ready.Skip")
TNT1 A 0 A_JumpIfInventory("Base28Ammo",7,"Ready.CanTF")
Ready.Skip:
BUBA A 1 A_WeaponReady BUBA A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
BUBA A 1 A_WeaponReady BUBA A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
BUBA A 1 A_WeaponReady BUBA A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
BUBA A 0 A_GiveInventory("Base28Ammo",1)
Goto Ready

Ready.CanTF:
BUBA A 1 A_WeaponReady BUBA A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
BUBA A 1 A_WeaponReady BUBA A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
BUBA A 1 A_WeaponReady BUBA A 0 A_JumpIfInventory("UltAttackFlag",1,"UltimateAttack")
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("VC_CheckBtn",3)==3,"User1")
BUBA A 0 A_GiveInventory("Base28Ammo",1)
loop

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

User1:
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)
Goto Ready

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.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 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.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)
Altfire.ChargeHold2:
TOAD A 0 A_GiveInventory("ToadChargeDamageGive")
BUBA A 1
BUBA A 0 A_Refire("Altfire.ChargeHold2")
Goto Altfire.Reset2

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 "BubbleCrit2"
	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)
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)
stop
}
}

Actor BubblemanLead
{
	PROJECTILE
	Scale 2.5
	Speed 35
	-NOGRAVITY
	Gravity 0.94
	Damage (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)
	+FLOATBOB
	DamageType "BubbleTrap"
	Obituary "$OB_BUBBLEMAN4"
	Speed 10
	ReactionTime 60
	States
	{
		Spawn:
		TNT1 AA 0 A_GiveInventory("ProjectileCode",1)
		VLT2 AAA 3 A_CountDown
		Goto Spawn+1
		Death:
		TNT1 A 0 A_PlaySoundEx("classes/burstpop","Weapon")
		TNT1 A 0 A_Stop
		VLT2 B 3
		Stop
	}
}

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

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

actor BubbleTrapProtection : PowerProtection
{
Powerup.duration -1
DamageFactor "BubbleTrap", 0.0
}

actor BubbleTrapWatcher
{
Height 0
Radius 0
+NOINTERACTION
-SOLID
+NOGRAVITY
+MISSILE
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_GiveToTarget("BubbleFreeze",1)
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,"Spawn")
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)
stop
}
}

actor BubbleGravity : CustomInventory
{
States
{
Pickup:
TNT1 A 0
TNT1 A 0 A_Stop
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 BubblemanTF_CI : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_TakeInventory("Base28Ammo",7,1)
TNT1 A 0 A_GiveInventory("BubbleLeadAnim")
TNT1 A 0 ACS_NamedExecute("VC_SetState",0,1)
TNT1 A 0 A_GiveInventory("BubbleClawCount",1)
TNT1 A 0 A_FireCustomMissile("BubbledClaw",0,0,0,10)
stop
}
}

actor BubbledClaw
{
+MISSILE
+NOGRAVITY
+SHOOTABLE
+STANDSTILL
+HEXENBOUNCE
+THRUSPECIES
+NOTARGETSWITCH
+NOEXPLODEFLOOR
Species "BubbleClaw"
DamageType "BubbleClaw"
Obituary "$OB_BUBBLEMAN6"
Health 1
Bouncefactor 0.5
WallBounceFactor 0.5
Damagefactor "Beam", 0.0
Damagefactor "FireTrap", 0.0
Damagefactor "FirePillar", 0.0
Damage (10)
Speed 20
Height 60//24
Radius 30
Scale 2.5
ReactionTime 175
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode", 1)
VLT2 CCCCCCCCCCCCCCC 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Death2")
TNT1 A 0 A_Stop
TNT1 A 0 A_changeFlag("FLOATBOB",True)
SpawnHold:
VLT2 C 1 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Death2")
TNT1 A 0 A_CountDown
TNT1 A 0 A_JumpIfInTargetInventory("IsDead",1,"Death2")
loop

Death:
TNT1 A 0 A_Stop
TNT1 A 0 A_PlaySoundEx("weapon/WaterShieldPop","Weapon")
TNT1 AAA 0 ACS_NamedExecuteAlways("core_radiuspull", 0, -7, 100)
TNT1 A 0 A_RearrangePointers(AAPTR_DEFAULT,AAPTR_TARGET,AAPTR_DEFAULT)
VLT2 D 2 A_SpawnItemEx("BubblemanClaw",0,0,0,0,0,10,0,SXF_TRANSFERPOINTERS)
stop

Death2:
TNT1 A 0 A_SpawnItemEx("ExplosionEffect1")
stop
}
}

Actor BubblemanClaw
{
PROJECTILE
-NOGRAVITY
+DONTBLAST
+SKYEXPLODE
+THRUSPECIES
+LOOKALLAROUND
+SEEKERMISSILE
+NOEXPLODEFLOOR
+BOUNCEONWALLS
+NOTARGETSWITCH
+BOUNCEONCEILINGS
Species "BubbleClaw"
DamageType "BubbleClaw"
Obituary "$OB_BUBBLEMAN7"
WallBounceFactor 1.0
Gravity 1.0
Damage (15)
Height 16
Radius 16
Scale 2.5
ReactionTime 350
States
{
Spawn:
TNT1 AA 0 A_GiveInventory("ProjectileCode", 1)
TNT1 A 0 A_CountDown
CLAW C 1 A_CheckFloor("ClawLook")
Goto Spawn+2

ClawLook:
TNT1 A 0 A_JumpIfInTargetInventory("IsDead",1,"Death")
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Death") TNT1 A 0 A_Countdown
CLAW C 1 A_SeekerMissile(0,0,SMF_LOOK,256) TNT1 A 0 A_JumpIfTargetInLOS("ClawChase",0,JLOSF_PROJECTILE)
loop

ClawChase:
TNT1 A 0 A_FaceTracer
TNT1 A 0 A_ChangeVelocity(10,0,momz,CVF_RELATIVE|CVF_REPLACE)
CLAW CCCAAACCCCBBB 1 A_Countdown
TNT1 A 0 A_JumpIfInTargetInventory("IsDead",1,"Death")
TNT1 A 0 A_JumpIfTargetInLOS("ClawChase",0,JLOSF_PROJECTILE)
TNT1 A 0 A_JumpIf(ACS_NamedExecuteWithResult("core_targetexists",0)==0,"Death")
Goto Reset

Reset:
TNT1 A 0 A_Stop
TNT1 A 0 A_RearrangePointers(AAPTR_DEFAULT,AAPTR_DEFAULT,AAPTR_NULL)
Goto ClawLook

Death:
TNT1 A 0 A_SpawnItemEx("ExplosionEffect1")
TNT1 A 0 A_TakeFromTarget("BubbleClawCount",1)
stop
}
}

Actor BubbleClawCount : Inventory
{
	Inventory.Amount 1
	Inventory.MaxAmount 4
}