//Pr. Fly - Primary coder
//Conejo - Assistant coder (implemented shield blocks)
//Bull Gator - Refined golem code from Muzaru's Chill Shield ACS
//Trillster - Desync fixes
//Fristo - All sprites except reload
//Rockblockrock - Reload sprites

actor BlockGolemBoss : BaseMM8BDMWep_CBM
{
Tag "$TAGC_11A2"//"$TAGC_11A"
dropitem "BlockDropperWepCDropped"
Weapon.AmmoUse 1
Weapon.AmmoGive 84
Weapon.SlotNumber 1
Obituary "$OB_BGOLEMPUNCH"
weapon.ammotype "BrickInTheWallAmmo"
weapon.ammotype2 "BlockShield"
+WEAPON.NOAUTOAIM
States
{
Spawn:
C_01 C 1
loop
Ready:
        BGHA A 0
        BGHA A 0 ACS_ExecuteAlways(998,0,DYE_BLOCKMAN)
        BBHA L 0 SetPlayerProperty(0,1,4)
        BBHA A 3
        TNT1 A 0 A_GiveInventory("InvulnerableOn_Pickup",1)
        BBHA J 0 ThrustThingZ(0,80,0,1)
        TARM G 0 A_PlaySoundEx("weapon/superarmuse","Weapon")
        BBHA JKLL 3 A_Jumpif(CallACS("CCBM_ButtonCheck",BT_Reload) == True,"ShitOnAShingle")
        BBHA L 0 SetPlayerProperty(0,1,3)
        BBJA L 0 A_Stop
        TARM G 0 A_PlaySoundEx("weapon/blockform","Weapon")
        BBHA G 0 A_SpawnItemEx("BlockmanGearFormer1",0,0,0,0,0,0,0,1)
		BGHA IIII 0 A_SpawnItemEx("BlockmanGearUpFX",100,0,frandom(-100,100),0,0,0,random(0,360),1)
        BBHA KK 1 Offset(-2,0) A_SpawnItemEx("BlockmanGearUpFX",400,0,frandom(-100,100),0,0,0,random(0,360),1)
        BBHA LL 1 Offset(2,0) A_SpawnItemEx("BlockmanGearUpFX",400,0,frandom(-100,100),0,0,0,random(0,360),1)

        BBHA G 0 A_SpawnItemEx("BlockmanGearFormer1",0,0,0,0,0,0,0,1)
        BGHA I 0 A_PlaySound("weapon/BlockBreak","Body",0.15,0)
		BGHA IIII 0 A_SpawnItemEx("BlockmanGearUpFX",100,0,frandom(-100,100),0,0,0,random(0,360),1)
        BBHA KK 1 Offset(-2,0) A_SpawnItemEx("BlockmanGearUpFX",375,0,frandom(-100,100),0,0,0,random(0,360),1)
        BBHA LL 1 Offset(2,0) A_SpawnItemEx("BlockmanGearUpFX",375,0,frandom(-100,100),0,0,0,random(0,360),1)

        BBHA G 0 A_SpawnItemEx("BlockmanGearFormer1",0,0,0,0,0,0,0,1)
        BGHA I 0 A_PlaySound("weapon/BlockBreak","Body",0.15,0)
		BGHA IIII 0 A_SpawnItemEx("BlockmanGearUpFX",100,0,frandom(-100,100),0,0,0,random(0,360),1)
        BBHA KK 1 Offset(-2,0) A_SpawnItemEx("BlockmanGearUpFX",350,0,frandom(-100,100),0,0,0,random(0,360),1)
        BBHA G 0 A_SpawnItemEx("BlockmanGearFormer1",0,0,0,0,0,0,0,1)
        BBHA LL 1 Offset(2,0) A_SpawnItemEx("BlockmanGearUpFX",350,0,frandom(-100,100),0,0,0,random(0,360),1)

        BBHA G 0 A_SpawnItemEx("BlockmanGearFormer1",0,0,0,0,0,0,0,1)
        BGHA I 0 A_PlaySound("weapon/BlockBreak","Body",0.15,0)
		BGHA IIII 0 A_SpawnItemEx("BlockmanGearUpFX",100,0,frandom(-100,100),0,0,0,random(0,360),1)
        BBHA KK 1 Offset(-2,0) A_SpawnItemEx("BlockmanGearUpFX",325,0,frandom(-100,100),0,0,0,random(0,360),1)
        BBHA G 0 A_SpawnItemEx("BlockmanGearFormer1",0,0,0,0,0,0,0,1)
        BBHA LL 1 Offset(2,0) A_SpawnItemEx("BlockmanGearUpFX",325,0,frandom(-100,100),0,0,0,random(0,360),1)
        BBHA G 0 A_SpawnItemEx("BlockmanGearFormer1",0,0,0,0,0,0,0,1)

        BGHA I 0 A_PlaySound("weapon/BlockBreak","Body",0.15,0)
		BGHA IIII 0 A_SpawnItemEx("BlockmanGearUpFX",100,0,frandom(-100,100),0,0,0,random(0,360),1)
        BBHA KK 1 Offset(-2,0) A_SpawnItemEx("BlockmanGearUpFX",350,0,frandom(-100,100),0,0,0,random(0,360),1)
        BBHA G 0 A_SpawnItemEx("BlockmanGearFormer1X",0,0,0,0,0,0,0,1)
        BBHA LL 1 Offset(2,0) A_SpawnItemEx("BlockmanGearUpFX",350,0,frandom(-100,100),0,0,0,random(0,360),1)

        BGHA I 0 A_PlaySound("weapon/BlockBreak","Body",0.15,0)
        BBHA KK 1 Offset(-2,0) A_SpawnItemEx("BlockmanGearUpFX",325,0,frandom(-100,100),0,0,0,random(0,360),1)
        BBHA LL 1 Offset(2,0) A_SpawnItemEx("BlockmanGearUpFX",325,0,frandom(-100,100),0,0,0,random(0,360),1)

        BGHA I 0 A_PlaySound("weapon/BlockBreak","Body",0.15,0)
		BGHA IIII 0 A_SpawnItemEx("BlockmanGearUpFX",100,0,frandom(-100,100),0,0,0,random(0,360),1)
        BBHA K 1 Offset(-2,0) A_SpawnItemEx("BlockmanGearUpFX",300,0,frandom(-100,100),0,0,0,random(0,360),1)
        BBHA L 1 Offset(2,0) A_SpawnItemEx("BlockmanGearUpFX",300,0,frandom(-100,100),0,0,0,random(0,360),1)
        BGHA I 0 A_PlaySound("weapon/BlockBreak","Body",0.15,0)
        BBHA K 1 Offset(-2,0) A_SpawnItemEx("BlockmanGearUpFX",200,0,frandom(-100,100),0,0,0,random(0,360),1)
        BBHA L 1 Offset(2,0) A_SpawnItemEx("BlockmanGearUpFX",200,0,frandom(-100,100),0,0,0,random(0,360),1)

        BGHA I 0 A_PlaySound("weapon/BlockBreak","Body",0.15,0)
		BGHA IIII 0 A_SpawnItemEx("BlockmanGearUpFX",100,0,frandom(-100,100),0,0,0,random(0,360),1)
        BBHA K 1 Offset(-2,0) A_SpawnItemEx("BlockmanGearUpFX",100,0,frandom(-100,100),0,0,0,random(0,360),1)
        BBHA L 1 Offset(2,0) A_SpawnItemEx("BlockmanGearUpFX",100,0,frandom(-100,100),0,0,0,random(0,360),1)
        BGHA I 0 A_PlaySound("weapon/BlockBreak","Body",0.15,0)
        BBHA K 1 Offset(-2,0) A_SpawnItemEx("BlockmanGearUpFX",50,0,frandom(-100,100),0,0,0,random(0,360),1)
        BBHA L 1 Offset(2,0) A_SpawnItemEx("BlockmanGearUpFX",50,0,frandom(-100,100),0,0,0,random(0,360),1)

        BGHA I 0 A_PlaySound("weapon/BlockBreak","Body",0.15,0)
		BGHA IIII 0 A_SpawnItemEx("BlockmanGearUpFX",100,0,frandom(-100,100),0,0,0,random(0,360),1)
        BBHA K 1 Offset(-2,0) A_SpawnItemEx("BlockmanGearUpFX",100,0,frandom(-100,100),0,0,0,random(0,360),1)
        BBHA L 1 Offset(2,0) A_SpawnItemEx("BlockmanGearUpFX",100,0,frandom(-100,100),0,0,0,random(0,360),1)
        BGHA I 0 A_PlaySound("weapon/BlockBreak","Body",0.15,0)
        BBHA K 1 Offset(-2,0) A_SpawnItemEx("BlockmanGearUpFX",50,0,frandom(-100,100),0,0,0,random(0,360),1)
        BBHA L 1 Offset(2,0) A_SpawnItemEx("BlockmanGearUpFX",50,0,frandom(-100,100),0,0,0,random(0,360),1)
        BBHA L 0 SetPlayerProperty(0,0,3)
        BBHA J 0 SetPlayerProperty(0,0,4)
        TNT1 A 0 A_GiveInventory("InvulnerableOff_Pickup",1)

        // [BG] Edited for ACS Pain handling
        //TNT1 A 0 A_GiveInventory("BlockmanSpawnStart_P",1)
        //TNT1 A 0 A_ChangeFlag("NODAMAGEEVENTSCRIPT", False)
        //TNT1 A 0 A_ChangeFlag("USEDAMAGEEVENTSCRIPT", True)
        TNT1 A 0 A_GiveInventory("BlockShield", 150)
        TNT1 A 0 ACS_ExecuteWithResult(CORE_ACS_191,APROP_JumpZ,10,1)
        TNT1 A 0 ACS_ExecuteWithResult(CORE_ACS_191,APROP_Speed,1,2)
        TNT1 A 0 A_TakeInventory("BlockDropperBoss",999)
        
        
        TNT1 AAAA 0 A_SpawnItemEx("BlockDropBreakFX",random(0,24),0,random(28,56),frandom(8,16),0,frandom(4,8),random(0,360),1)
        TNT1 AAAAAA 0 A_SpawnItemEx("BlockDropBreakFX2",random(0,24),0,random(28,56),frandom(10,20),0,frandom(10,20),random(0,360),1)
        TNT1 AAAAAAAA 0 A_SpawnItemEx("BlockDropBreakFX3",random(0,24),0,random(28,56),frandom(12,24),0,frandom(12,24),random(0,360),1)
        BGHA A 0 ACS_NamedExecuteWithResult("BULL_SetState",1)
        BGHA A 0 A_GunFlash
        TNT1 AAA 3 A_SpawnItemEx("BlockmanGearFormer2",0,0,0,0,0,0,0,1)
        TARM G 0 A_PlaySoundEx("weapon/GolemRoar","Voice")
        BGHA A 2 Offset(0,44)
        BGHA A 2 Offset(0,40)
        BGHA A 2 Offset(0,36)
        BGHA A 2 Offset(0,32)
        BGHA A 2 Offset(0,28)
        BGHA A 2 A_WeaponReady(14)
        goto Ready1
		
ShitOnAShingle:
BBHA L 0 SetPlayerProperty(0,0,3)
BBHA J 0 SetPlayerProperty(0,0,4)
BBHA KL 2 A_GiveInventory("BlockShieldAcs_Off_P")
goto Ready1

Ready1:
BGHA A 0 A_JumpIfInventory("BrickInTheWallAmmo",21,"Ready2")
BGHA A 3 A_WeaponReady(WRF_NOFIRE)
BGHA A 0 A_SpawnItemEx("BrickInTheWallAmmoGive2")
goto Ready1
Ready2:
BGHA A 0 A_JumpIfInventory("BrickInTheWallAmmo",42,"Ready3")
BGHA A 3 A_WeaponReady(WRF_NOSECONDARY)
BGHA A 0 A_SpawnItemEx("BrickInTheWallAmmoGive2")
goto Ready1
Ready3:
BGHA A 0 A_JumpIfInventory("BrickInTheWallAmmo",84,"Ready4")
BGHA A 3 A_WeaponReady(WRF_ALLOWRELOAD|WRF_NOSECONDARY)
BGHA A 0 A_SpawnItemEx("BrickInTheWallAmmoGive2")
goto Ready1
Ready4:
BGHA A 3 A_WeaponReady(WRF_ALLOWRELOAD)
BGHA A 0 A_SpawnItemEx("BrickInTheWallAmmoGive2")
goto Ready1

Deselect:
TNT1 A 0 A_GiveInventory("EducatedFlag",999)
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
BGHA A 1 A_Lower
Loop
Select:
TNT1 A 0 A_GiveInventory("EducatedFlag",1)
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
BGHA A 1 A_Raise
Loop
Fire:
BGHA A 0 A_WeaponReady(WRF_NOFIRE)
BGHA A 0 A_JumpIfInventory("HulkSmashAmmo",1,"AltCrush")  
BGHA A 0 A_PlaySoundEx("Weapon/pharaohpunchswing","Weapon")
BGHA ABCCC 2
BGHA G 0 A_GiveInventory("RoarChance_P",1)
//PunchHold:
//BGHA D 1 A_JumpIfInventory("ReadyAimFistFlag",70,"Punching")
//BGHA D 0 A_GiveInventory("ReadyAimFistFlag",1)
//BGHA D 0 A_Refire("PunchHold")
Punching:
BGHA C 0 A_TakeInventory("ReadyAimFistFlag",99)
BGHA C 0 A_PlaySoundEx("weapon/golembigslappa","Weapon")
BGHA C 0 A_GiveInventory("GolemBlockmanMain_CI",1)
BGHA C 0 A_SpawnItemEx("BrickInTheWallAmmoTake21")
BGHA C 0 A_Quake(2,14,0,8,"none")
BGHA CEFF 2
BGHA F 11 A_WeaponReady(WRF_NOFIRE|WRF_NOSWITCH)
BGHA G 2 //38 frames 
BGHA G 0 A_TakeInventory("BreakTheChainFlag",1)
Goto Ready1


Altfire:
BGHA A 0 A_WeaponReady(WRF_NOFIRE)
TNT1 A 0 A_JumpIfInventory("BlockIsHoldingShield",1,"FireEnd")
BGHA I 0 A_PlaySoundEx("weapon/deepdiggerdig", "weapon")
BGHA I 1 A_SpawnItemEx("BlockG_TempBlock",64,35,-80,0,0,0,20,1)
BGHA I 0 A_SpawnItemEx("BlockG_TempBlock2",64,-35,-80,0,0,0,20,1)
BGHA IJJ 2
BGHA J 0 A_GiveInventory("HulkSmashAmmo",1)
BGHA J 0 A_WeaponReady(WRF_NOSECONDARY|WRF_NOBOB)
BGHA J 2
BGHA J 0 A_WeaponReady(WRF_NOSECONDARY|WRF_NOBOB)
TNT1 A 0 A_GiveInventory("BlockGolem2Speed_P")
TNT1 A 0 A_GiveInventory("BlockmanShieldHitbox_P",1)  
goto FireHold

FireHold:
BGHA J 0 A_GiveInventory("BlockIsHoldingShield",1)
BGHA J 0 A_GiveInventory("HulkSmashAmmo",1)
//BGHA J 0 A_SpawnItemEx("BlockG_TempBlock",64,35,20,0,0,0,-20,1)
//BGHA J 0 A_SpawnItemEx("BlockG_TempBlock",64,-35,20,0,0,0,20,1)
BGHA J 1 A_WeaponReady(WRF_NOBOB)
//BGHA J 0 A_SpawnItemEx("BlockG_TempBlock",64,35,20,0,0,0,-20,1)
//BGHA J 0 A_SpawnItemEx("BlockG_TempBlock",64,-35,20,0,0,0,20,1)
BGHA J 0 A_JumpIfInventory("HulkSmashAmmo",280,"FireEnd") 
BGHA J 0 A_GiveInventory("HulkSmashAmmo",1)
BGHA J 1 A_WeaponReady(WRF_NOBOB)  
BGHA J 0 A_JumpIfInventory("HulkSmashAmmo",280,"FireEnd") 
Loop

AltCrush:
TNT1 A 0 A_TakeInventory("BlockGolem2Speed_P")
BGHA G 0 A_TakeInventory("HulkSmashAmmo",999)
KINH S 0 A_GiveInventory("StopShield",1)
BGHA J 1
//BGHA J 0 A_SpawnItemEx("BlockG_TempBlock",64,35,20,0,0,0,-20,1)
//BGHA J 0 A_SpawnItemEx("BlockG_TempBlock",64,-35,20,0,0,0,20,1)
BGHA J 1
//BGHA J 0 A_SpawnItemEx("BlockG_TempBlock",64,35,20,0,0,0,-20,1)
//BGHA J 0 A_SpawnItemEx("BlockG_TempBlock",64,-35,20,0,0,0,20,1)
BGHA K 1
//BGHA K 0 A_SpawnItemEx("BlockG_TempBlock",64,35,20,0,0,0,-20,1)
//BGHA K 0 A_SpawnItemEx("BlockG_TempBlock",64,-35,20,0,0,0,20,1)
BGHA K 1
//BGHA K 0 A_SpawnItemEx("BlockG_TempBlock",64,35,20,0,0,0,-20,1)
//BGHA K 0 A_SpawnItemEx("BlockG_TempBlock",64,-35,20,0,0,0,20,1)
BGHA G 0 A_GiveInventory("YouveBeenBlockedFlag",1)
BGHA G 0 A_PlaySoundEx("weapon/powerstone","Weapon") 
BGHA G 0 A_SpawnItemEx("BrickInTheWallAmmoTake42")
BGHA G 0 A_GiveInventory("GolemBlockmanAltCrush_CI")
BGHA L 10 Offset(0,48)
BGHA L 10 Offset(0,48)
KINH S 0 A_TakeInventory("StopShield",1)
BGHA L 1 offset(0,34)
BGHA K 2 offset(0,26)
BGHA J 2 offset(0,40)
BGHA A 2 offset(0,20)
BGHA A 2 offset(0,22)
BGHA A 2 offset(0,24)
BGHA A 2 offset(0,26)
BGHA A 2 offset(0,28)
BGHA A 2 offset(0,30)
Goto Ready1


FireEnd:
BGHA G 0 A_GiveInventory("RoarChance_P",1)
TNT1 A 0 A_TakeInventory("BlockGolem2Speed_P")
BGHA G 0 A_TakeInventory("HulkSmashAmmo",999)
BGHA S 0 A_GiveInventory("StopShield",1)
BGHA J 1
BGHA G 0 A_GiveInventory("YouveBeenBlockedFlag",1)
BGHA G 0 A_PlaySoundEx("weapon/powerstone","Weapon")
BGHA G 0 A_SpawnItemEx("BrickInTheWallAmmoTake84")
BGHA G 0 A_GiveInventory("GolemBlockmanAlt_CI")
AHUG C 0 A_GiveInventory("GolemBlockmanAlt2_CI",1)
BGHA KL 1
BGHA S 0 A_TakeInventory("StopShield",1)
TNT1 A 15
BGHA A 3 Offset(0,44)
BGHA A 3 Offset(0,40)
BGHA A 3 Offset(0,36)
BGHA A 3 Offset(0,32)
BGHA A 3 Offset(0,28)
BGHA A 6 
Goto Ready1

Reload:
BGHA A 0 A_WeaponReady(WRF_NOFIRE)
BGHA A 0 ACS_NamedExecuteWithResult("BULL_SetState",4)
BGHA G 0 A_GiveInventory("RoarChance_P",1)
BGHA A 0 A_PlaySoundEx("Weapon/pharaohpunchswing","Weapon")
BGHA AM 2
BGHA N 2 Offset(2,0)
BGHA N 2 Offset(-2,0)
BGHA N 2 Offset(2,0)
BGHA N 2 Offset(-2,0)
BGHA OPQR 1 A_WeaponReady(WRF_NOFIRE)
BGHA B 0 A_Quake(5,9,0,48)
BGHA G 0 A_SpawnItemEx("BrickInTheWallAmmoTake42")
BGHA G 0 A_GiveInventory("GolemBlockmanReload_CI",1)
BGHA G 0 A_PlaySoundEx("weapon/golemgroundslam","Weapon")
TNT1 A 18
BGHA A 2 Offset(0,70)
BGHA A 2 Offset(0,60)
BGHA A 2 Offset(0,50)
BGHA A 2 Offset(0,40)
BGHA A 2 Offset(0,30)
BGHA A 2 A_WeaponReady(14)
Goto Ready1

Flash:
TNT1 A 1 A_JumpIf(ACS_ExecuteWithResult(C_CHECK_TARGET_OOC)==0,"NoFlash")//A_JumpIfInventory("IsDead",1,"NoFlash")
TNT1 B 0 A_JumpIf(z-floorz>=0, "Flash.UpsieDaisies")
loop

Flash.UpsieDaisies:
TNT1 A 1 A_JumpIf(velz<=-8.24, "Flash.SoundCheck")
TNT1 B 0 A_CheckFloor("Flash")
loop

Flash.SoundCheck:
TNT1 A 1
TNT1 B 0 A_CheckFloor("Flash.Down")
loop

Flash.Down:
TNT1 A 1 A_PlaySoundEx("misc/fatland","Body")
goto Flash

}
}

