Actor ScrollOfHellfire : CustomInventory
{ 
  Inventory.PickupSound "misc/p_pkup"
  Inventory.PickupMessage "Scroll Of Hellfire"
  Inventory.Icon HFSCA0
  +Inventory.InvBar
  +Floatbob
  +CountItem
  +Inventory.PickupFlash
  Inventory.DefMaxAmount
  States
  {
  Spawn:
    HFSC BCDC 6 Bright
    Loop
  Use:
    TNT1 A 0 A_JumpIf(Waterlevel > 1, "Failed")
    TNT1 A 0 A_FireCustomMissile("FirewallSpawner", 0, 0, 0)
    Stop
  Failed:
    TNT1 A 0 A_Print("Cannot use underwater!")
    TNT1 A 0 A_GiveInventory("ScrollOfHellfire", 1)
    Stop
  }
}

Actor FirewallSpawner
{
  Radius 8
  Height 5
  Damage 0
  Speed 16
  +NoClip
  +DropOff
  +FloorClip
  +NoBlockMap
  +DontSplash
  +NoTeleport
  States
  {
  Spawn:
    TNT1 A 4
  Death:
    TNT1 A 0 A_Stop
    TNT1 A 0 A_JumpIf(Waterlevel > 1, "Fizzle")
    TNT1 A 0 A_PlaySound("ScrollOfHellfire/Start")
    TNT1 A 0 A_SpawnItemEx("Firewall1", 0, 0, 0, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 A 6 A_SpawnItemEx("Firewall2", 0, 0, 0, 0, 0, 0, 0, 128)
    TNT1 A 0 A_SpawnItemEx("Firewall1", 0, -16, 0, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 A 0 A_SpawnItemEx("Firewall1", 0, 16, 0, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 A 0 A_SpawnItemEx("Firewall1", 0, -32, 0, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 A 0 A_SpawnItemEx("Firewall2", 0, -32, 0, 0, 0, 0, 0, 128)
    TNT1 A 0 A_SpawnItemEx("Firewall1", 0, 32, 0, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 A 6 A_SpawnItemEx("Firewall2", 0, 32, 0, 0, 0, 0, 0, 128)
    TNT1 A 0 A_SpawnItemEx("Firewall1", 0, -48, 0, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 A 0 A_SpawnItemEx("Firewall1", 0, 48, 0, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 A 0 A_SpawnItemEx("Firewall1", 0, -64, 0, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 A 0 A_SpawnItemEx("Firewall2", 0, -64, 0, 0, 0, 0, 0, 128)
    TNT1 A 0 A_SpawnItemEx("Firewall1", 0, 64, 0, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 A 6 A_SpawnItemEx("Firewall2", 0, 64, 0, 0, 0, 0, 0, 128)
    TNT1 A 0 A_SpawnItemEx("Firewall1", 0, -80, 0, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 A 0 A_SpawnItemEx("Firewall1", 0, 80, 0, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    Stop
  Fizzle:
    TNT1 A 1
    Stop
  }
}

Actor Firewall1
{
  Radius 15
  Height 60
  Mass 0x7FFFFFFF
  +Shootable
  +NoTeleport
  +NoDamage
  +NoBlood
  +DontSplash
  +NoDamageThrust
  +BloodlessImpact
  -BloodSplatter
  +NoTarget
  DamageType Fire
  Obituary "%o tried to walk through a wall of fire"
  States
  {
  Spawn:
    TNT1 AAAAAAAAAAAAAA 5 A_SpawnItemEx("FirewallDamage", 0, 0, 30, 0, 0, 0, 0, SXF_TRANSFERPOINTERS) //A_Explode(2, 32, 1)
    TNT1 AAAAAAAAAAAAAA 5 A_SpawnItemEx("FirewallDamage", 0, 0, 30, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 AAAAAAAAAAAAAA 5 A_SpawnItemEx("FirewallDamage", 0, 0, 30, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 AAAAAAAAAAAAAA 5 A_SpawnItemEx("FirewallDamage", 0, 0, 30, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 AAAAAAAAAAAAAA 5 A_SpawnItemEx("FirewallDamage", 0, 0, 30, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 AAAAAAAAAAAAAA 5 A_SpawnItemEx("FirewallDamage", 0, 0, 30, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 AAAAAAAAAAAAAA 5 A_SpawnItemEx("FirewallDamage", 0, 0, 30, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 AAAAAAAAAAAAAA 5 A_SpawnItemEx("FirewallDamage", 0, 0, 30, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 AAAAAAAAAAAAAA 5 A_SpawnItemEx("FirewallDamage", 0, 0, 30, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 AAAAAAAAAAAAAA 5 A_SpawnItemEx("FirewallDamage", 0, 0, 30, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 AAAAAAAAAAAAAA 5 A_SpawnItemEx("FirewallDamage", 0, 0, 30, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 AAAAAAAAAAAAAA 5 A_SpawnItemEx("FirewallDamage", 0, 0, 30, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 AAAAAAAAAAAAAA 5 A_SpawnItemEx("FirewallDamage", 0, 0, 30, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 AAAAAAAAAAAAAA 5 A_SpawnItemEx("FirewallDamage", 0, 0, 30, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    TNT1 AAAAAAAAAAAAAA 5 A_SpawnItemEx("FirewallDamage", 0, 0, 30, 0, 0, 0, 0, SXF_TRANSFERPOINTERS)
    Stop
  }
}

Actor Firewall2
{
  Radius 15
  Height 55
  Mass 0x7FFFFFFF
  +NoTeleport
  +DontSplash
  States
  {
  Spawn:
    TNT1 A 0
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    TNT1 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 1 A_SpawnItemEx("FirewallFlames", Random(0, 4), 0, 15, Random(0, 2), 0, Random(1, 3), Random(0, 360), 128)
    Stop
  }
}

Actor FirewallDamage
{
  Height 1
  Radius 1
  Speed 0
  Projectile
  +DontSplash
  +NoDamageThrust
  +BloodlessImpact
  -BloodSplatter
  +NoTarget
  DamageType Fire
  States
  {
  Spawn:
    TNT1 A 0
    TNT1 A 1 A_Explode(2, 32, 1, 0, 32)
    Stop
  }
}

Actor FirewallFlames
{
  +NoInteraction
  +NoTeleport
  +ForceXYBillboard
  Radius 0
  Height 0
  RenderStyle Add
  Scale 0.65
  States
  {
  /* Spawn:
    HLFR A 0
    HLFR A 0 A_Jump(128, "Spawn2")
    HLFR ABCDEFG 2 Bright
    HLFR HIJKL 1 Bright A_FadeOut(0.15)
    Stop
  Spawn2:
    HLFR MNOPQRS 2 Bright
    HLFR TUVWX 1 Bright A_FadeOut(0.15)
    Stop */
	
	Spawn:
		TNT1 A 0
		TNT1 A 0 A_Jump(255, "SpawnA", "SpawnB", "SpawnC")
	SpawnA:
		FLM1 A 1 Bright A_Jump(255, "RotateA", "RotateB")
	SpawnB:
		FLM2 A 1 Bright A_Jump(255, "RotateA", "RotateB")
	SpawnC:
		FLM3 A 1 Bright A_Jump(255, "RotateA", "RotateB")
	RotateA:
		"####" ABCDEFG 2 Bright
		"####" HIJKL 1 Bright A_FadeOut(0.15)
		Wait
	RotateB:
		"####" MNOPQRS 2 Bright
		"####" TUVWX 1 Bright A_FadeOut(0.15)
		Wait
  }
}
