actor LightningBoltWep_NormalBar : NormalBar { args 93,229 }

actor LightningBoltWep : BaseMM8BDMWep 10019
{
//$Category MM8BDM-Weapons/AoE
//$Title Lightning Bolt
//$Sprite LIBOA0
Weapon.AmmoUse 7
Weapon.AmmoGive 28
Weapon.SlotNumber 6
Inventory.Pickupmessage "$PU_LIGHTNINGBOLT"
Obituary "$OB_LIGHTNINGBOLT"
Tag "$TAG_LIGHTNINGBOLT"
weapon.ammotype "LightningBoltAmmo"
inventory.icon "LIGHTNI"
States
{
SpawnLoop:
LIBO A -1
loop
Ready:
LIBO B 0 ACS_ExecuteAlways(998,0,177)
LIBO B 1 A_WeaponReady
Goto Ready+1
Deselect:
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Lower
LIBO B 1 A_Lower
Loop
Select:
TNT1 AAAAAAAAAAAAAAAAAAAAAA 0 A_Raise
LIBO B 1 A_Raise
Loop
Fire:
LIBO B 0 A_JumpIfNoAmmo("NoAmmo")
LIBO B 0 A_JumpIfInventory("LightningBoltCooldown",1,"NoAmmo")
LIBO B 0 A_PlaySoundEx("weapons/mmb/lightningboltfire","Weapon")
LIBO B 0 A_Stop
LIBO B 0 ACS_NamedExecuteWithResult("core_flyplayer",0,1,1) // $WeapFixes
LIBO B 0 ACS_NamedExecuteWithResult("core_freezeplayer",0,1) // $WeapFixes //SetPlayerProperty(0,1,4)
LIBO B 0 A_FireCustomMissile("LightningBoltEndpoint", 0, 1) // populates the distance
LIBO C 2 A_SpawnItemEx("LightningStartFX1",0,0,48)
LIBO C 0 A_FireCustomMissile("LightningBoltGuessShooter", 0, 0)
LIBO D 2 A_SpawnItemEx("LightningStartFX2",0,0,48)
LIBO EF 2
TNT1 A 10
TNT1 A 12 A_FireCustomMissile("LightningBoltTracerShooter", 0, 0)
TNT1 A 0 A_TakeInventory("LightningBoltLength", 99999)
TNT1 A 10
LIBO FEDC 2
LIBO B 0 ACS_NamedExecuteWithResult("core_flyplayer",0,0,1) // $WeapFixes
LIBO B 0 ACS_NamedExecuteWithResult("core_freezeplayer",0,0) // $WeapFixes
LIBO B 1 A_GiveInventory("LightningBoltCooldown",1)
LIBO B 0 A_Refire
Goto Ready+1
NoAmmo:
LIBO B 1 ACS_NamedExecuteAlways("core_noammo",0)
Goto Ready+1
}
}

actor LightningBoltCooldown : Powerup
{
    powerup.duration 20
}

actor LightningStartFX1 : BasicGraphicEffect
{
    +NOINTERACTION
    -SOLID
    +NOGRAVITY
    +NONETID
    +FORCEYBILLBOARD
    +BRIGHT
    Scale 2.5
    Speed 100
    States
    {
    SpawnFrame:
        LBFX BCD 3
        stop
    }
}

actor LightningStartFX2 : LightningStartFX1
{
    -FORCEYBILLBOARD
    States
    {
    SpawnFrame:
        LBFX EFGHIJ 3
        stop
    }
}

actor LightningBoltFX : LightningStartFX1
{
    -FORCEYBILLBOARD
    +FORCEXYBILLBOARD
    States
    {
    SpawnFrame:
        LBFX K 0
        LBFX K 0 A_ChangeVelocity(Random(-2, 2), Random(-2, 2), Random(-2, 2), CVF_REPLACE)
        LBFX KLM 1
        stop
    }
}


actor LightningBoltTracer : BasicProjectile
{
    +DONTSPLASH
    +NOEXPLODEFLOOR
    +NOCLIP
    +DONTBLAST
    Damage (0)
    Speed 60
    Radius 16
    Height 96
    ReactionTime 10
    States
    {
    Spawn:
        TNT1 A 0
        TNT1 A 0 A_ChangeFlag("FLOORHUGGER",1)
        TNT1 A 0 A_Changeflag("NOCLIP",0)
        TNT1 A 1 A_CountDown
        wait
    Death:
        TNT1 A 0 A_JumpIf(reactiontime <= 0, "XDeath")
        stop
    Crash:
    XDeath:
        TNT1 A 0
        TNT1 A 0 A_SpawnItemEx("LightningBolt")
        stop
    }
}