actor BrickInTheWallAmmoGive2 : BasicHelper
{
	args 2
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_GiveToTarget("BrickInTheWallAmmo", args[0])
			stop
	}
}

actor BrickInTheWallAmmoTake21 : BasicHelper
{
	args 21
	States
	{
		Spawn:
			TNT1 A 0
			TNT1 A 0 A_TakeFromTarget("BrickInTheWallAmmo", args[0], TIF_NOTAKEINFINITE)
			stop
	}
}
actor BrickInTheWallAmmoTake42 : BrickInTheWallAmmoTake21 { args 42 }
actor BrickInTheWallAmmoTake84 : BrickInTheWallAmmoTake21 { args 84 }

ACTOR BlockIsHoldingShield : Powerup
{
 Powerup.Duration 4
}

actor BlockDropperBoss : BaseMM8BDMWep_CBM
{
Tag "$TAGC_11A"
dropitem "BlockDropperWepCDropped"
Weapon.AmmoUse 1
Weapon.AmmoGive 84
Weapon.SlotNumber 1
Obituary "$OB_BLOCKSPLAT"
weapon.ammotype "BrickInTheWallAmmo"
weapon.ammotype2 "BlockShield"
//inventory.icon "ICEMANI1"
+WEAPON.NOAUTOAIM
States
{
Spawn:
C_01 C 1
loop
Ready:
TNT1 AA 0
BBHA A 0 ACS_ExecuteAlways(998,0,DYE_BLOCKMAN)
TNT1 A 0 A_JumpIfInventory("IsBot",1,"BotMoveCheck")
BBHA A 0 A_GunFlash
BBHA A 2 ThrustThingZ(0,80,0,0)
BBHA A 0 ACS_NamedExecuteWithResult("BULL_SetState",2)
goto ReadyTumble1
Ready1:
BBHA A 0 A_JumpIfInventory("BrickInTheWallAmmo",12,"Ready2")
BBHA A 2 A_WeaponReady(WRF_NoPrimary|WRF_ALLOWRELOAD)
BBHA A 0 A_GiveInventory("BrickInTheWallAmmo",1)
loop
Ready2:
TNT1 A 0 A_JumpIfInventory("IsBot",1,"BotMoveCheck")
BBHA A 2 A_WeaponReady(WRF_ALLOWRELOAD)
BBHA A 0 A_GiveInventory("BrickInTheWallAmmo",1)
loop
ReadyTumble:
TNT1 A 0 A_TakeInventory("TumbleCheck")
BBHA NOQR 2 A_GiveInventory("BrickInTheWallAmmo",1)
ReadyTumble1:
BBHA N 1 A_WeaponReady(WRF_ALLOWRELOAD)
BBHA A 0 A_GiveInventory("BrickInTheWallAmmo",1)
BBHA N 1 A_JumpIf(z-floorz==0, "Ready1")
BBHA O 1 A_WeaponReady(WRF_ALLOWRELOAD)
BBHA A 0 A_GiveInventory("BrickInTheWallAmmo",1)
BBHA O 1 A_JumpIf(z-floorz==0, "Ready1")
BBHA Q 1 A_WeaponReady(WRF_ALLOWRELOAD)
BBHA A 0 A_GiveInventory("BrickInTheWallAmmo",1)
BBHA Q 1 A_JumpIf(z-floorz==0, "Ready1")
BBHA R 1 A_WeaponReady(WRF_ALLOWRELOAD)
BBHA A 0 A_GiveInventory("BrickInTheWallAmmo",1)
BBHA R 1 A_JumpIf(z-floorz==0, "Ready1")
loop

BotMoveCheck:
BBHA A 2 A_GiveInventory("BrickInTheWallAmmo",1)
BBHA A 0 A_Jump(256,"Fire","Altfire","Reload")
loop

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

Fire:
BBHA J 0 A_PlaySoundEx("weapon/blockingit","Weapon")
BBHA JKKLLLLLL 1
BBHA KJI 2 A_GiveInventory("BabyBlockmanMain_CI")
BBHA HHHHHHHMAAAA 2
goto Ready1

Altfire:
BBHA A 0 A_JumpIfInventory("YouCanNowDropTheBlock",1,"AltfireReleaseDelay")
BBHA A 0 A_JumpIfInventory("BrickInTheWallAmmo",21,"AltfireReadyUp")
goto NoAmmo
AltfireReadyUp:
BBHA G 0 A_PlaySoundEx("weapon/BlockItUp","Weapon")
BBHA AB 2
BBHA G 0 A_GiveInventory("BabyBlockmanAlt_CI",1)
BBHA CCCC 2
BBHA A 0 A_Refire("AltfireRelease")
BBHA CCBA 2
goto Ready1
AltfireReleaseDelay:
BBHA ABC 2
AltfireRelease:
BBHA G 0 A_PlaySoundEx("weapon/BlockItDown","Weapon")
BBHA G 0 A_GiveInventory("DropTheBlock",1)
BBHA DEFFFFFFFFFGAA 2
goto Ready1

NoAmmo:
BBHA A 2 A_GiveInventory("BrickInTheWallAmmo",1)
goto Ready1

Reload:
BBHA A 0 A_CheckFloor("Thwomped")
Stomped:
BBHA H 0 A_JumpIfInventory("BlockSplatCooldown",1,"WobbleCheck")
BBHA A 0 ACS_NamedExecuteWithResult("BULL_SetState",2)
CONH M 0 A_PlaySoundEx("weapon/blockfall","Weapon")
StompedLoop:
BBHA N 1 Offset(0, 56)A_JumpIf(z-floorz==0, "Stomp")
TNT1 A 0 ThrustThingZ(0,20,1,1)
TNT1 A 0 A_SpawnItemEx("BlockM_Crush",0,0,-10,0,0,-10)
TNT1 A 0 A_JumpIfInventory("CutterFlag",350, "Stomp")
TNT1 A 0 A_GiveInventory("CutterFlag",1)
BBHA N 1 Offset(0, 56)A_JumpIf(z-floorz==0, "Stomp")
TNT1 A 0 ThrustThingZ(0,20,1,1)
TNT1 A 0 A_SpawnItemEx("BlockM_Crush",0,0,-10,0,0,-10)
TNT1 A 0 A_JumpIfInventory("CutterFlag",350, "Stomp")
TNT1 A 0 A_GiveInventory("CutterFlag",1)

BBHA O 1 Offset(0, 56)A_JumpIf(z-floorz==0, "Stomp")
TNT1 A 0 ThrustThingZ(0,20,1,1)
TNT1 A 0 A_SpawnItemEx("BlockM_Crush",0,0,-10,0,0,-10)
TNT1 A 0 A_JumpIfInventory("CutterFlag",350, "Stomp")
TNT1 A 0 A_GiveInventory("CutterFlag",1)
BBHA O 1 Offset(0, 56)A_JumpIf(z-floorz==0, "Stomp")
TNT1 A 0 ThrustThingZ(0,20,1,1)
TNT1 A 0 A_SpawnItemEx("BlockM_Crush",0,0,-10,0,0,-10)
TNT1 A 0 A_JumpIfInventory("CutterFlag",350, "Stomp")
TNT1 A 0 A_GiveInventory("CutterFlag",1)

BBHA Q 1 Offset(0, 56)A_JumpIf(z-floorz==0, "Stomp")
TNT1 A 0 ThrustThingZ(0,20,1,1)
TNT1 A 0 A_SpawnItemEx("BlockM_Crush",0,0,-10,0,0,-10)
TNT1 A 0 A_JumpIfInventory("CutterFlag",350, "Stomp")
TNT1 A 0 A_GiveInventory("CutterFlag",1)
BBHA Q 1 Offset(0, 56)A_JumpIf(z-floorz==0, "Stomp")
TNT1 A 0 ThrustThingZ(0,20,1,1)
TNT1 A 0 A_SpawnItemEx("BlockM_Crush",0,0,-10,0,0,-10)
TNT1 A 0 A_JumpIfInventory("CutterFlag",350, "Stomp")
TNT1 A 0 A_GiveInventory("CutterFlag",1)

BBHA R 1 Offset(0, 56)A_JumpIf(z-floorz==0, "Stomp")
TNT1 A 0 ThrustThingZ(0,20,1,1)
TNT1 A 0 A_SpawnItemEx("BlockM_Crush",0,0,-10,0,0,-10)
TNT1 A 0 A_JumpIfInventory("CutterFlag",350, "Stomp")
TNT1 A 0 A_GiveInventory("CutterFlag",1)
BBHA R 1 Offset(0, 56)A_JumpIf(z-floorz==0, "Stomp")
TNT1 A 0 ThrustThingZ(0,20,1,1)
TNT1 A 0 A_SpawnItemEx("BlockM_Crush",0,0,-10,0,0,-10)
TNT1 A 0 A_JumpIfInventory("CutterFlag",350, "Stomp")
TNT1 A 0 A_GiveInventory("CutterFlag",1)
loop
Stomp:
BBHA H 0 A_PlaySoundEx("weapon/blocksplat","Weapon")
BBHA H 0 ACS_NamedExecuteWithResult("BULL_SetState",3)
BBHA H 0 A_GiveInventory("ConcreteShockLanding_P",1)
BBHA H 0 A_GiveInventory("BlockSplatCooldownGiver",1)
BBHA H 0 A_TakeInventory("CutterFlag",350)
TNT1 A 0 A_TakeInventory("TumbleCheck")
BBHA HHH 2 A_Stop
BBHA HM 2
goto Ready1

WobbleCheck:
BBHA H 0 A_JumpIf(z-floorz==0,"NoAmmoReload")
BBHA H 0 A_JumpIfInventory("TumbleCheck",1,"ReadyTumble")
TNT1 A 0 A_TakeInventory("TumbleCheck")
goto NoAmmoReload

Thwomped:
BBHA H 0 A_JumpIfInventory("BrickInTheWallAmmo",42,"Thwomper")
goto WobbleCheck
Thwomper:
BBHA ABC 2
BBHA C 0 ThrustThingZ(0,80,0,1)
BBHA C 0 A_SpawnItemEx("BrickInTheWallAmmoTake42")
BBHA C 0 A_SpawnItemEx("BlockG_Fist",0,0,0,0,0,0,0,1)
BBHA C 2
BBHA A 0 ACS_NamedExecuteWithResult("BULL_SetState",2)
TNT1 A 0 A_GiveInventory("TumbleCheck")
BBHA NOQRNOQR 2//some delay before ammo gain
goto ReadyTumble

NoAmmoReload:
BBHA A 2
BBHA A 0 A_GiveInventory("BrickInTheWallAmmo",1)
Goto Ready1

Flash:
TNT1 A 1 A_JumpIfInventory("IsDead",1,"NoFlash")
TNT1 A 0
loop

}
}

