actor BearerClass : ClassBase //200
{
Player.ScoreIcon "C_00X0X"
player.displayname "BearerClass"
player.soundclass "BearerClassC"

player.startitem "WildBearBoss"
player.startitem "MaximumBearAmmo",3
player.startitem "BearerFlag"
player.startitem "CanUseItems"
player.startitem "SemiStunArmor"

player.maxhealth 200
health 200
player.forwardmove 0.60, 0.60
player.sidemove 0.58, 0.58

+NOSKIN
player.morphweapon "WildBearBoss"
PainSound "misc/ROCKHURTX"

States
{
Spawn:
GNDL A 0
GNDL B 1
GNDL A 1
Goto Spawn+2
See:
GNDL BCDC 5
Goto Spawn
Missile:
GNDL FG 5
goto Spawn+2

CustomState1:
GNDL FG 5
goto Spawn+2

CustomState2:
GRDL MNOP 3 A_JumpIfInventory("BomuEnd",1,"Spawn")
loop

ClassPain:
GNDL H 0
GNDL H 0 A_Pain
//GNDL H 0 A_PlaySoundEX("misc/GBPAINX","Voice")
GNDL H 0 A_GiveInventory("IsInPain",1)
GNDL HHHHHHHHHH 2 A_SpawnItemEx("PainFX_CBM",-5,0,3,0,0,0)
GNDL H 1
GNDL H 0 A_Jump(256,"Spawn")
GNDL H 1 A_Jump(256,"Spawn")
Goto Spawn+2

DeathFix: 
GNDL H 0 //A_GiveInventory("SpecialDeathFlag",1)
goto DeathContinue

ClassDeath:
GNDL H 0 A_JumpIfInventory("InstagibFlag",1,"MegaDeathEnd")
GNDL H 0 A_JumpIfInventory("RiseDeathFlag",1,"RiseDeath")
GNDL H 0 A_JumpIfInventory("IceDeathFlag",1,"IceDeath")
GNDL H 19
goto MegaDeathEnd


RiseDeath:
GNDL H 1 ThrustThingZ(0,21,0,1)
GNDL H 0 A_JumpIf(ceilingz-z<64,"MegaDeathEnd")
GNDL H 0 A_GiveInventory("RiseDeathFlag2",1)
GNDL H 0 A_JumpIfInventory("RiseDeathFlag2",25,"MegaDeathEnd")
Goto RiseDeath
IceDeath:
GNDL H 0 ACS_ExecuteAlways(998,0,DYE_ICEDEATHCBM,10)
GNDL H 1 A_PlaySoundEx("CBM/freeze","Voice")
GNDL HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH 1 A_SpawnItemEx("FrozenDeathBitFX",frandom(16,48),0,fRandom(16,48),0,0,0,random(0,359))
GNDL H 0 A_PlaySoundEx("CBM/icebreak","Body")
GNDL H 0 A_SpawnItemEx("FrozenDeathFXC",0,0,0)
goto DeathWait

//Have to hard code because morphes break the rules
//
TimeStopped:
GNDL "]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]" 1 A_Stop
Goto Pain+2
TimeStoppedX:
GNDL "####################################################" 1 A_Stop
Goto Pain+2

Pain.LightRyu_Stop://BearerClass has a copy of this
"####" H 0 A_SpawnItemEx("PainLightRyu_StopHit")
"####" H 0 A_GiveInventory("LightRyu_StopProtect",1)
"####" H 0 A_GiveInventory("TimeStoppedTF",1)
"####" HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH 1 A_Stop
Goto Pain+2
}
}

