// Blood Effects from NASHGORE.WAD - Thanks to Nash Muhandes.

// Modify the internal Blood actor to spawn flying blood
actor RLNashGore_Blood : Blood replaces Blood
{
	+CANNOTPUSH
    states
    {
    Spawn:
        TNT1 AAA 0
		TNT1 A 0 A_JumpIf(CallACS("LambdaCheck"), "HalfLifeBlood") // Check for Lambda
		TNT1 A 0 A_JumpIf(!CallACS("DRLA_Gibs"), 2)
        TNT1 A 0 A_SpawnItemEx("RLNashGore_FlyingBlood", 0,0,0,
            VelX+FRandom (-4,4),VelY+FRandom (-4,4),VelZ+FRandom (0,8),
            0, SXF_ABSOLUTEMOMENTUM | SXF_TRANSFERALPHA | SXF_TRANSFERRENDERSTYLE | SXF_TRANSFERTRANSLATION)
        BLUD CBA 8
        stop
    HalfLifeBlood:
        TNT1 A 0 A_SpawnItemEx("HLBlood", 0,0,0,
            VelX,VelY,VelZ,
            0, SXF_ABSOLUTEMOMENTUM | SXF_TRANSFERALPHA | SXF_TRANSFERRENDERSTYLE | SXF_TRANSFERTRANSLATION)
        Stop
    }
}

actor RLNashGore_BloodSplatter : Blood replaces BloodSplatter
{
	+CANNOTPUSH
    states
    {
    Spawn:
        TNT1 AAA 0
		TNT1 A 0 A_JumpIf(CallACS("LambdaCheck"), "HalfLifeBlood") // Check for Lambda
		TNT1 A 0 A_JumpIf(!CallACS("DRLA_Gibs"), 2)
        TNT1 A 0 A_SpawnItemEx("RLNashGore_FlyingBlood", 0,0,0,
            VelX+FRandom (-4,4),VelY+FRandom (-4,4),VelZ+FRandom (0,8),
            0, SXF_ABSOLUTEMOMENTUM | SXF_TRANSFERALPHA | SXF_TRANSFERRENDERSTYLE | SXF_TRANSFERTRANSLATION)
        BLUD CBA 8
        stop
    HalfLifeBlood:
        TNT1 A 0 A_SpawnItemEx("HLBlood", 0,0,0,
            VelX,VelY,VelZ,
            0, SXF_ABSOLUTEMOMENTUM | SXF_TRANSFERALPHA | SXF_TRANSFERRENDERSTYLE | SXF_TRANSFERTRANSLATION)
        Stop
    }
}

actor RLNashGore_SlashBlood : Blood // will change later on for melee slashing weaponry
{
	+CANNOTPUSH
    states
    {
    Spawn:
        TNT1 AAA 0
		TNT1 A 0 A_JumpIf(CallACS("LambdaCheck"), "HalfLifeBlood") // Check for Lambda
		TNT1 A 0 A_JumpIf(!CallACS("DRLA_Gibs"), 2)
        TNT1 A 0 A_SpawnItemEx("RLNashGore_FlyingBlood", 0,0,0,
            VelX+FRandom (-4,4),VelY+FRandom (-4,4),VelZ+FRandom (0,8),
            0, SXF_ABSOLUTEMOMENTUM | SXF_TRANSFERALPHA | SXF_TRANSFERRENDERSTYLE | SXF_TRANSFERTRANSLATION)
        BLUD CBA 8
        stop
    HalfLifeBlood:
        TNT1 A 0 A_SpawnItemEx("HLBlood", 0,0,0,
            VelX,VelY,VelZ,
            0, SXF_ABSOLUTEMOMENTUM | SXF_TRANSFERALPHA | SXF_TRANSFERRENDERSTYLE | SXF_TRANSFERTRANSLATION)
        Stop
    }
}

//------------------------------------------------------------------------------