actor BrickInTheWallAmmo : Ammo
{
inventory.amount 1
inventory.maxamount 84
+INVENTORY.IGNORESKILL
}

Actor NoEducationFlag : OnceC {}
Actor BlockTuah : OnceC {}
Actor DropTheBlock : Powerup { Powerup.Duration 25 }
Actor YouCanNowDropTheBlock : Powerup { Powerup.Duration 25 }
Actor GolemRoarCooldown : Powerup { Powerup.Duration 110 }
Actor BreakTheChainFlag : Powerup { Powerup.Duration 5 }
Actor BlockShieldOffBuffer : PowerUp {Powerup.Duration 4}
Actor YouveBeenBlockedFlag : Powerup { Powerup.Duration 35 }
Actor TumbleCheck : OnceC {}

actor BlockSplatCooldown : Powerup {}
  
actor BlockSplatCooldownGiver : PowerupGiver
{ 
powerup.type "BlockSplatCooldown"
Powerup.Duration 70
+INVENTORY.AUTOACTIVATE   
} 

actor HulkSmashAmmo : Inventory
{
inventory.amount 1
inventory.maxamount 280
}

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

actor BlockHealthFlag : Ammo
{
inventory.amount 1
inventory.maxamount 50
+INVENTORY.IGNORESKILL
}

