
actor Octobrain : ZBaseActor 19131
{
  obituary "%o's brain turned into mush by an Octabrain."
  health 200
  radius 31
  height 56
  mass 1000
  speed 10
  seesound "octobrain/sight"
  painsound "octobrain/pain"
  deathsound "octobrain/death"
  activesound "octobrain/active"
  dropitem "ScubaPickup" 4
  MONSTER
  +FLOORCLIP
  scale 0.75
  +FLOATBOB
  +FLOAT
  +NOGRAVITY
  +SPAWNFLOAT
  FloatBobStrength 0.5
  meleerange 48
  maxtargetrange 300
  gravity 0.40
  damagefactor "Explosion", 1.0
  damagefactor "RocketExplosion", 1.0
  damagefactor "ShellExplosion", 1.0
  damagefactor "AlienzShrinker", 0.0
  damagefactor "Shrinkerhit", 0.0
  painchance 85
  Painchance "Shrinker", 256
  painchance "FireBurning", 200
  painchance "MightyBoot", 128
  painchance "BootStun", 256
  painchance "MicrowaveBlast", 256
  Species "Octabrains"
  +DOHARMSPECIES
  +NOINFIGHTSPECIES
  +DONTHARMCLASS
  WoundHealth 10
  +FORCEXYBILLBOARD
  Accuracy 8
  states
  {
  Spawn:
    ENE5 A 0
    "####" "#" 0 ThrustThingZ(0, 50, 0, 1)
    "####" "#" 1
    "####" "#" 0 A_Stop
  Idle:
    "####" "#" 0 Thing_ChangeTID(0,1000)
    ENE5 A 10 A_Look
    loop
  See:
    "####" "#" 0 A_Jump(192,2)
    "####" "#" 0 A_Stop
    ENE5 A 1
    "####" "#" 0
    ENE5 ABCB 3 A_Chase
    loop
  Missile:
    "####" "#" 0 A_PlayWeaponSound("octobrain/attack")
    ENE5 D 10 A_FaceTarget
    ENE5 E 10 bright A_CustomMissile("OctobrainAttack",32,0,0)
    ENE5 D 10 A_FaceTarget
    goto See
  Melee:
    "####" "#" 0 A_PlaySound("octobrain/melee")
    ENE5 C 6 A_FaceTarget
    ENE5 D 3 A_FaceTarget
    ENE5 B 6 A_CustomMeleeAttack(random[RIDMONSTERAT](10,20),"alienz/miss","alienz/miss")
    ENE5 A 6 A_FaceTarget
    goto See
  Pain.BootStun:
    "####" "#" 0 A_Jump(128,"Pain2BootStun")
    ENE5 F 9 A_PlayVoiceSoundPitch("Pain")
    ENE5 F 9
    goto See
  Pain2BootStun:
    ENE5 L 9 A_PlayVoiceSoundPitch("Pain")
    ENE5 L 9
    goto See
  Pain:
    "####" "#" 0 A_Jump(128,"Pain2")
    ENE5 F 3
    ENE5 F 3 A_PlayVoiceSoundPitch("Pain")
    goto See
  Pain2:
    ENE5 L 3
    ENE5 L 3 A_PlayVoiceSoundPitch("Pain")
    goto See
  Pain.MicrowaveBlast:
    ENE5 F 1
    "####" "#" 0 A_CheckThump("Pain.BootStun")
    loop
  Death:
    ENE5 F 1 A_ChangeFlag("FLOATBOB",0)
    "####" "#" 0 A_StopSound(2)
    ENE5 F 4 A_PlayVoiceSoundPitch("Death","",4)
    ENE5 G 5 A_NoBlocking
    ENE5 H -1
    stop
  Crash:
    "####" "#" 0 A_XScream
    "####" "#" 0 A_NoBlocking(false)
    ENE5 HIJ 5 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    ENE5 K 1 A_SpawnItemEx("DeadOctoBrain", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION|SXF_TRANSFERSTENCILCOL|SXF_SETMASTER)
    "####" "#" 0 A_SpawnItemEx("DukeRedBloodPool")
    TNT1 A -1
    stop
  Pain.Shrinker:
    "####" "#" 0 A_PlaySound("shrinker/shrink")
    "####" "#" 0 A_NoGravity
    "####" "#" 0 A_InvulnerablePlus(1)
    ENE5 F 5 A_PlayVoiceSoundPitch("Pain")
    "####" "#" 0 A_CustomMissile("ShrinkEffect",8,0,0)
  Shrink:
    ENE5 F 2 {A_SetScale(ScaleX - 0.04, ScaleY - 0.04); A_SpawnItemEx("ShrunkBlur",0,0,0,0,0,0,angle,SXF_TRANSFERSPRITEFRAME|SXF_TRANSFERSCALE|SXF_TRANSFERTRANSLATION|SXF_NOCHECKPOSITION|SXF_ABSOLUTEANGLE);}
    "####" "#" 0 A_JumpIf(ScaleX > 0.2 && ScaleY > 0.2, "Shrink")
    "####" "#" 0 A_Shrink("A","B","C","B")
    "####" "#" 0 A_Remove(AAPTR_DEFAULT)
    stop
  XDeath:
  Death.BossStomp:
  Crash.BossStomp:
    "####" "#" 0 A_ChangeFlag("DONTCORPSE",1)
    "####" "#" 0 A_XScream
    "####" "#" 0 A_Gravity
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_SpawnDebris("DukeGibs1NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs3NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs4NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("OctabrainLeg1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,"Gib1","Gib2","Gib3","Gib4","Gib5")
    TNT1 A 1
    Stop
  Death.PlasmaGib:
  Crash.PlasmaGib:
    "####" "#" 0 A_SpawnItemEx("DukePlasmaExplosion",0,0,32,0,0,0,0,1,0)
    "####" "#" 0 A_ChangeFlag("DONTCORPSE",1)
    "####" "#" 0 A_XScream
    "####" "#" 0 A_Gravity
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_SpawnDebris("DukeGibs1NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs3NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs4NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5NFP", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("OctabrainLeg1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,"Gib1","Gib2","Gib3","Gib4","Gib5")
    TNT1 A 1
    Stop
  Crash.Explosion:
  Crash.RocketExplosion:
  Death.Explosion:
  Death.RocketExplosion:
    "####" "#" 0 A_ChangeFlag("DONTCORPSE",1)
    "####" "#" 0 A_XScream
    "####" "#" 0 A_Gravity
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_SpawnDebris("DukeGibs1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs3", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs4", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("OctabrainLeg1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,"Gib1","Gib2","Gib3","Gib4","Gib5")
    TNT1 A 1
    Stop
  Death.ExplosiveShotgun:
  Death.ShellExplosion:
  Crash.ExplosiveShotgun:
  Crash.ShellExplosion:
    "####" "#" 0 A_ChangeFlag("DONTCORPSE",1)
    "####" "#" 0 A_XScream
    "####" "#" 0 A_Gravity
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs1NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs2NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs2", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs3NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs3", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs4NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs4", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(FAS_AltShotgunGibFireProb,3)
    "####" "#" 0 A_SpawnDebris("DukeGibs5NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,2)
    "####" "#" 0 A_SpawnDebris("DukeGibs5", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("OctabrainLeg1",TRUE, 1.0, 1.0)
    "####" "#" 0 A_Jump(256,"Gib1","Gib2","Gib3","Gib4","Gib5")
    TNT1 A 1
    Stop
  Gib1:
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    GIB1 E 1 A_SpawnItemEx("Gib1DeathSkin", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION)
    Stop
  Gib2:
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    GIB2 E 1 A_SpawnItemEx("Gib2DeathSkin", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION)
    Stop
  Gib3:
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    GIB3 E 1 A_SpawnItemEx("Gib3DeathSkin", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION)
    Stop
  Gib4:
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    GIB4 E 1 A_SpawnItemEx("Gib4DeathSkin", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION)
    Stop
  Gib5:
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    GIB5 E 1 A_SpawnItemEx("Gib5DeathSkin", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION)
    Stop
  Wound.Expander:
   "####" "#" 0 A_Die("Expander")
  Death.Expander:
    "####" "#" 0 A_ChangeFlag("DONTCORPSE",1)
    "####" "#" 0 A_PlaySound("expander/expand")
    "####" "#" 0 A_NoGravity
    "####" "#" 0 {A_UnsetShootable; A_UnsetSolid;}
  Expand:
    ENE5 F 1 A_SetScale(ScaleX + 0.01, ScaleY + 0.01)
    "####" "#" 0 A_JumpIf(ScaleX < 1.15 && ScaleY < 1.15, "Expand")
    ENE5 FFFFF 1
    "####" "#" 0 A_SetScale(0.75, 0.75)
    "####" "#" 0 A_PlayVoiceSoundPitch("Death","",4)
    "####" "#" 0 A_SpawnItemEx("ExpanderExplosion",0,0,32,0,0,0,0,1,0)
    "####" "#" 0 A_SpawnDebris("DukeGibs1", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs3", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs4", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5", TRUE, 1.0, 1.0)
    goto Death.Explosion
  Wound.Ice:
    "####" "#" 0 A_Freeze("See")
    "####" "#" 0 A_Remove(AAPTR_DEFAULT)
    TNT1 A 1
    stop
  Death.Headshot:
    "####" "#" 0 A_ChangeFlag("FLOATBOB",0)
    "####" "#" 0 A_XScream
    "####" "#" 0 A_SpawnDebris("DukeGibs2NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs2NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs5NF", TRUE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    "####" "#" 0 A_SpawnDebris("OctabrainLeg1",TRUE, 1.0, 1.0)
    3NE5 F 5 A_NoBlocking
    3NE5 G 5
    3NE5 H -1
    stop
  Crash.Headshot:
    "####" "#" 0 A_XScream
    "####" "#" 0 A_NoBlocking(false)
    3NE5 HIJ 5 A_SpawnDebris("DukeGibs6", FALSE, 1.0, 1.0)
    3NE5 K 1 A_SpawnItemEx("DeadOctoBrainBehead", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION|SXF_TRANSFERSTENCILCOL)
    "####" "#" 0 A_SpawnItemEx("DukeRedBloodPool")
    stop
  Possessed:
    "####" "#" 0 A_ChangeFlag("NOPAIN", 1)
    ENE5 K 7 {A_XScream; A_AdjustTics(1.0,1.0);}
    ENE5 J 7 {A_XScream; A_AdjustTics(1.0,1.0);}
    ENE5 IH 7 A_AdjustTics(1.0,1.0)
    ENE5 G 7 {ThrustThingZ(0,5,0,1); A_AdjustTics(1.0,1.0);}
    ENE5 F 7 A_AdjustTics(0,1.0)
    "####" "#" 0 A_Stop
    "####" "#" 0 A_ChangeFlag("NOPAIN", 0)
    goto See
  }
}

actor OctobrainAttack : ZMissile
{
  Radius 16
  Height 8
  Speed 10
  Damage (20)
  Projectile
  scale 0.4
  Renderstyle Add
  Alpha 0.9
  +THRUGHOST
  DamageType "Brain"
  States
  {
  Spawn:
    EN5X A 0 NoDelay A_JumpIfInventory("OctobrainAttackRange",4,"LastAttack")
    "####" "#" 0 A_GiveInventory("OctobrainAttackRange",1)
    EN5X ABCDEFGHIJKLMNOPQRST 1 Bright A_SpawnItem("WhiteFlare1",0,0)
    loop
  Death:
    TNT1 AAA 0 A_CustomMissile ("ExplosionParticleWhiteHeavySmall", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](10, 70))
    TNT1 AAAAAAAAA 0 A_CustomMissile ("ExplosionParticleWhiteHeavySmall", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](20, 50))
    TNT1 AAAAA 0 A_CustomMissile ("ExplosionParticleWhiteVeryFast", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](20, 40))
    TNT1 AAAA 0 A_CustomMissile ("ExplosionParticleWhite", 0, 0, random[RIDFX](0, 360), 2, random[RIDFX](0, 360))
    "####" "#" 0 A_SetScale(0.8)
    EN5X PPPPQQQQRRRRSSSSTTTT 1 Bright A_SpawnItem("WhiteFlare1",0,0)
    stop
  LastAttack:
    EN5X ABCDEFGHIJKLMNOPQRST 1 Bright {A_FadeOut(0.03); A_SpawnItem("WhiteFlare1",0,0);}
    stop
  }
}

actor OctobrainAttackRange : Inventory
{
  inventory.amount 0
  inventory.maxamount 4
}

actor DeadOctoBrain : DeadDukeNukemP 19132
{
  Radius 31
  Height 20
  scale 0.75
  States
  {
  Spawn:
    ENE5 K -1
    Stop
  Death.Fire:
    "####" "#" 0 A_SetTranslation("Burned")
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_SpawnItemEx("DeadOctoBrain", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION|SXF_TRANSFERSTENCILCOL)
    TNT1 A 1
    Stop
  Ice:
    "####" "#" 0 Thing_ChangeTID(0,3500)
    ENE5 K 5 A_GenericFreezeDeath
    ENE5 K 1 A_FreezeDeathChunks
  }
}

actor DeadOctoBrainBehead : DeadDukeNukem
{
  Radius 31
  Height 35
  scale 0.75
  States
  {
  Spawn:
    3NE5 K -1
    Stop
  Death.Fire:
    "####" "#" 0 A_SetTranslation("Burned")
    "####" "#" 0 A_NoBlocking
    "####" "#" 0 A_SpawnItemEx("DeadOctoBrainBehead", 0,0,0,0,0,0,0, SXF_TRANSFERTRANSLATION|SXF_TRANSFERSTENCILCOL)
    TNT1 A 1
    Stop
  Ice:
    "####" "#" 0 Thing_ChangeTID(0,3500)
    3NE5 K 5 A_GenericFreezeDeath
    3NE5 K 1 A_FreezeDeathChunks
    wait
  }
}