actor WildBearBoss : BaseMM8BDMWep_CBM
{
dropitem "ConfettiDeathSpawner"
dropitem "CopyClassUpgradeDropped"
Tag "$TAGC_BEAR"
Weapon.AmmoUse 0
Weapon.AmmoGive 3
Obituary "$OB_BEARCLOSE"
weapon.ammotype "MaximumBearAmmo"
States
{
Spawn:
C_00 X 1
loop
Ready:
GRDL A 0 ACS_ExecuteAlways(998,0,DYE_YELLOWDEVIL)
Ready1:
GRDL A 10 A_WeaponReady//(WRF_ALLOWRELOAD)
GRDL A 0 A_JumpIfInventory("BomuHeal",1,"Heal")
loop

Heal:
GRDL A 0 HealThing(1)
GRDL A 0 A_TakeInventory("BomuHeal",1)
GRDL A 2 A_WeaponReady//(WRF_ALLOWRELOAD)
goto Ready1+1

Deselect:
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
GRDL A 1 A_Lower
Loop
Select:
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
GRDL A 1 A_Raise
Loop

Fire:
GRDL A 0 A_GiveInventory("WildBearMain_CI",1)
GRDL A 0 A_PlaySoundEx("wep/YD_Punch","Weapon")
GRDL A 0 ACS_NamedExecute("BULL_SetState",0,1)
GRDL B 2 Offset(-28,14)
GRDL BBBB 2 Offset(-56,-4)
GRDL B 2 Offset(-56,-4)
GRDL B 2 Offset(-56,-4)
GRDL B 2 Offset(-32,8)
GRDL A 2 Offset(-12,20)
GRDL A 2 A_WeaponReady(14)
Goto Ready1

Altfire:
GRDL C 0
GRDL A 1 Offset(8,26)
GRDL E 1 Offset(8,26)
GRDL E 1 Offset(20,16)
GRDL E 1 Offset(28,8)
GRDL C 0 A_Refire("AltfireCharge")
Altfire2:
GRDL C 0 A_TakeInventory("BomuCharge", 50)
GRDL C 0 A_PlaySoundEx("wep/YD_Toss","weapon")
GRDL C 0 A_GiveInventory("WildBearAltA_CI",1)
GRDL C 0 A_GiveInventory("WildBearAltB_CI",1)
GRDL C 10 Offset(40,0)
GRDL C 2 Offset(36,4)
GRDL C 1 Offset(32,8)
GRDL A 2 Offset(-4,32)
GRDL A 7 Offset(-8,36)
GRDL A 1 Offset(-6,35)
GRDL A 1 Offset(-4,34)
GRDL A 1 Offset(-2,33)
Goto Ready1

AltfireCharge:
GRDL C 0 A_JumpIfInventory("BomuCharge",50,"AltfireCharged")
GRDL E 2 Offset(28,8) A_GiveInventory("BomuCharge")
GRDL C 0 A_Refire("AltfireCharge")
Goto Altfire2

AltfireCharged:
GRDL D 1 Offset(32,12)
AltfireCharged2:
GRDL C 0 A_PlaySoundEx("weapon/bumobrr","weapon")
GRDL C 2 Offset(30,6) 
GRDL C 2 Offset(28,8)
GRDL E 1 A_Refire("AltfireCharged2")
GRDL C 0 A_TakeInventory("BomuCharge", 50)
GRDL C 0 A_TakeInventory("BomuEnd",3)
GRDL C 0 A_PlaySoundEx("wep/YD_Toss","weapon")
GRDL C 0 ACS_NamedExecute("BULL_SetState",0,2)
GRDL C 0 A_GiveInventory("WildBearAlt2_CI",1)
GRDL C 0 A_ChangeFlag("NOTELEPORT",1)
GRDL C 0 A_ChangeFlag("SOLID",0)
GRDL C 0 A_TakeInventory("UnSolid",1)
GRDL C 0 A_Changeflag("PICKUP",0)
//GRDL C 0 A_ChangeFlag("INVISIBLE",1)
GRDL E 2 Offset(28,8)
GRDL E 2 Offset(20,8)
GRDL E 0 ACS_NamedExecuteAlways("CCBM_DevilHealthDrainer",0)
AltfireLoop:
GRDL E 0 A_SpawnItemEx("BearerChargedDamager",0,0,8,momx,momy,momz,0,8,0)
GRDL E 1 Offset(12,17)
GRDL E 0 A_JumpIfInventory("BomuEnd",1,"AltfireEnd")
GRDL E 0 //DamageThing(2)
GRDL E 0 //A_GiveInventory("BomuHeal",1)
loop

AltfireEnd:
//GRDL E 0 A_ChangeFlag("INVISIBLE",0)
GRDL E 0 A_ChangeFlag("PICKUP",1)
GRDL E 0 A_ChangeFlag("NOTELEPORT",0)
GRDL E 0 A_SpawnItemEx("ReSolidifyPlayer_H")
GRDL E 0 A_PlaySoundEx("wep/YD_Sploosh","Weapon")
GRDL E 0 A_CheckCeiling("AltfireEndCeiling")
GRDL E 0 A_SpawnItemEx("YD_BearerCubeBit",4,0,12,8,0,10,0,1)
GRDL E 0 A_SpawnItemEx("YD_BearerCubeBit",4,0,12,8,0,10,90,1)
GRDL E 0 A_SpawnItemEx("YD_BearerCubeBit",4,0,12,8,0,10,180,1)
GRDL E 0 A_SpawnItemEx("YD_BearerCubeBit",4,0,12,8,0,10,270,1)
AltfireEnd2:
GRDL E 1 Offset(12,17)
GRDL E 1 Offset(2,27)
GRDL E 18 Offset(-10,37)
GRDL A 1 Offset(-8,36)
GRDL A 1 Offset(-6,35)
GRDL A 1 Offset(-4,34)
GRDL A 1 Offset(-2,33)
Goto Ready1

AltfireEndCeiling:
TNT1 A 0 A_SpawnItemEx("YD_BearerCubeBit",4,0,12,8,0,-10,0,1)
TNT1 A 0 A_SpawnItemEx("YD_BearerCubeBit",4,0,12,8,0,-10,90,1)
TNT1 A 0 A_SpawnItemEx("YD_BearerCubeBit",4,0,12,8,0,-10,180,1)
TNT1 A 0 A_SpawnItemEx("YD_BearerCubeBit",4,0,12,8,0,-10,270,1)
Goto AltfireEnd2
}
}