actor BlockShield : Ammo
{
inventory.amount 1
inventory.maxamount 150
}

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

actor RoarChanceTime : Ammo
{
inventory.amount 1
inventory.maxamount 4
+INVENTORY.IGNORESKILL
}

actor RoarChance_P : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_GiveInventory("RoarChanceTime",random(1,4))
TNT1 A 0 A_JumpIfInventory("GolemRoarCooldown",1,"Stopper")
TNT1 A 0 A_JumpIfInventory("RoarChanceTime",4,"DoTheRoar")
goto Stopper
DoTheRoar:
TARM G 0 A_PlaySoundEx("weapon/GolemRoar","Voice")
TNT1 A 0 A_GiveInventory("GolemRoarCooldown")
Stopper:
TNT1 A 0 A_TakeInventory("RoarChanceTime",4)
stop
}
}

actor GiveAmmoBlockShieldCheck : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("BlockShield",1,"AreYouBlockman")
stop
AreYouBlockman:
TNT1 A 0 A_JumpIfInventory("BlockGolemBoss",1,"Yup")
TNT1 A 0 A_TakeInventory("BlockShield",999)
stop
Yup:
TNT1 A 0
stop
}
}

actor BlockmanArmorAdjustedProtection : PowerProtection
{
Powerup.Duration 0x7FFFFFFD
damagefactor "LightRyu_Stop", 15.0
}

actor BlockDropProtect : PowerProtection
{
Powerup.Duration 5
DamageFactor "BlockM_Drop", 1.0
}

actor BlockRainProtect : PowerProtection
{
Powerup.Duration 6
DamageFactor "BlockM_Rain", 0.0
}

actor BlockmanSpawnStart_P : CustomInventory
{
States
{
Pickup:
TNT1 A 0 //ACS_NamedExecuteAlways("CBM_BlockmanArmor",0,650)
TNT1 A 0 //A_GiveInventory("LMSCheckPickup")
TNT1 A 0 //A_JumpIfInventory("IsLMSFlag",1,2)
TNT1 A 0 A_SpawnItemEx("BlockShieldWatcher")
stop
TNT1 A 0 A_SpawnItemEx("BlockShieldWatcherLMS")
stop
}
}

actor BlockmanGearUpFX
{
PROJECTILE
+NOINTERACTION
+THRUACTORS
Damage (0)
scale 2.5
speed 30
reactiontime 50
States
{
Spawn:
TNT1 AA 0
BGOB C 0 A_RearrangePointers(AAPTR_DEFAULT,AAPTR_DEFAULT,AAPTR_TARGET)//Target >> Tracer
BGOB C 0 A_FaceTarget
TNT1 A 0 A_Jump(256,"FX1","FX2","FX3")
FX1:
TNT1 A 1 A_FaceTarget
BGOB C 1 A_JumpIfCloser(20,"Death")
goto Spawn2
FX2:
TNT1 A 1 A_FaceTarget
BGOB D 1 A_JumpIfCloser(20,"Death")
goto Spawn2
FX3:
TNT1 A 1 A_FaceTarget
BDRP H 1 A_JumpIfCloser(20,"Death")
Spawn2:
BGOB "#" 0 A_JumpIfCloser(20,"Death")
BGOB "#" 0 A_SeekerMissile(90,90,SMF_PRECISE)
BGOB "#" 1 A_JumpIfCloser(20,"Death")
BGOB "#" 0 A_Countdown
BGOB "#" 0 A_JumpIf(ACS_ExecuteWithResult(C_CHECK_TARGET_OOC)==0,"Death")
loop

Death:
TNT1 A 0
stop

}
}

actor BlockmanGearFormer1
{
PROJECTILE
+NOINTERACTION
+THRUACTORS
Damage (0)
renderstyle add
alpha 0.01
scale 2.5
reactiontime 18
States
{
Spawn:
TNT1 A 0
TNT1 AA 0
SpawnLoop:
BFRM A 1 A_Warp(AAPTR_TARGET,0,0,28,0,24)
BFRM A 0 A_FadeIn(0.08)
BFRM A 0 A_SetScale(scalex-0.135)
BFRM A 0 A_Countdown
loop
}
}

actor BlockmanGearFormer1X : BlockmanGearFormer1
{
alpha 0.11
scale 3.5
States
{
Spawn:
TNT1 A 0
TNT1 AA 0
SpawnLoop:
BFRM A 1 A_Warp(AAPTR_TARGET,0,0,28,0,24)
BFRM A 0 A_FadeIn(0.112)
BFRM A 0 A_SetScale(scalex-0.189)
BFRM A 0 A_Countdown
loop
}
}

actor BlockmanGearFormer2 : BlockmanGearFormer1
{
alpha 1.0
scale 0.1
States
{
Spawn:
TNT1 A 0
TNT1 AA 0
SpawnLoop:
BFRM B 1 A_FadeOut(0.12)
BFRM B 0 A_SetScale(scalex+0.27)
BFRM B 0 A_Countdown
loop
}
}

actor BlockShieldAcs_On_P : CustomInventory
{
States
{
Pickup:
//TNT1 A 0 A_SpawnItemEx("BlockShieldInvuln_H",0,0,0,0,0,0,0,1)
//TNT1 A 0 A_SpawnItemEx("StoneDestroyedFX",0,0,0,0,0,0,0,1)
TNT1 A 0 SetPlayerProperty(0,1,16)//Buddha on
TNT1 A 0 A_GiveInventory("BlockmanArmorAdjustedProtection",1)
TNT1 A 0 A_TakeInventory("GuarddownFlag",99)
MAGB C 0 ACS_ExecuteAlways(CORE_ACS_191,0,APROP_JumpZ,10,1)
TNT1 A 0 ACS_ExecuteAlways(CORE_ACS_191,0,APROP_Speed,1,2)
TNT1 A 0 A_GiveInventory("BlockGolemBoss",1)
TNT1 A 0 A_TakeInventory("BlockDropperBoss",999)
TNT1 A 0 ACS_NamedExecuteAlways("C_BlockSHIELD",0,3)//Record current health

stop
}
}

actor BlockShieldAcs_Off_P : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("BlockShield",1,"EpicFail")
TNT1 A 0 A_JumpIfInventory("NoEducationFlag",1,"Pickup2")
stop
Pickup2:
TNT1 A 0 A_JumpIfInventory("BlockTuah",1,"EpicFail")
TNT1 A 0 A_GiveInventory("BlockTuah",1)
TNT1 AAAA 0 A_SpawnItemEx("BlockDropBreakFX",random(0,24),0,random(28,56),frandom(8,16),0,frandom(4,8),random(0,360),1)
TNT1 AAAAAA 0 A_SpawnItemEx("BlockDropBreakFX2",random(0,24),0,random(28,56),frandom(10,20),0,frandom(10,20),random(0,360),1)
TNT1 AAAAAAAA 0 A_SpawnItemEx("BlockDropBreakFX3",random(0,24),0,random(28,56),frandom(12,24),0,frandom(12,24),random(0,360),1)
TNT1 A 0 A_SpawnItemEx("BlockNukedHisMecha",0,0,28,0,0,0,0,1)
TNT1 A 0 A_GiveInventory("YouveBeenBlockedFlag",1)
TNT1 A 0 A_SpawnItemEx("BlockShieldInvuln_H",0,0,0,0,0,0,0,1)
TNT1 A 0 ACS_ExecuteAlways(CORE_ACS_191,0,APROP_JumpZ,15,1)
TNT1 A 0 ACS_ExecuteAlways(CORE_ACS_191,0,APROP_Speed,1,1)
TNT1 A 0 A_TakeInventory("BlockGolem2Speed_P")
TNT1 A 0 A_TakeInventory("HulkSmashAmmo",999)
TNT1 A 0 A_TakeInventory("EducatedFlag",1)
TNT1 A 0 A_GiveInventory("StopShield",1)
TNT1 A 0 A_TakeInventory("BlockmanArmorAdjustedProtection",1)
TNT1 A 0 A_GiveInventory("BlockDropperBoss",1)
TNT1 A 0 A_TakeInventory("BlockGolemBoss",999)
TNT1 A 0 A_TakeInventory("BlockShield",999)
stop
EpicFail:
TNT1 A 0
stop
}
}

actor BlockShieldAcs_Update_P : CustomInventory
{
States
{
Pickup:
TNT1 A 0 A_JumpIfInventory("BlockGolemBoss",1,1)
Stop
TNT1 A 0 A_JumpIfInventory("BlockHealthFlag",0,"No")//650//CallACS("cbm_countinv_acs",103,0)+1
TNT1 A 0 A_JumpIf(health>ACS_ExecuteWithResult(CBM_FetchMyHealth,1)*135/65,1)//300
stop
TNT1 A 0 ACS_NamedExecuteAlways("C_BlockSHIELD",0,1)//Updated recorded health to higher number
stop
No:
TNT1 A 0
stop
}
}