actor RLNashGore_CyberBlood : Blood
{
	+CANNOTPUSH
    states
    {
    Spawn:
        TNT1 AAA 0
		TNT1 A 0 A_JumpIf(CallACS("LambdaCheck"), "HalfLifeBlood") // Check for Lambda
		TNT1 A 0 A_JumpIf(!CallACS("DRLA_Gibs"), 2)
        TNT1 A 0 A_SpawnItemEx("RLNashGore_FlyingBlood", 0,0,0,
            VelX+FRandom (-4,4),VelY+FRandom (-4,4),VelZ+FRandom (0,8),
            0, SXF_ABSOLUTEMOMENTUM | SXF_TRANSFERALPHA | SXF_TRANSFERRENDERSTYLE | SXF_TRANSFERTRANSLATION)
		TNT1 A 0 A_Jump(235, 2)
		TNT1 A 0 A_CustomRailgun (0, 0, "None", "LightBlue", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(0,359), frandom(-90,90), 16+frandom(0.0,32.0), 1, 0.2, 0, "None")
        BLUD CBA 8
        stop
    HalfLifeBlood:
        TNT1 A 0 A_SpawnItemEx("HLBlood", 0,0,0,
            VelX,VelY,VelZ,
            0, SXF_ABSOLUTEMOMENTUM | SXF_TRANSFERALPHA | SXF_TRANSFERRENDERSTYLE | SXF_TRANSFERTRANSLATION)
        Stop
    }
}

actor RLNashGore_BossBlood : Blood
{
	+CANNOTPUSH
    states
    {
    Spawn:
        TNT1 AAA 0
		TNT1 A 0 A_Jump(180, "Nope")
		TNT1 A 0 A_JumpIf(CallACS("LambdaCheck"), "HalfLifeBlood") // Check for Lambda
		TNT1 A 0 A_JumpIf(!CallACS("DRLA_Gibs"), 2)
        TNT1 A 0 A_SpawnItemEx("RLNashGore_FlyingBlood", 0,0,0,
            VelX+FRandom (-4,4),VelY+FRandom (-4,4),VelZ+FRandom (0,8),
            0, SXF_ABSOLUTEMOMENTUM | SXF_TRANSFERALPHA | SXF_TRANSFERRENDERSTYLE | SXF_TRANSFERTRANSLATION)
        BLUD CBA 8
        Stop
    Nope:
        TNT1 A 0
        Stop
    HalfLifeBlood:
        TNT1 A 0 A_SpawnItemEx("HLBlood", 0,0,0,
            VelX,VelY,VelZ,
            0, SXF_ABSOLUTEMOMENTUM | SXF_TRANSFERALPHA | SXF_TRANSFERRENDERSTYLE | SXF_TRANSFERTRANSLATION)
        Stop
    }
}

actor RLNashGore_TechVileBlood : Blood
{
	+CANNOTPUSH
    states
    {
    Spawn:
        TNT1 AAA 0
		TNT1 A 0 A_JumpIf(CallACS("LambdaCheck"), "HalfLifeBlood") // Check for Lambda
		TNT1 A 0 A_JumpIf(!CallACS("DRLA_Gibs"), 2)
        TNT1 A 0 A_SpawnItemEx("RLNashGore_FlyingBlood", 0,0,0,
            VelX+FRandom (-4,4),VelY+FRandom (-4,4),VelZ+FRandom (0,8),
            0, SXF_ABSOLUTEMOMENTUM | SXF_TRANSFERALPHA | SXF_TRANSFERRENDERSTYLE | SXF_TRANSFERTRANSLATION)
		TNT1 A 0 A_Jump(128, 2)
		TNT1 A 0 A_CustomRailgun (0, 0, "None", "Red", RGF_SILENT | RGF_FULLBRIGHT, 0, 45, "RLCacobyssLightningPuff2", frandom(0,359), frandom(-90,90), 16+frandom(0.0,32.0), 1, 0.2, 0, "None")
        BLUD CBA 8
        stop
    HalfLifeBlood:
        TNT1 A 0 A_SpawnItemEx("HLBlood", 0,0,0,
            VelX,VelY,VelZ,
            0, SXF_ABSOLUTEMOMENTUM | SXF_TRANSFERALPHA | SXF_TRANSFERRENDERSTYLE | SXF_TRANSFERTRANSLATION)
        Stop
    }
}

ACTOR RLSpectreBlood : RLNashGore_Blood
{
    RenderStyle OptFuzzy
    Alpha 0.5
    states
    {
    Spawn:
        TNT1 AAA 0
		TNT1 A 0 A_JumpIf(CallACS("LambdaCheck"), "HalfLifeBlood") // Check for Lambda
		TNT1 A 0 A_JumpIf(!CallACS("DRLA_Gibs"), 2)
        TNT1 A 0 A_SpawnItemEx("RLNashGore_FlyingBlood", 0,0,0,
            VelX+FRandom (-4,4),VelY+FRandom (-4,4),VelZ+FRandom (0,8),
            0, SXF_ABSOLUTEMOMENTUM | SXF_TRANSFERALPHA | SXF_TRANSFERRENDERSTYLE | SXF_TRANSFERTRANSLATION)
        BLUD CBA 8
        stop
    HalfLifeBlood:
        TNT1 A 0 A_SpawnItemEx("HLBlood", 0,0,0,
            VelX,VelY,VelZ,
            0, SXF_ABSOLUTEMOMENTUM | SXF_TRANSFERALPHA | SXF_TRANSFERRENDERSTYLE | SXF_TRANSFERTRANSLATION)
        Stop
    }
}