actor LightningBoltTracer2 : LightningBoltTracer
{
    ReactionTime 5
}

actor LightningBolt : BasicExplosion
{
    +THRUACTORS
    +NOEXPLODEFLOOR
    +FORCEYBILLBOARD
    +FLOORHUGGER
    +DONTBLAST
    +BRIGHT
    DamageType "LightningBolt"
    Obituary "$OB_LIGHTNINGBOLT"
    height 32
    radius 16
    states
    {
    Spawn:
        LIBO G 0
        LIBO G 1 A_SpawnItemEx("LightningExtend", 0, 0, 355, 0, 0, 0, 0, SXF_WEPFXCOLOR)
        LIBO G 0 A_PlaySoundEx("weapons/mmb/lightningboltexplode","Weapon")
        LIBO G 0 A_Explode(47, 128, 0)
        LIBO H 1
        LIBO I 0 A_SpawnItemEx("LightningBoltFX", Random(32, 96), Random(32, 96), 32, 0, 0, 0, 0, SXF_WEPFXCOLOR)
        LIBO I 0 A_SpawnItemEx("LightningBoltFX", Random(-32, -96), Random(-32, -96), 64, 0, 0, 0, 0, SXF_WEPFXCOLOR)
        LIBO I 0 A_SpawnItemEx("LightningBoltFX", Random(32, 96), Random(32, 96), 96, 0, 0, 0, 0, SXF_WEPFXCOLOR)
        LIBO I 0 A_SpawnItemEx("LightningBoltFX", Random(-32, -96), Random(-32, -96), 128, 0, 0, 0, 0, SXF_WEPFXCOLOR)
        LIBO I 0 A_SpawnItemEx("LightningBoltFX", Random(32, 96), Random(32, 96), 160, 0, 0, 0, 0, SXF_WEPFXCOLOR)
        LIBO I 0 A_SpawnItemEx("LightningBoltFX", Random(-32, -96), Random(-32, -96), 192, 0, 0, 0, 0, SXF_WEPFXCOLOR)
        LIBO IJK 1
        Stop
    }
}

Actor LightningExtend : BasicGraphicEffect
{
    +FORCEYBILLBOARD
    +BRIGHT
    States
    {
    SpawnFrame:
        LIBO L 0 
        LIBO L 0 A_JumpIf(ceilingz-z <= 32, "Death")
        LIBO L 0 A_SpawnItemEx("LightningExtend", 0, 0, 160, 0, 0, 0, 0, SXF_WEPFXCOLOR)
        LIBO LLMN 1
        stop
    Death:
        TNT1 A 0 
        stop
    }
}

actor LightningBoltAmmo : Ammo
{
    inventory.amount 1
    inventory.maxamount 28
    +INVENTORY.IGNORESKILL
}

// Croc Arsenal "point to" changes
actor LightningBoltLength : WeaponCharge {}

actor LightningBoltEndpoint : FastProjectile
{
    PROJECTILE
    +RIPPER
    Damage(0)
    Height 10
    Radius 5
    Speed 300
    Reactiontime 1
    States
    {
    Spawn:
        TNT1 A 0
        TNT1 A 1
        TNT1 A 0 A_Countdown
    Death:
        TNT1 A 0 ACS_NamedExecuteWithResult("core_lightningboltsetlength", 600, 12)
        // TNT1 A 0 A_SpawnItemEx("LightningBoltChargePoint", 0, 0, -(z-floorz), 0, 0, 0, 0, SXF_WEPFXCOLOR)
        stop
    }
}

actor LightningBoltChargePoint : BasicGraphicEffect
{
    reactiontime 32
	+BRIGHT
    States
    {
    SpawnFrame:
        RAT3 A 0
        RAT3 AABBCCDD 1 A_Countdown
        loop
    Death:
        TNT1 A 0
        stop
    }
}

actor LightningBoltGuess : LightningBoltTracer
{
    reactiontime 1
    damage(0)
    +RIPPER
    States
    {
    Spawn:
        TNT1 A 1 A_Countdown
        loop
    Death:
        TNT1 A 1
        TNT1 A 0 A_SpawnItemEx("LightningBoltChargePoint", 0, 0, -(z-floorz), 0, 0, 0, 0, SXF_WEPFXCOLOR)
        stop
    }
}