actor BlockShieldInvuln_H : BasicHelper
{
states
{
Spawn:
TNT1 A 0
TNT1 A 0 A_GiveToTarget("InvulnerableOn_Pickup",1)
TNT1 AAAAAA 1 A_JumpIf(ACS_ExecuteWithResult(C_CHECK_TARGET_OOC)==0,"Death")
TNT1 A 4 A_GiveToTarget("InvulnerableOff_Pickup",1)
Stop
}
}

actor BlockShieldWatcher : BasicHelper
{
+SERVERSIDEONLY
Mass 1
states
{
Spawn:
TNT1 A 0
TNT1 A 5//Delay for if MaxHealth gets changed somehow
goto SpawnRestart
SpawnL:
TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(C_CHECK_TARGET_OOC)==0,"Death")
TNT1 A 0
TNT1 A 1 A_GiveToTarget("BlockShieldAcs_Update_P",1)
TNT1 A 0 A_JumpIfInTargetInventory("BlockShield",Args[2],"SpawnL")//250
TNT1 A 0 A_JumpIfInTargetInventory("BlockShield",1,"SpawnL")
goto SpawnBrokenStart
SpawnBrokenStart:
TNT1 A 0 A_GiveToTarget("BlockShieldAcs_Off_P",1)
goto SpawnBrokenL
SpawnBrokenL:
TNT1 A 1 A_JumpIf(ACS_ExecuteWithResult(C_CHECK_TARGET_OOC)==0,"Death")
loop
SpawnRestart:
TNT1 A 0 A_SetArg(2,CallACS("cbm_getTIDPointerhealth",2,1)*5/13)//Record Target MaxHP Shield Ratio
TNT1 A 1 A_GiveToTarget("BlockShieldAcs_On_P",1)
goto SpawnL
}
}
actor BlockShieldWatcherLMS : BlockShieldWatcher
{
Mass 1
}

actor BlockNukedHisMecha : BasicExplosion
{
Obituary "$OB_BGOLEMBREAK"
damagetype "BlockM_Explode"
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_Explode(5,128,0,0,64)
TNT1 AAA 0 A_SpawnItemEx("BasicBoom5FX_Y",random(-32,32),random(-32,32),random(-32,64),0,0,0,0,1+32)
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX",random(0,24),0,random(28,56),frandom(10,20),0,frandom(10,20),random(0,360),1)
TNT1 AAA 0 A_SpawnItemEx("BlockDropBreakFX2",random(0,24),0,random(28,56),frandom(10,20),0,frandom(10,20),random(0,360),1)
TNT1 AAA 0 A_SpawnItemEx("BlockDropBreakFX3",random(0,24),0,random(28,56),frandom(12,24),0,frandom(12,24),random(0,360),1)
TNT1 A 5 A_PlaySoundEx("classes/drillexplode","Auto")
TNT1 A 0 A_Explode(5,128,0,0,64)
TNT1 AAA 0 A_SpawnItemEx("BasicBoom5FX_Y",random(-32,32),random(-32,32),random(-32,64),0,0,0,0,1+32)
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX",random(0,24),0,random(28,56),frandom(10,20),0,frandom(10,20),random(0,360),1)
TNT1 AAA 0 A_SpawnItemEx("BlockDropBreakFX2",random(0,24),0,random(28,56),frandom(10,20),0,frandom(10,20),random(0,360),1)
TNT1 AAA 0 A_SpawnItemEx("BlockDropBreakFX3",random(0,24),0,random(28,56),frandom(12,24),0,frandom(12,24),random(0,360),1)
TNT1 A 5 A_PlaySoundEx("classes/drillexplode","Auto")
TNT1 A 0 A_Explode(5,128,0,0,64)
TNT1 AAA 0 A_SpawnItemEx("BasicBoom5FX_Y",random(-32,32),random(-32,32),random(-32,64),0,0,0,0,1+32)
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX",random(0,24),0,random(28,56),frandom(10,20),0,frandom(10,20),random(0,360),1)
TNT1 AAA 0 A_SpawnItemEx("BlockDropBreakFX2",random(0,24),0,random(28,56),frandom(10,20),0,frandom(10,20),random(0,360),1)
TNT1 AAA 0 A_SpawnItemEx("BlockDropBreakFX3",random(0,24),0,random(28,56),frandom(12,24),0,frandom(12,24),random(0,360),1)
TNT1 A 5 A_PlaySoundEx("classes/drillexplode","Auto")
stop
}
}

actor BlockGolemSpeed_P : PowerSpeed
{
Speed 0.5
powerup.duration 0x7fffffff
+POWERSPEED.NOTRAIL
}

actor BlockGolem2Speed_P : PowerSpeed
{
Speed 0.5
powerup.duration 0x7fffffff
+POWERSPEED.NOTRAIL
}

actor BlockGolemPunch
{
Translation "192:192=193:193", "198:198=194:194"
PROJECTILE
damagetype "BlockM_Fist"
Obituary "$OB_BGOLEMPUNCH"
+DONTBLAST
+SKYEXPLODE
+DONTREFLECT
damage (35)
Radius 20
Height 20
speed 45
scale 2.5
States
{
Spawn:
GIGO AA 0
TNT1 A 0 ACS_NamedExecuteAlways("BULL_Tidifier", 0)
BGOF FFFFFFFFFF 1 A_SpawnItemEx("BlockGolemPunchTrail",0,0,0,0,0,0,0,1)
Death:
	BGOF F 1 A_GiveToTarget("BreakTheChainFlag",1)
	TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX2",random(-8,8),random(-8,8),random(-8,8),6,frandom(-8,8),frandom(8,8),random(0,360),1)
    TNT1 AA 0 A_SpawnItemEx("BlockDropBreakFX3",random(-8,8),random(-8,8),random(-8,8),6,frandom(-8,8),frandom(8,8),random(0,360),1,128)
stop
Crash:
XDeath:
	BGOF F 1 A_GiveToTarget("BreakTheChainFlag",1)
	TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX",random(-8,8),random(-8,8),random(-8,8),6,frandom(-8,8),frandom(8,8),random(0,360),1)
    TNT1 AA 0 A_SpawnItemEx("BlockDropBreakFX3",random(-12,12),random(-12,12),random(-12,12),6,frandom(-8,8),frandom(8,8),random(0,360),1,128)
stop
}
}

ACTOR BlockGolemPunchTrail
{ 
	Translation "192:192=193:193", "198:198=194:194"
	Scale 2.5
	+NOINTERACTION
	+CLIENTSIDEONLY
	+NOGRAVITY
	reactiontime 70
  States
  {
  Spawn:
    BDRO CC 0
	TNT1 A 1
	SpawnLoop:
    BGOF G 1 A_JumpIfInTargetInventory("BreakTheChainFlag",1,"Death")
	BGOF G 0 A_Countdown
	loop
	Death:
	BGOF G 3
    TNT1 AA 0 A_SpawnItemEx("BlockDropBreakFX3",random(-8,8),random(-8,8),random(0,8),frandom(2,6),frandom(-8,8),frandom(4,8),random(0,360),1,128)
	Stop
  }
}

actor BlockGolemPunchB : BlockGolemPunch{translation "192:192=205:205","198:198=74:74"} 
actor BlockGolemPunchR : BlockGolemPunch{translation "192:192=171:171","198:198=41:41"}
actor BlockGolemPunchO : BlockGolemPunch{translation "192:192=104:104","198:198=128:128"}
actor BlockGolemPunchP : BlockGolemPunch{translation "192:192=229:229","198:198=232:232"}

actor BlockG_TempBlock
{
Scale 2.5
-SOLID
+NOGRAVITY 
+DONTBLAST
+NOINTERACTION
+NOTIMEFREEZE
var int user_posy;
var int user_angle;
renderstyle translucent
alpha 0.75
mass 0
States
{
Spawn:
BGOB AA 0
BGOB A 0 A_SetUserVar("user_posy",mass-35)
BGOB A 0 A_SetUserVar("user_angle",user_posy*-4/7)
SpawnUp:
BGOB A 0 A_JumpIf(ACS_ExecuteWithResult(C_CHECK_TARGET_OOC)==0,"Death")
BGOB AA 1 A_Warp(AAPTR_TARGET,64,user_posy,-80,user_angle,WARPF_NOCHECKPOSITION)
BGOB A 0 A_JumpIf(ACS_ExecuteWithResult(C_CHECK_TARGET_OOC)==0,"Death")
BGOB AA 1 A_Warp(AAPTR_TARGET,64,user_posy,-40,user_angle,WARPF_NOCHECKPOSITION)
BGOB A 0 A_JumpIf(ACS_ExecuteWithResult(C_CHECK_TARGET_OOC)==0,"Death")
BGOB AA 1 A_Warp(AAPTR_TARGET,64,user_posy,0,user_angle,WARPF_NOCHECKPOSITION)
BGOB A 0 A_JumpIf(ACS_ExecuteWithResult(C_CHECK_TARGET_OOC)==0,"Death")
BGOB AA 1 A_Warp(AAPTR_TARGET,64,user_posy,10,user_angle,WARPF_NOCHECKPOSITION)
BGOB A 0 A_JumpIf(ACS_ExecuteWithResult(C_CHECK_TARGET_OOC)==0,"Death")
BGOB AA 1 A_Warp(AAPTR_TARGET,64,user_posy,20,user_angle,WARPF_NOCHECKPOSITION)
SpawnLOOP:
BGOB A 1 A_Warp(AAPTR_TARGET,64,user_posy,20,user_angle,WARPF_NOCHECKPOSITION)
BGOB A 0 A_JumpIfInTargetInventory("YouveBeenBlockedFlag",1,"Death")
BGOB A 0 A_JumpIfInTargetInventory("BlockTuah",1,"Death")
BGOB A 0 A_JumpIf(ACS_ExecuteWithResult(C_CHECK_TARGET_OOC)==0,"Death")
loop
Death:
TNT1 A 0
stop
}
}

actor BlockG_TempBlock2 : BlockG_TempBlock{mass 70}

actor BlockG_Crasher//m2 into m2 knocked up
{
translation "192:192=205:205", "198:198=74:74", "194:194=212:212", "195:195=227:227"
PROJECTILE
radius 24
height 36
Scale 2.5
speed 0
damage (30)
damagetype "BlockM_BigBlock"
Obituary "$OB_BGOLEMSHIELD"
States
{
Spawn:
BDRO BB 0
TNT1 A 0 ACS_NamedExecuteAlways("BULL_Tidifier", 0)
SpawnLoop:
TNT1 A 0 A_SpawnItemEx("PowerGearTurningFX",random(-32,32),random(-32,32),random(0,64),0,0,0,0,1)
BGOB B 1 A_Fadeout(.1)
loop
XDeath:
BGOB E 3 A_FadeIn(1)
TNT1 AA 0 A_SpawnItemEx("BlockDropBreakFX",random(-8,8),random(-8,8),random(0,8),frandom(2,6),frandom(-8,8),frandom(4,8),random(0,360),1)
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX2",random(-8,8),random(-8,8),random(0,8),frandom(2,6),frandom(-8,8),frandom(4,8),random(0,360),1)
TNT1 A 35 A_PlaySoundEx("weapon/bblbreak","Body",0,0)
Death:
TNT1 A 0
stop
}
}