// Blood sprite that flies outwards and leaves trails behind
actor RLNashGore_FlyingBlood
{
    +NOTONAUTOMAP
    scale 0.75
    health 1
    radius 8
    height 1
    mass 1
    +CORPSE
    +NOTELEPORT
    +NOBLOCKMAP
	+CANNOTPUSH
    states
    {
    Spawn:
        TNT1 A 0 A_CheckSight("Cheap")
        FBLD A 1 A_SpawnItemEx("RLNashGore_FlyingBloodTrail", 0,0,0, 0,0,0, 0,
            SXF_TRANSFERTRANSLATION | SXF_TRANSFERALPHA | SXF_TRANSFERRENDERSTYLE)
        FBLD A 1 A_JumpIf(waterlevel > 1, "Remove")
        loop
    Cheap:
        FBLD A 8 A_SpawnItemEx("RLNashGore_FlyingBloodTrail", 0,0,0, 0,0,0, 0,
            SXF_TRANSFERTRANSLATION | SXF_TRANSFERALPHA | SXF_TRANSFERRENDERSTYLE)
        FBLD A 1 A_JumpIf(waterlevel > 1, "Remove")
        loop
    Crash:
        TNT1 A 1 A_SpawnItemEx("RLNashGore_BloodSpot", 0,0,0, 0,0,0, 0,
            SXF_TRANSFERTRANSLATION | SXF_TRANSFERALPHA | SXF_TRANSFERRENDERSTYLE)
        stop
    Remove: // Anti-Lag - Removes blood in water.
        TNT1 A 0 
        stop
    }
}

actor RLNashGore_BloodSpot
{
    +NotOnAutomap
    radius 12
    height 2
    mass 1
    +NOTELEPORT
    +NOBLOCKMAP
    +MOVEWITHSECTOR
    states
    {
    Spawn:
        TNT1 A 0
        TNT1 A 0 A_PlaySound("gibbage/blood",0)
        TNT1 A 0 A_Jump(64,4)
        TNT1 A 0 A_Jump(128,4)
        TNT1 A 0 A_Jump(192,4)
        TNT1 A 0 A_Jump(255,4)
        // make the blood spots stay on the ground. 1500 is the default duration.
        BSPT AAAAAAAAAA 50 A_JumpIf(!CallACS("DRLA_Gibs"), "Remove")
        Goto FadeOutA
        BSPT BBBBBBBBBB 50 A_JumpIf(!CallACS("DRLA_Gibs"), "Remove")
        Goto FadeOutB
        BSPT CCCCCCCCCC 50 A_JumpIf(!CallACS("DRLA_Gibs"), "Remove")
        Goto FadeOutC
        BSPT DDDDDDDDDD 50 A_JumpIf(!CallACS("DRLA_Gibs"), "Remove")
        Goto FadeOutD
    Remove: // Anti-Lag - Removes blood in water.
        TNT1 A 0 
        stop
    FadeOutA:
        BSPT A 1 A_Fadeout(0.0025)
        loop
    FadeOutB:
        BSPT B 1 A_Fadeout(0.0025)
        loop
    FadeOutC:
        BSPT C 1 A_Fadeout(0.0025)
        loop
    FadeOutD:
        BSPT D 1 A_Fadeout(0.0025)
        loop
    }
}

// Blood trails spawned by FlyingBlood
actor RLNashGore_FlyingBloodTrail
{
    +NotOnAutomap
    scale 0.70
    mass 1
    +LOWGRAVITY
    +NOTELEPORT
    +NOBLOCKMAP
	+CANNOTPUSH
    states
    {
    Spawn:
        BTRL A 4 A_JumpIf(waterlevel > 1, "Remove")
        BTRL B 4 A_JumpIf(waterlevel > 1, "Remove")
        BTRL C 4 A_JumpIf(waterlevel > 1, "Remove")
        BTRL D 4 A_JumpIf(waterlevel > 1, "Remove")
        stop
    Remove: // Anti-Lag - Removes blood in water.
        TNT1 A 0 
        stop
    }
}