actor LightningBoltGuessShooter
{
    PROJECTILE
    Height 0
    Radius 0
    speed 0
    +NOINTERACTION
    +NOCLIP
    var int user_speed;
    States
    {
    Spawn:
        TNT1 A 0
        TNT1 A 0 A_SetUserVar(user_speed, CallACS("core_lightningboltgetlength", AAPTR_TARGET))
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed, 0, 0, 0)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed/2, 0, 0, 345)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed, 0, 0, 30)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed/2, 0, 0, 315)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed, 0, 0, 60)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed/2, 0, 0, 285)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed, 0, 0, 90)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed/2, 0, 0, 255)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed, 0, 0, 120)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed/2, 0, 0, 225)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed, 0, 0, 150)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed/2, 0, 0, 195)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed, 0, 0, 180)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed/2, 0, 0, 165)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed, 0, 0, 210)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed/2, 0, 0, 135)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed, 0, 0, 240)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed/2, 0, 0, 105)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed, 0, 0, 270)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed/2, 0, 0, 75)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed, 0, 0, 300)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed/2, 0, 0, 45)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed, 0, 0, 330)
        TNT1 A 0 A_SpawnItemEx("LightningBoltGuess", 0, 0, 0, user_speed/2, 0, 0, 15)
        stop
    }
}

actor LightningBoltTracerShooter : LightningBoltGuessShooter
{
    States
    {
    Spawn:
        TNT1 A 0
        TNT1 A 0 A_SetUserVar(user_speed, CallACS("core_lightningboltgetlength", AAPTR_TARGET))
        TNT1 A 1 A_SpawnItemEx("LightningBoltTracer", 0, 0, 0, user_speed/10, 0, 0, 0)
        TNT1 A 0 A_SpawnItemEx("LightningBoltTracer2", 0, 0, 0, user_speed/10, 0, 0, 345)
        TNT1 A 1 A_SpawnItemEx("LightningBoltTracer", 0, 0, 0, user_speed/10, 0, 0, 30)
        TNT1 A 0 A_SpawnItemEx("LightningBoltTracer2", 0, 0, 0, user_speed/10, 0, 0, 315)
        TNT1 A 1 A_SpawnItemEx("LightningBoltTracer", 0, 0, 0, user_speed/10, 0, 0, 60)
        TNT1 A 0 A_SpawnItemEx("LightningBoltTracer2", 0, 0, 0, user_speed/10, 0, 0, 285)
        TNT1 A 1 A_SpawnItemEx("LightningBoltTracer", 0, 0, 0, user_speed/10, 0, 0, 90)
        TNT1 A 0 A_SpawnItemEx("LightningBoltTracer2", 0, 0, 0, user_speed/10, 0, 0, 255)
        TNT1 A 1 A_SpawnItemEx("LightningBoltTracer", 0, 0, 0, user_speed/10, 0, 0, 120)
        TNT1 A 0 A_SpawnItemEx("LightningBoltTracer2", 0, 0, 0, user_speed/10, 0, 0, 225)
        TNT1 A 1 A_SpawnItemEx("LightningBoltTracer", 0, 0, 0, user_speed/10, 0, 0, 150)
        TNT1 A 0 A_SpawnItemEx("LightningBoltTracer2", 0, 0, 0, user_speed/10, 0, 0, 195)
        TNT1 A 1 A_SpawnItemEx("LightningBoltTracer", 0, 0, 0, user_speed/10, 0, 0, 180)
        TNT1 A 0 A_SpawnItemEx("LightningBoltTracer2", 0, 0, 0, user_speed/10, 0, 0, 165)
        TNT1 A 1 A_SpawnItemEx("LightningBoltTracer", 0, 0, 0, user_speed/10, 0, 0, 210)
        TNT1 A 0 A_SpawnItemEx("LightningBoltTracer2", 0, 0, 0, user_speed/10, 0, 0, 135)
        TNT1 A 1 A_SpawnItemEx("LightningBoltTracer", 0, 0, 0, user_speed/10, 0, 0, 240)
        TNT1 A 0 A_SpawnItemEx("LightningBoltTracer2", 0, 0, 0, user_speed/10, 0, 0, 105)
        TNT1 A 1 A_SpawnItemEx("LightningBoltTracer", 0, 0, 0, user_speed/10, 0, 0, 270)
        TNT1 A 0 A_SpawnItemEx("LightningBoltTracer2", 0, 0, 0, user_speed/10, 0, 0, 75)
        TNT1 A 1 A_SpawnItemEx("LightningBoltTracer", 0, 0, 0, user_speed/10, 0, 0, 300)
        TNT1 A 0 A_SpawnItemEx("LightningBoltTracer2", 0, 0, 0, user_speed/10, 0, 0, 45)
        TNT1 A 1 A_SpawnItemEx("LightningBoltTracer", 0, 0, 0, user_speed/10, 0, 0, 330)
        TNT1 A 0 A_SpawnItemEx("LightningBoltTracer2", 0, 0, 0, user_speed/10, 0, 0, 15)
        TNT1 A 1
        stop
    }
}