actor BlockG_CrasherB : BlockG_Crasher{translation "192:192=205:205", "198:198=74:74"}
actor BlockG_CrasherR : BlockG_Crasher{translation "192:192=171:171", "198:198=41:41"}
actor BlockG_CrasherO : BlockG_Crasher{translation "192:192=104:104", "198:198=128:128"}
actor BlockG_CrasherP : BlockG_Crasher{translation "192:192=229:229", "198:198=232:232"}

actor BlockG_Rain : FastProjectile//m2 into m2 rain
{
Translation "192:192=193:193","198:198=194:194"
PROJECTILE
+SKYEXPLODE
+NOEXPLODEFLOOR
+THRUACTORS
+DONTBLAST
+DONTREFLECT
damage (0)
speed 400
radius 1
height 1
States
{
Spawn:
TNT1 AA 2
TNT1 A 0 A_SpawnItemEx("BlockRainSpawner",0,0,0,0,0,0,0,1)
stop
Death:
TNT1 A 0 A_SpawnItemEx("BlockRainSpawner",0,0,0,0,0,0,0,1)
stop
}
}

actor BlockG_RainB : BlockG_Rain   { translation "192:192=205:205", "198:198=74:74"}
actor BlockG_RainR : BlockG_Rain   { translation "192:192=171:171", "198:198=41:41"}
actor BlockG_RainO : BlockG_Rain   { translation "192:192=104:104", "198:198=128:128"}
actor BlockG_RainP : BlockG_Rain   { translation "192:192=229:229", "198:198=232:232"}

actor BlockRainSpawner : BasicHelper
{
Translation "192:192=193:193","198:198=194:194"
reactiontime 4
+FLOORHUGGER
+DONTBLAST
+DONTREFLECT
States
{
Spawn:
TNT1 A 0
//TNT1 A 0 A_Jump(128,"SpawnB")
SpawnLoop:
TARM G 0 A_PlaySoundEx("weapon/blockdropperwait","Weapon")
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX4",0,0,500-(z-floorz),0,0,random(-30,-20),0,1)
TNT1 A 0 
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX4",50,0,500-(z-floorz),0,0,random(-30,-20),0,1)
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX4",50,0,500-(z-floorz),0,0,random(-30,-20),180,1)
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX4",50,0,500-(z-floorz),0,0,random(-30,-20),-90,1)
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX4",50,0,500-(z-floorz),0,0,random(-30,-20),90,1)
TNT1 A 0
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX4",100,0,500-(z-floorz),0,0,random(-30,-20),-135,1)
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX4",100,0,500-(z-floorz),0,0,random(-30,-20),135,1)
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX4",100,0,500-(z-floorz),0,0,random(-30,-20),45,1)
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX4",100,0,500-(z-floorz),0,0,random(-30,-20),-45,1)
TNT1 A 0
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX4",150,0,500-(z-floorz),0,0,random(-30,-20),0,1)
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX4",150,0,500-(z-floorz),0,0,random(-30,-20),180,1)
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX4",150,0,500-(z-floorz),0,0,random(-30,-20),-90,1)
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX4",150,0,500-(z-floorz),0,0,random(-30,-20),90,1)
TNT1 A 0
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX4",200,0,500-(z-floorz),0,0,random(-30,-20),-135,1)
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX4",200,0,500-(z-floorz),0,0,random(-30,-20),135,1)
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX4",200,0,500-(z-floorz),0,0,random(-30,-20),45,1)
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX4",200,0,500-(z-floorz),0,0,random(-30,-20),-45,1)
TNT1 A 0
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX4",250,0,500-(z-floorz),0,0,random(-30,-20),0,1)
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX4",250,0,500-(z-floorz),0,0,random(-30,-20),180,1)
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX4",250,0,500-(z-floorz),0,0,random(-30,-20),-90,1)
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX4",250,0,500-(z-floorz),0,0,random(-30,-20),90,1)
TNT1 A 0 A_JumpIfInventory("CutterFlag",8,"SpawnDropReset")
TNT1 A 0 A_GiveInventory("CutterFlag",1)
TNT1 A 0 A_Setangle(angle-15)
TNT1 A 4
goto SpawnLoop

SpawnDropReset:
//TARM G 0 A_StopSoundEx("Weapon")
TNT1 A 0 A_Setangle(angle+120)
SpawnDropper:
TARM G 0 A_PlaySoundEx("weapon/blockdropperwait","Weapon")
TNT1 A 3
TNT1 A 0 A_PlaySoundEx("weapon/BlockDropper","Body",0,0)
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",0,0,500-(z-floorz),0,0,-0.01,0,1)

TNT1 A 1
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",75,0,500-(z-floorz),0,0,-0.01,-135,1)
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",75,0,500-(z-floorz),0,0,-0.01,135,1)
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",75,0,500-(z-floorz),0,0,-0.01,45,1)
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",75,0,500-(z-floorz),0,0,-0.01,-45,1)

TNT1 A 0
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",75,0,500-(z-floorz),0,0,-0.01,0,1)
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",75,0,500-(z-floorz),0,0,-0.01,180,1)
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",75,0,500-(z-floorz),0,0,-0.01,-90,1)
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",75,0,500-(z-floorz),0,0,-0.01,90,1)

TNT1 A 1
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",150,0,500-(z-floorz),0,0,-0.01,-135,1)
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",150,0,500-(z-floorz),0,0,-0.01,135,1)
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",150,0,500-(z-floorz),0,0,-0.01,45,1)
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",150,0,500-(z-floorz),0,0,-0.01,-45,1)

TNT1 A 0
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",150,0,500-(z-floorz),0,0,-0.01,0,1)
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",150,0,500-(z-floorz),0,0,-0.01,180,1)
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",150,0,500-(z-floorz),0,0,-0.01,-90,1)
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",150,0,500-(z-floorz),0,0,-0.01,90,1)

TNT1 A 1
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",225,0,500-(z-floorz),0,0,-0.01,-135,1)
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",225,0,500-(z-floorz),0,0,-0.01,135,1)
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",225,0,500-(z-floorz),0,0,-0.01,45,1)
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",225,0,500-(z-floorz),0,0,-0.01,-45,1)

TNT1 A 0
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",225,0,500-(z-floorz),0,0,-0.01,0,1)
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",225,0,500-(z-floorz),0,0,-0.01,180,1)
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",225,0,500-(z-floorz),0,0,-0.01,-90,1)
TNT1 A 0 A_SpawnItemEx("BlockG_Wave",225,0,500-(z-floorz),0,0,-0.01,90,1)
TNT1 A 0 A_Setangle(angle-30)
TNT1 A 0 A_CountDown
loop
Death:
TNT1 A 0 A_StopSoundEx("Weapon")
stop
}
}

actor BlockG_Wave 
{
Translation "192:192=193:193","198:198=194:194"
PROJECTILE 
Damagetype "BlockM_Rain"
Obituary "$OB_BLOCKDROPPER" 
+FORCEXYBILLBOARD
+RIPPER
+NOINTERACTION
+DONTBLAST
damage (0)
Radius 16
Height 14
speed 0.01
scale 2.5
gravity 2
States
{
Spawn:
TNT1 AA 0 ACS_NamedExecuteAlways("BULL_Tidifier", 0)
//TNT1 A 0 A_PlaySoundEx("weapon/BlockDropperMade","Body",0,0)
BDRP ABC 2
SpawnLoop:
COPZ H 0 A_ChangeVelocity(0,0,-30,CVF_RELATIVE|CVF_REPLACE)
BDRP DEEFFGGD 1 A_JumpIf(ceilingz-z>16, "Spawn2")
COPZ H 0 A_JumpIf(momz==0,"Death")
COPZ H 0 A_GiveInventory("CutterFlag",1)
COPZ H 0 A_Changeflag(NOGRAVITY, false)
Goto SpawnLoop+2
Spawn2:
COPZ H 0 A_ChangeFlag("RIPPER", 0)
COPZ H 0 A_ChangeFlag("NOINTERACTION",0)
BDRP DEFG 2 A_ChangeVelocity(0,0,-30,CVF_RELATIVE|CVF_REPLACE) 
COPZ H 0 A_JumpIf(momz==0,"Death")
COPZ H 0 A_GiveInventory("CutterFlag",1)
COPZ H 0 A_Changeflag(NOGRAVITY, false)
Goto Spawn2+2
Death:
BDRP D 0 A_Checkfloor("RealDeath")
//BDRP D 0 A_JumpIfInventory("CutterFlag",1,"RealDeath")
goto StillbornDeath
XDeath:
RealDeath:
TNT1 AA 0
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX3",random(-8,8),random(-8,8),random(0,8),frandom(2,6),frandom(-8,8),frandom(4,8),random(0,360),1,128)
COPZ H 0 A_Changeflag(NOGRAVITY, true)
TNT1 A 0 A_PlaySoundEx("weapon/BlockBreak","Body",0,0)
BDRP C 0 A_Explode(12,75,0,0,75)
BDRP CBA 2
stop
StillbornDeath:
TNT1 A 0
stop
}
}

actor BlockG_Crusher//m2 into m1
{
Translation "192:192=193:193","198:198=194:194"
PROJECTILE
speed 30
damage (30)
Damagetype "BlockM_BigBlock"
Obituary "$OB_BGOLEMSHIELD" 
-NOGRAVITY
gravity 0.75
Scale 2.5
radius 36
height 36
States
{
Spawn:
TNT1 A 0
TNT1 A 0 ACS_NamedExecuteAlways("BULL_Tidifier", 0)
TNT1 A 0 A_PlaySoundEx("weapon/deepdiggerdig","Body",0,0)
SpawnLOOP:
BGOB B 5 A_SpawnItemEx("BlockDropBreakFX3",frandom(0,36),0,frandom(-36,36),frandom(2,6),0,frandom(-4,8),random(180,270),1,128)
loop
Death:
BGOB E 3
TNT1 AA 0 A_SpawnItemEx("BlockDropBreakFX",frandom(0,36),0,frandom(-36,36),frandom(2,6),0,frandom(-4,8),random(0,360),1)
TNT1 AAA 0 A_SpawnItemEx("BlockDropBreakFX2",frandom(0,36),0,frandom(-18,18),frandom(2,6),0,frandom(-4,8),random(0,360),1)
TNT1 AAAA 0 A_SpawnItemEx("BlockDropBreakFX3",frandom(0,36),0,frandom(-9,9),frandom(2,6),0,frandom(-4,8),random(0,360),1)
TNT1 A 35 A_PlaySoundEx("weapon/bblbreak","Body",0,0)
stop
}
}