actor MaximumBearAmmo : Ammo
{
inventory.amount 1
inventory.maxamount 3
+INVENTORY.IGNORESKILL
}

actor BearerFlag : Inventory
{
inventory.amount 1
inventory.maxamount 1
}

actor BomuCharge : Inventory
{
inventory.amount 1
inventory.maxamount 50
}

actor BomuHeal : Inventory
{
inventory.amount 1
inventory.maxamount 200
}

actor BomuEnd : Inventory
{
inventory.amount 1
inventory.maxamount 3
}

//I present, a far less bad version of the original very loopy cheese protection.
actor CheeseProtectionHelper : CustomInventory 
{
	States
	{
		Pickup:
		TNT1 A 0 A_SpawnItemEx("CheeseProtectionGiver")
		TNT1 A 0 A_SpawnItemEx("CheeseProtectionTaker")
		stop
	}
}

actor CheeseProtectionGiver : BasicHelper
{
	States
	{
		Spawn:
		TNT1 A 0
		TNT1 A 0 A_GiveToTarget("InvulnerableOn_Pickup")
		stop
	}
}

actor CheeseProtectionTaker : BasicHelper
{
	States
	{
		Spawn:
		TNT1 A 50
		TNT1 A 0 A_GiveToTarget("InvulnerableOff_Pickup")
		stop
	}
}