actor BlockG_CrusherB : BlockG_Crusher{translation "192:192=205:205", "198:198=74:74"}
actor BlockG_CrusherR : BlockG_Crusher{translation "192:192=171:171", "198:198=41:41"}
actor BlockG_CrusherO : BlockG_Crusher{translation "192:192=104:104", "198:198=128:128"}
actor BlockG_CrusherP : BlockG_Crusher{translation "192:192=229:229", "198:198=232:232"}

actor BlockG_FistSpawner : FastProjectile//golem reload
{
Translation "192:192=193:193","198:198=194:194", "194:194=212:212", "195:195=227:227"
+DONTBLAST
+DONTREFLECT
+THRUGHOST
+SKYEXPLODE
+RIPPER
reactiontime 100
damage (0)
radius 8
height 16
speed 75
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_SpawnItemEx("BlockG_FistTravelFX",0,0,-(z-floorz),0,0,0,0,1)
TNT1 A 2 A_CountDown
loop
Death:
TNT1 A 0 A_SpawnItemEx("BlockG_Fist",0,0,0,0,0,0,0,1)
stop
}
}

actor BlockG_FistSpawnerB : BlockG_FistSpawner{translation "192:192=205:205", "198:198=74:74","194:194=205:205", "195:195=74:74"}
actor BlockG_FistSpawnerR : BlockG_FistSpawner{translation "192:192=171:171", "198:198=41:41","194:194=171:171", "195:195=41:41"}
actor BlockG_FistSpawnerO : BlockG_FistSpawner{translation "192:192=104:104", "198:198=128:128","194:194=104:104", "195:195=128:128"}
actor BlockG_FistSpawnerP : BlockG_FistSpawner{translation "192:192=229:229", "198:198=232:232","194:194=229:229", "195:195=232:232"}

actor BlockG_FistTravelFX : BasicHelper
{
Obituary "$OB_BGOLEMDEBRIS"
damagetype "BlockM_Dig"
States
{
Spawn:
TNT1 A 0
TNT1 A 0 A_Explode(2,48,0,0,24)
TNT1 A 0 A_PlaySoundEx("weapon/GroundDig","Voice")
TNT1 AA 0 A_SpawnItemEx("BlockDropBreakFX3",random(24,48),0,random(0,8),frandom(0,2),0,frandom(1,2),random(0,360),1,128)
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX3",0,0,0,0,0,frandom(4,8),0,1)
TNT1 A 35
stop
}
}

actor BlockG_Fist
{
PROJECTILE
radius 8
height 16
Obituary "$OB_BGOLEMRISING"
damagetype "BlockM_Uppercut"
damage (0)
scale 2.5
//+NOINTERACTION
+DONTBLAST
+RIPPER
+THRUGHOST
+FLOORHUGGER
+DONTREFLECT
States
{
Spawn:
TNT1 AA 0
TNT1 AA 1
TNT1 AAAAAAAAAAAA 0 A_SpawnItemEx("PowerGearTurningFX",random(-64,64),random(-64,64),random(0,128),0,0,0,0,1)
TNT1 AAAAAA 0 A_SpawnItemEx("BlockDropBreakFX3",random(0,80),0,random(0,8),frandom(2,8),0,frandom(12,24),random(0,360),1)
TNT1 AA 0 A_SpawnItemEx("BlockDropBreakFX2",random(0,40),0,random(0,8),frandom(2,8),0,frandom(6,12),random(0,360),1)
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX",random(0,40),0,random(0,8),frandom(2,8),0,frandom(3,6),random(0,360),1)
TCLB C 0 A_PlaySoundEx("weapon/golemrisingfist","Weapon")
Spawn2:
BGOF A 0 A_Quake(2,14,0,32,"none")
BGOF A 0 A_Explode(25,80,0,0,80)
//BGOF A 0 A_SpawnItemEx("BassDashDustLarger")
BGOF ABCDEEEEEEEEEEEEEEDCBA 1
stop
}
}

////////////////////////BLOCK BABY MODE////////////////////////

actor BlockM_Blockbuster//block m1
{
Translation "192:192=193:193","198:198=194:194"
PROJECTILE
+DONTSPLASH
damagetype "BlockM_Buster"
Obituary "$OB_BBABYBARRAGE"
damage (1)
Radius 16
Height 14
speed 20
scale 2
States
{
Spawn:
TNT1 AA 0
TNT1 A 0 ACS_NamedExecuteAlways("BULL_Tidifier", 0)
TNT1 A 2 
TNT1 A 0 A_ScaleVelocity(0.05)
BDRP ABC 2
BDRP C 0 A_ScaleVelocity(30)
SpawnLOOP:
BDRP DEFG 2
loop
Death:
TNT1 AA 0 A_SpawnItemEx("BlockDropBreakFX3",random(-8,8),random(-8,8),random(0,8),frandom(2,6),frandom(-8,8),frandom(4,8),random(0,360),1)
TNT1 A 0 A_PlaySound("weapon/BlockBreak","Body")
BDRP C 0 A_Explode(11,75,0,0,50)
BDRP CBA 3
stop
}
}

actor BlockM_BlockbusterB : BlockM_Blockbuster{translation "192:192=205:205", "198:198=74:74"}
actor BlockM_BlockbusterR : BlockM_Blockbuster{translation "192:192=171:171", "198:198=41:41"}
actor BlockM_BlockbusterO : BlockM_Blockbuster{translation "192:192=104:104", "198:198=128:128"}
actor BlockM_BlockbusterP : BlockM_Blockbuster{translation "192:192=229:229", "198:198=232:232"}

actor BlockM_DropperSpawner : FastProjectile//copywep
{
Translation "192:192=193:193","198:198=194:194"
PROJECTILE
+SKYEXPLODE
+NOEXPLODEFLOOR
+DONTBLAST
+DONTREFLECT
+DONTSPLASH
+THRUACTORS
damage (0)
speed 400
radius 1
height 1
States
{
Spawn:
TNT1 AA 0 
TNT1 AA 1
TNT1 A 0 A_SpawnItemEx("BlockDropProjSpawner",30,0,0,0,0,0,45,1)
TNT1 A 0 A_SpawnItemEx("BlockDropProjSpawner",30,0,0,0,0,0,135,1)
TNT1 A 0 A_SpawnItemEx("BlockDropProjSpawner",30,0,0,0,0,0,225,1)
TNT1 A 0 A_SpawnItemEx("BlockDropProjSpawner",30,0,0,0,0,0,315,1)
stop
Death:
TNT1 A 0 A_SpawnItemEx("BlockDropProjSpawner",30,0,0,0,0,0,45,1)
TNT1 A 0 A_SpawnItemEx("BlockDropProjSpawner",30,0,0,0,0,0,135,1)
TNT1 A 0 A_SpawnItemEx("BlockDropProjSpawner",30,0,0,0,0,0,225,1)
TNT1 A 0 A_SpawnItemEx("BlockDropProjSpawner",30,0,0,0,0,0,315,1)
stop
}
}

actor BlockM_DropperSpawnerB : BlockM_DropperSpawner{translation "192:192=205:205", "198:198=74:74"}
actor BlockM_DropperSpawnerR : BlockM_DropperSpawner{translation "192:192=171:171", "198:198=41:41"}
actor BlockM_DropperSpawnerO : BlockM_DropperSpawner{translation "192:192=104:104", "198:198=128:128"}
actor BlockM_DropperSpawnerP : BlockM_DropperSpawner{translation "192:192=229:229", "198:198=232:232"}

actor BlockDropProjSpawner
{
Translation "192:192=193:193","198:198=194:194"
PROJECTILE
+SKYEXPLODE
+FLOORHUGGER
+STEPMISSILE
+THRUACTORS
+DONTBLAST
+DONTSPLASH
+DONTREFLECT
damage (0)
renderstyle none
speed 0
radius 24
height 56
States
{
Spawn:
TNT1 AA 0 
TNT1 A 0 A_ChangeFlag("FLOORHUGGER",FALSE)
TNT1 AA 2 A_ChangeVelocity(0,0,35)
TNT1 A 0 A_SpawnItemEx("BlockM_Dropper",0,0,0,0,0,0,0,1)
stop
Death:
TNT1 A 0 A_SpawnItemEx("BlockM_Dropper",0,0,0,0,0,0,0,1)
stop
}
}

actor BlockM_Dropper
{
Translation "192:192=193:193","198:198=194:194"
PROJECTILE 
Damagetype "DMGNoHitstun"
Obituary "$OB_BLOCKDROPPER" 
+FORCEXYBILLBOARD
+NOGRAVITY
+SKYEXPLODE
+TOUCHY
damage (1)
Radius 25
Height 25
speed 0
scale 2.5
gravity 4
reactiontime 60
States
{
Spawn:
TNT1 A 0
TNT1 A 0 ACS_NamedExecuteAlways("BULL_Tidifier", 0)
TNT1 A 0 A_PlaySoundEx("weapon/BlockDropperMade","Body",0,0)
BDRP ABC 2 A_ChangeFlag(TOUCHY,false)
SpawnWaiting:
BDRP D 0 A_GiveInventory("CutterFlag",1)
BDRP D 0 A_GiveToTarget("YouCanNowDropTheBlock",1)
TNT1 A 0 A_JumpIf(ACS_ExecuteWithResult(C_CHECK_TARGET_OOC)==0,"SpawnDrop")
BDRP DDDDDEEEEEFFFFFGGGGG 1 A_JumpIfInTargetInventory("DropTheBlock",1,"SpawnDrop")
loop
SpawnDROP:
TNT1 A 0 A_PlaySoundEx("weapon/BlockDropper","Body",0,0)
BDRP D 0 A_ChangeVelocity(0,0,-15)
BDRP D 0 A_ChangeFlag(NOGRAVITY,FALSE)
TNT1 A 0 A_SetDamageType("BlockM_Drop")
BDRP D 0 A_TakeFromTarget("YouCanNowDropTheBlock",1)
SpawnLOOP:
BDRP DEFG 1
loop
Death:
TNT1 A 0 A_SetGravity(0.0)
TNT1 A 0 A_Stop
BDRP D 0 A_CheckFlag(TOUCHY,"StillbornDeath")
RealDeath:
TNT1 AA 0
TNT1 A 0 A_SpawnItemEx("BlockDropBreakFX2",random(-8,8),random(-8,8),random(0,8),frandom(2,6),frandom(-8,8),frandom(4,8),random(0,360),1)
TNT1 AA 0 A_SpawnItemEx("BlockDropBreakFX3",random(-8,8),random(-8,8),random(0,8),frandom(2,6),frandom(-8,8),frandom(4,8),random(0,360),1)
TNT1 A 0 A_SetDamageType("DMGNoHitstun")
TNT1 A 0 A_Explode(11,75,0,0,50)
TNT1 A 0 A_PlaySoundEx("weapon/BlockBreak","Body",0,0)
BDRP CBA 2
StillbornDeath:
TNT1 A 10
stop
}
}

actor BlockM_Crush
{
Obituary "$OB_BLOCKSPLAT"
damagetype "BlockM_Splat"
PROJECTILE
+DONTBLAST
damage (2)
Radius 15
Height 2
renderstyle none
States
{
Spawn:
TNT1 A 1
stop
}
}

actor PowerGearTurningFX
{
PROJECTILE
+CLIENTSIDEONLY
damage 0
radius 1
height 1
scale 2.5
states
{
Spawn:
TNT1 AA 0
SpawnLOOP:
PGR1 AAABBB 1 A_FadeOut(0.05)
loop
}
}

actor BlockDropBreakFX
{
+MISSILE
-NOGRAVITY
+THRUACTORS
+CLIENTSIDEONLY
+DOOMBOUNCE
damage 0
radius 1
height 1
scale 2.5
states
{
Spawn:
TNT1 AA 0
BGOB A 0 A_Jump(256,"Pattern1","Pattern2")
wait
Pattern1:
BGOB C 35
goto FadeOut
Pattern2:
BGOB D 35
goto FadeOut
FadeOut:
"####" "#" 1 A_FadeOut
wait
}
}

actor BlockDropBreakFX2 : BlockDropBreakFX
{
states
{
Pattern1:
BDRP H 35
goto FadeOut
Pattern2:
BDRP I 35
goto FadeOut
}
}

actor BlockDropBreakFX3 : BlockDropBreakFX
{
states
{
Pattern1:
BDRP K 35
goto FadeOut
Pattern2:
BDRP L 35
goto FadeOut
}
}

actor BlockDropBreakFX4 : BlockDropBreakFX3{+NOINTERACTION}

actor GolemBlockmanMain_CI : TeamColor_CI
{
states
{
FireX:
TNT1 A 0 A_FireCustomMissile("BlockGolemPunch",3,0,25,0)
goto Done
FireB:
TNT1 A 0 A_FireCustomMissile("BlockGolemPunchB",3,0,25,0)
goto Done
FireR:
TNT1 A 0 A_FireCustomMissile("BlockGolemPunchR",3,0,25,0)
goto Done
FireO:
TNT1 A 0 A_FireCustomMissile("BlockGolemPunchO",3,0,25,0)
goto Done
FireP:
TNT1 A 0 A_FireCustomMissile("BlockGolemPunchP",3,0,25,0)
goto Done
}
}

actor GolemBlockmanAlt_CI : TeamColor_CI
{
states
{
FireX:
TNT1 A 0 A_SpawnItemEx("BlockG_Crasher",64,-35,20,0,0,60,20,1)
TNT1 A 0 A_SpawnItemEx("BlockG_Crasher",64,35,20,0,0,60,-20,1)
goto Done
FireB:
TNT1 A 0 A_SpawnItemEx("BlockG_CrasherB",64,-35,20,0,0,60,20,1)
TNT1 A 0 A_SpawnItemEx("BlockG_CrasherB",64,35,20,0,0,60,-20,1)
goto Done
FireR:
TNT1 A 0 A_SpawnItemEx("BlockG_CrasherR",64,-35,20,0,0,60,20,1)
TNT1 A 0 A_SpawnItemEx("BlockG_CrasherR",64,35,20,0,0,60,-20,1)
goto Done
FireO:
TNT1 A 0 A_SpawnItemEx("BlockG_CrasherO",64,-35,20,0,0,60,20,1)
TNT1 A 0 A_SpawnItemEx("BlockG_CrasherO",64,35,20,0,0,60,-20,1)
goto Done
FireP:
TNT1 A 0 A_SpawnItemEx("BlockG_CrasherP",64,-35,20,0,0,60,20,1)
TNT1 A 0 A_SpawnItemEx("BlockG_CrasherP",64,35,20,0,0,60,-20,1)
goto Done
}
}

actor GolemBlockmanAlt2_CI : TeamColor_CI
{
states
{
FireX:
TNT1 A 0 A_FireCustomMissile("BlockG_Rain",0,0,0,0)
goto Done
FireB:
TNT1 A 0 A_FireCustomMissile("BlockG_RainB",0,0,0,0)
goto Done
FireR:
TNT1 A 0 A_FireCustomMissile("BlockG_RainR",0,0,0,0)
goto Done
FireO:
TNT1 A 0 A_FireCustomMissile("BlockG_RainO",0,0,0,0)
goto Done
FireP:
TNT1 A 0 A_FireCustomMissile("BlockG_RainP",0,0,0,0)
goto Done
}
}

actor GolemBlockmanAltCrush_CI : TeamColor_CI
{
states
{
FireX:
TNT1 A 0 A_FireCustomMissile("BlockG_Crusher",-2.5,1,30,0) 
TNT1 A 0 A_FireCustomMissile("BlockG_Crusher",2.5,1,-30,0) 
goto Done
FireB:
TNT1 A 0 A_FireCustomMissile("BlockG_CrusherB",-2.5,1,30,0) 
TNT1 A 0 A_FireCustomMissile("BlockG_CrusherB",2.5,1,-30,0) 
goto Done
FireR:
TNT1 A 0 A_FireCustomMissile("BlockG_CrusherR",-2.5,1,30,0) 
TNT1 A 0 A_FireCustomMissile("BlockG_CrusherR",2.5,1,-30,0) 
goto Done
FireO:
TNT1 A 0 A_FireCustomMissile("BlockG_CrusherO",-2.5,1,30,0) 
TNT1 A 0 A_FireCustomMissile("BlockG_CrusherO",2.5,1,-30,0) 
goto Done
FireP:
TNT1 A 0 A_FireCustomMissile("BlockG_CrusherP",-2.5,1,30,0) 
TNT1 A 0 A_FireCustomMissile("BlockG_CrusherP",2.5,1,-30,0) 
goto Done
}
}

actor GolemBlockmanReload_CI : TeamColor_CI
{
states
{
FireX:
TNT1 A 0 A_FireCustomMissile("BlockG_FistSpawner",0,0,0,0)
goto Done
FireB:
TNT1 A 0 A_FireCustomMissile("BlockG_FistSpawnerB",0,0,0,0)
goto Done
FireR:
TNT1 A 0 A_FireCustomMissile("BlockG_FistSpawnerR",0,0,0,0)
goto Done
FireO:
TNT1 A 0 A_FireCustomMissile("BlockG_FistSpawnerO",0,0,0,0)
goto Done
FireP:
TNT1 A 0 A_FireCustomMissile("BlockG_FistSpawnerP",0,0,0,0)
goto Done
}
}

actor BabyBlockmanMain_CI : TeamColor_CI
{
states
{
FireX:
TNT1 A 0 A_FireCustomMissile("BlockM_Blockbuster",0,0,frandom(-1,1)*25,frandom(-1,1)*25)
goto Done
FireB:
TNT1 A 0 A_FireCustomMissile("BlockM_BlockbusterB",0,0,frandom(-1,1)*25,frandom(-1,1)*25)
goto Done
FireR:
TNT1 A 0 A_FireCustomMissile("BlockM_BlockbusterR",0,0,frandom(-1,1)*25,frandom(-1,1)*25)
goto Done
FireO:
TNT1 A 0 A_FireCustomMissile("BlockM_BlockbusterO",0,0,frandom(-1,1)*25,frandom(-1,1)*25)
goto Done
FireP:
TNT1 A 0 A_FireCustomMissile("BlockM_BlockbusterP",0,0,frandom(-1,1)*25,frandom(-1,1)*25)
goto Done
Done:
POWB G 0 A_TakeInventory("BrickInTheWallAmmo",4, TIF_NOTAKEINFINITE)
POWB G 0 A_PlaySoundEx("weapon/blockbuster","Weapon")
stop
}
}

actor BabyBlockmanAlt_CI : TeamColor_CI
{
states
{
FireX:
TNT1 A 0 A_FireCustomMissile("BlockM_DropperSpawner",0,0,0,0) 
goto Done
FireB:
TNT1 A 0 A_FireCustomMissile("BlockM_DropperSpawnerB",0,0,0,0) 
goto Done
FireR:
TNT1 A 0 A_FireCustomMissile("BlockM_DropperSpawnerR",0,0,0,0) 
goto Done
FireO:
TNT1 A 0 A_FireCustomMissile("BlockM_DropperSpawnerO",0,0,0,0) 
goto Done
FireP:
TNT1 A 0 A_FireCustomMissile("BlockM_DropperSpawnerP",0,0,0,0) 
goto Done
Done:
POWB G 0 A_TakeInventory("BrickInTheWallAmmo",21, TIF_NOTAKEINFINITE)
stop
}
}
  
  

actor BlockmanShieldHitbox_P : CustomInventory
{
states
{
Pickup:
TNT1 A 0 A_SpawnItemEx("Blockman_ShieldHitbox1",60,-16,4,0,0,0,0,1)
TNT1 A 0 A_SpawnItemEx("Blockman_ShieldHitbox2",60,-8,4,0,0,0,0,1)
TNT1 A 0 A_SpawnItemEx("Blockman_ShieldHitbox3",60,0,4,0,0,0,0,1)
TNT1 A 0 A_SpawnItemEx("Blockman_ShieldHitbox4",60,8,4,0,0,0,0,1)
TNT1 A 0 A_SpawnItemEx("Blockman_ShieldHitbox5",60,16,4,0,0,0,0,1)
stop
}
}

actor Blockman_ShieldHitbox1 : BasicShieldHitbox
{
Height 75
Radius 35
Meleerange 60
Mass 4
Accuracy -30
}
actor Blockman_ShieldHitbox2 : Blockman_ShieldHitbox1
{
Accuracy -15
}
actor Blockman_ShieldHitbox3 : Blockman_ShieldHitbox1
{
Accuracy 0
}
actor Blockman_ShieldHitbox4 : Blockman_ShieldHitbox1
{
Accuracy 15
}
actor Blockman_ShieldHitbox5 : Blockman_ShieldHitbox1
{
Accuracy 30
}