actor BearerMorphStart_P : CustomInventory
{
States
{
Pickup:
TNT1 A 0 //LightTeamFlag//ACS handles TeamFlags/FlagPickups

TNT1 A 0 SetPlayerProperty(0,0,16)//Buddha
TNT1 A 0 SetPlayerProperty(0,0,4)//TotallyFrozen
TNT1 A 0 SetPlayerProperty(0,0,0)//Frozen
TNT1 A 0 SetPlayerProperty(0,0,3)//Flight

//Important Gives
TNT1 A 0 A_GiveInventory("BearerFlag",1)//ACS watches for this
TNT1 A 0 A_GiveInventory("EnvironmentGravity",1)//Fix underwater gravity
TNT1 A 0 A_GiveInventory("IsInGame",1)//Great deal of things watch for this
TNT1 A 0 A_GiveInventory("CBM_StarterSpawnInventory_P")//A morph is a fresh respawn due to ClearInventory
//TNT1 A 0 A_GiveInventory("SpawnTelefragFixPickup",1)//Probably not needed, but might as well
TNT1 A 0 A_GiveInventory("StaminaFlag",500)//Restore Stamina due to ClearInventory();

//Bonus Gives
TNT1 A 0 A_GiveInventory("CanUseItems",1)
TNT1 A 0 A_GiveInventory("SemiStunArmor",1)
//TNT1 A 0 A_GiveInventory("HardHealthBar",1)
//TNT1 A 0 A_GiveInventory("CheeseProtectionHelper",1) //Moved to ACS.


//Flags to end certain class actors/projectiles

TNT1 A 0 A_GiveInventory("BubbleFloodUndeploy",1)

TNT1 A 0 A_GiveInventory("ClashFlag1",1)//Applies to Tornado as well
TNT1 A 0 A_GiveInventory("ClashFlag2",1)
TNT1 A 0 A_GiveInventory("ClashFlag3",1)
TNT1 A 0 A_GiveInventory("ClashFlag4",1)
TNT1 A 0 A_GiveInventory("ClashFlagT",1)

TNT1 A 0 A_GiveInventory("RingFlag",1)
TNT1 A 0 A_GiveInventory("RingFlag2",1)

TNT1 A 0 A_GiveInventory("DiveLockonCleanse",1)

TNT1 A 0 A_GiveInventory("EndFlameFlag",1)

TNT1 A 0 A_GiveInventory("SearchBushFlag1",1)
TNT1 A 0 A_GiveInventory("SearchBushFlag2",1)
TNT1 A 0 A_GiveInventory("SearchBushFlag3",1)
TNT1 A 0 A_GiveInventory("SearchBushFlag4",1)

TNT1 A 0 A_GiveInventory("AquaKillFlag",1)

TNT1 A 0 A_GiveInventory("DuoMeteorEnd",1)
TNT1 A 0 A_GiveInventory("ODuoMeteorStop",1)

TNT1 A 0 A_GiveInventory("SplashEndSinging",1)

TNT1 A 0 A_GiveInventory("BeeFlag1",1)

TNT1 A 0 A_GiveInventory("Merc_BlobOff_F",1)

TNT1 A 0 A_TakeInventory("NoJumpCancel",9)
TNT1 A 0 A_GiveInventory("StopShield",1) //I'm kind of amazed this wasn't already here.
stop
}
}

actor YD_BearerCube
{
	Translation "192:192=216:216", "198:198=220:220"
	PROJECTILE
	Obituary "$OB_BEARMAIN1"
	damagetype "YellowDevilB"
	-NOGRAVITY
	+SKYEXPLODE
	damage (10)
	BounceType Doom
	BounceCount 1
	reactiontime 15
	gravity .7
	Radius 25
	Height 40
	speed 29
	scale 1.5
	States
	{
		Spawn:
		TNT1 A 0
		TNT1 A 0 ACS_NamedExecuteAlways("BULL_Tidifier", 0)
		TNT1 A 0 ThrustThingZ(0,14,0,1)
		TNT1 A 0 A_Countdown 
		GRDL FGHI 3
		Goto Spawn+2
		Death:
		TNT1 A 0 A_ChangeFlag("NOGRAVITY",1)
		TNT1 A 1 A_Stop
		TNT1 A 0 A_PlaySound("wep/YD_Sploosh","Weapon",0.35)
		TNT1 A 0 A_CheckCeiling("DeathCeiling")
		TNT1 A 0 A_SpawnItemEx("YD_BearerCubeBit",0,0,12,29,0,10,0,1)
		stop
		DeathCeiling:
		TNT1 A 0 A_SpawnItemEx("YD_BearerCubeBit",0,0,12,29,0,-10,0,1)
		stop
		XDeath:
		TNT1 A 0
		stop
	}
}

actor YD_BearerCubeCharged : YD_BearerCube
{
	+DONTBLAST
	+DONTREFLECT
	+DONTSPLASH
	+THRUACTORS
	scale 2.5
	States
	{
		Spawn:
		TNT1 A 0
		TNT1 A 0 ACS_ExecuteAlways(815,0,200)
		TNT1 A 0 ThrustThingZ(0,14,0,1)
		TNT1 A 0 A_Countdown
		TNT1 A 12 A_JumpIfInTargetInventory("BumoEnd",1,"Death")
		Goto Spawn+3
		Death:
        XDeath:
		TNT1 A 0 A_GiveToTarget("BomuEnd",1)
		TNT1 A 0 A_GiveInventory("ProjectilePortDead",1)
		TNT1 A 0 A_ChangeFlag("NOGRAVITY",1)
		TNT1 A 1 A_Stop
		stop
	}
}

actor BearerChargedDamager
{
PROJECTILE
damagetype "BearerDevilC"
Obituary "$OB_YELLOWMAIN3"
+DONTSPLASH
+DONTBLAST
+NOEXPLODEFLOOR
+THRUGHOST
+DONTREFLECT
damage (25)
Radius 45
Height 70
scale 2.5
States
{
Spawn:
TNT1 A 1
stop
Crash:
XDeath:
TNT1 A 1 A_GiveToTarget("BomuEnd",1)
stop
Death:
TNT1 A 1 A_GiveToTarget("BomuEnd",1)
Stop
}
}

actor BearerDevilCProtect : PowerProtection
{
Powerup.Duration 3
DamageFactor "BearerDevilC", 0.0
}

actor YD_BearerCubeB : YD_BearerCube{translation "192:192=205:205", "198:198=74:74"}
actor YD_BearerCubeR : YD_BearerCube{translation "192:192=171:171", "198:198=41:41"}
actor YD_BearerCubeO : YD_BearerCube{translation "192:192=104:104", "198:198=128:128"}
actor YD_BearerCubeP : YD_BearerCube{translation "192:192=229:229", "198:198=232:232"}
actor YD_BearerCubeChargedB : YD_BearerCubeCharged{translation "192:192=205:205", "198:198=74:74"}
actor YD_BearerCubeChargedR : YD_BearerCubeCharged{translation "192:192=171:171", "198:198=41:41"}
actor YD_BearerCubeChargedO : YD_BearerCubeCharged{translation "192:192=104:104", "198:198=128:128"}
actor YD_BearerCubeChargedP : YD_BearerCubeCharged{translation "192:192=229:229", "198:198=232:232"}

actor YD_BearerCubeBit
{
PROJECTILE
Obituary "$OB_BEARMAIN2"
damagetype "YellowDevilB"
+DONTSPLASH
-NOGRAVITY
+HEXENBOUNCE
damage (5)
Radius 8//25
Height 8//20
speed 14
scale 2.5
States
{
Spawn:
TNT1 A 0
TNT1 A 0 ACS_NamedExecuteAlways("BULL_Tidifier", 0)
GRDL JK 2
TNT1 A 0 A_ChangeFlag(HEXENBOUNCE, false)
Spawn2:
GRDL LKJK 2
loop
Death:
TNT1 A 1
stop
}
}

actor YD_BearerPunch
{
translation "192:192=216:216"
PROJECTILE
damagetype "YellowDevilP"
Obituary "$OB_BEARALT"
+DONTBLAST
reactiontime 1
damage (35)
Radius 40
Height 20
speed 60
scale 2.5
States
{
Spawn:
TMFX J 0
TMFX J 1 A_CountDown
wait
Death:
TMFX J 0 A_Explode(35,40,0)
goto XDeath
XDeath:
TMFX J 0 A_Stop
TMFX JTJK 2
stop
}
}

actor YD_BearerPunchB : YD_BearerPunch{translation "192:192=205:205"}
actor YD_BearerPunchR : YD_BearerPunch{translation "192:192=171:171"}
actor YD_BearerPunchO : YD_BearerPunch{translation "192:192=104:104"}
actor YD_BearerPunchP : YD_BearerPunch{translation "192:192=229:229"}

actor WildBearAltA_CI : TeamColor_CI
{
states
{
FireX:
TNT1 A 0 A_FireCustomMissile("YD_BearerCube",0,0,8,0)
goto Done
FireB:
TNT1 A 0 A_FireCustomMissile("YD_BearerCubeB",0,0,8,0)
goto Done
FireR:
TNT1 A 0 A_FireCustomMissile("YD_BearerCubeR",0,0,8,0)
goto Done
FireO:
TNT1 A 0 A_FireCustomMissile("YD_BearerCubeO",0,0,8,0)
goto Done
FireP:
TNT1 A 0 A_FireCustomMissile("YD_BearerCubeP",0,0,8,0)
goto Done
}
}

actor WildBearAltB_CI : TeamColor_CI
{
states
{
FireX:
TNT1 A 0 A_FireCustomMissile("YD_BearerCube",15,0,8,0)
TNT1 A 0 A_FireCustomMissile("YD_BearerCube",-15,0,8,0)
goto Done
FireB:
TNT1 A 0 A_FireCustomMissile("YD_BearerCubeB",15,0,8,0)
TNT1 A 0 A_FireCustomMissile("YD_BearerCubeB",-15,0,8,0)
goto Done
FireR:
TNT1 A 0 A_FireCustomMissile("YD_BearerCubeR",15,0,8,0)
TNT1 A 0 A_FireCustomMissile("YD_BearerCubeR",-15,0,8,0)
goto Done
FireO:
TNT1 A 0 A_FireCustomMissile("YD_BearerCubeO",15,0,8,0)
TNT1 A 0 A_FireCustomMissile("YD_BearerCubeO",-15,0,8,0)
goto Done
FireP:
TNT1 A 0 A_FireCustomMissile("YD_BearerCubeP",15,0,8,0)
TNT1 A 0 A_FireCustomMissile("YD_BearerCubeP",-15,0,8,0)
goto Done
}
}

actor WildBearAlt2_CI : TeamColor_CI
{
states
{
FireX:
TNT1 A 0 A_FireCustomMissile("YD_BearerCubeCharged",0,0,8,0)
goto Done
FireB:
TNT1 A 0 A_FireCustomMissile("YD_BearerCubeChargedB",0,0,8,0)
goto Done
FireR:
TNT1 A 0 A_FireCustomMissile("YD_BearerCubeChargedR",0,0,8,0)
goto Done
FireO:
TNT1 A 0 A_FireCustomMissile("YD_BearerCubeChargedO",0,0,8,0)
goto Done
FireP:
TNT1 A 0 A_FireCustomMissile("YD_BearerCubeChargedP",0,0,8,0)
goto Done
}
}

actor WildBearMain_CI : TeamColor_CI
{
states
{
FireX:
TNT1 A 0 A_FireCustomMissile("YD_BearerPunch",0,0,8,0)
goto Done
FireB:
TNT1 A 0 A_FireCustomMissile("YD_BearerPunchB",0,0,8,0)
goto Done
FireR:
TNT1 A 0 A_FireCustomMissile("YD_BearerPunchR",0,0,8,0)
goto Done
FireO:
TNT1 A 0 A_FireCustomMissile("YD_BearerPunchO",0,0,8,0)
goto Done
FireP:
TNT1 A 0 A_FireCustomMissile("YD_BearerPunchP",0,0,8,0)
goto Done
}
}