#library "SHAREACS"
#include "zcommon.acs"

// SHARED jan02 2017b
#define LINE_START 1200
#define LINE_END 1230
script 700 OPEN // LINE MESSER
{
    delay(15);
	
    int j = 0;
    int x_off;
    int y_off;
    while(1)
    {delay(Random(0,478));
        int count = Random(1, 5);
        
        for(int i = 0; i < count; i++)
        {
            switch(Random(0, 1))
            {
                case 0:
                {
                    x_off = Random(1, 44) << 16;
                    y_off = Random(1, 44) << 16;
                                        
                    for(j = LINE_START; j < LINE_END; j++)
                    {
                        Line_SetTextureScale(j,
                            x_off,
                            y_off,
                            LINE_FRONT,
                            7);
                    }
                    delay(Random(1,23));
                    for(j = LINE_START; j < LINE_END; j++)
                    {
                        Line_SetTextureScale(j,
                            1 << 16,
                            1 << 16,
                            LINE_FRONT,
                            7);
                    }
                }
                case 1:
                {
                    x_off = Random(1, 44) << 16;
                    y_off = Random(1, 44) << 16;
                    for(j = LINE_START; j < LINE_END; j++)
                    {
                        Line_SetTextureOffset(j,
                            x_off,
                            y_off,
                            LINE_FRONT,
                            15);
                    }
                    delay(Random(1,23));
                    for(j = LINE_START; j < LINE_END; j++)
                    {
                        Line_SetTextureOffset(j,
                            -x_off,
                            -y_off,
                            LINE_FRONT,
                            15);
                    }
                }
            }
        }
    }
}

#define MAX_SECTORS 100
script 701 OPEN // SECTOR MESSER
{
    int targetR = 253;
    int targetG = 253;
    int targetB = 253;

    int currentR = 255;
    int currentG = 255;
    int currentB = 255;
    int dTime = 5;
    
    int currentFloorScale = 1 << 16;
    int targetFloorScale = 1 << 16;
    int floorScaleDelta = 1;
    int drawFloorScaleX;
    int drawFloorScaleY;
    
    int floorGlitchCounter = 0;
    
    while(1)
    {
        if(targetR != currentR)
        {
            if(currentR > targetR)
            {
                currentR--;
            } else {
                currentR++;
            }
        }
        if(targetG != currentG)
        {
            if(currentG > targetG)
            {
                currentG--;
            } else {
                currentG++;
            }
        }
        if(targetB != currentB)
        {
            if(currentB > targetB)
            {
                currentB--;
            } else {
                currentB++;
            }
        }

        if(currentFloorScale < targetFloorScale)
        {
            currentFloorScale += floorScaleDelta;
        } else {
            currentFloorScale -= floorScaleDelta;
        }
        
        drawFloorScaleX = currentFloorScale;
        drawFloorScaleY = currentFloorScale;
        floorGlitchCounter--;
        if(floorGlitchCounter < 0)
        {
            if(floorGlitchCounter < -1)
            {
                floorGlitchCounter = Random(15,570);
            }
            drawFloorScaleX = currentFloorScale + Random(-1 << 14, 1 << 14);
            drawFloorScaleY = currentFloorScale + Random(-1 << 14, 1 << 14);
        }
        
        for(int i = 0; i < MAX_SECTORS; i++)
        {
            Sector_SetColor(i,currentR,currentG,currentB,0);
            Sector_SetFloorScale2(i,drawFloorScaleX,drawFloorScaleY);
            Sector_SetCeilingScale2(i,drawFloorScaleX,drawFloorScaleY);
        }
        
        if(currentFloorScale == targetFloorScale)
        {
            targetFloorScale = 1 << 16 - Random(0, 1 << 11) + Random(0, 1 << 11);
        }

        
        if(currentR == targetR && currentG == targetG && currentB == targetB)
        {
            targetR = Random(200,255);
            targetG = Random(163,255);
            targetB = Random(200,255);
            dTime = Random(1,5);
        }
        delay(dTime);
    }
}

script 702 OPEN // SKY MESSER
{
    ChangeSky("XKY1","XKY2");
    int delayTime = 13;
    while(1)
    {
        delay(delayTime);
        delayTime = Random(4,100) + Random(1,100) + Random(3,100);
        
        if(Random(1,10) != 1)
        {
            delayTime += 100;
        }
        
        int newSky = Random(-65,100);
        if(newSky == -2)
        {
            ChangeSky("COMPBLUE","COMPBLUE");
            delayTime = Random(20,100);
        }
        else if(newSky == -3)
        {
            ChangeSky("COMPTALL","COMPTALL");
            delayTime = Random(20,100);
        }
        else if(newSky == -4)
        {
            ChangeSky("SKINFACE","SKINFACE");
            delayTime = Random(20,150);
        }
        else if(newSky == -5)
        {
            ChangeSky("SKSPINE2","SKSPINE2");
            delayTime = Random(20,150);
        }
        else if(newSky == -6)
        {
            ChangeSky("STARTAN2","STARTAN2");
            delay(5);
            ChangeSky("SP_FACE1","SP_FACE1");
            delayTime = Random(20,100);
        }
        else if(newSky == -1)
        {
            ChangeSky("FIREBLU1","FIREBLU1");
            delayTime = Random(20,80);
        }
        else if(newSky == -7)
        {
            ChangeSky("ZOMPBLUE","ZOMPBLUE");
            delayTime = Random(20,100);
        }
        else if(newSky == -8)
        {
            ChangeSky("ZOMPTALL","ZOMPTALL");
            delayTime = Random(20,100);
        }
        else if(newSky == -9)
        {
            ChangeSky("ZKINFACE","ZKINFACE");
            delayTime = Random(20,150);
        }
        else if(newSky == -10)
        {
            ChangeSky("ZKSPINE2","ZKSPINE2");
            delayTime = Random(20,150);
        }
        else if(newSky == -11)
        {
            ChangeSky("ZTARTAN2","ZTARTAN2");
            delay(5);
            ChangeSky("ZP_FACE1","ZP_FACE1");
            delayTime = Random(20,100);
        }
        else if(newSky == -12)
        {
            ChangeSky("ZIREBLU1","ZIREBLU1");
            delayTime = Random(20,80);
        }
        else if(newSky == -13)
        {
            ChangeSky("XOMPBLUE","XOMPBLUE");
            delayTime = Random(20,100);
        }
        else if(newSky == -14)
        {
            ChangeSky("XOMPTALL","XOMPTALL");
            delayTime = Random(20,100);
        }
        else if(newSky == -15)
        {
            ChangeSky("XKINFACE","XKINFACE");
            delayTime = Random(20,150);
        }
        else if(newSky == -16)
        {
            ChangeSky("XKSPINE2","XKSPINE2");
            delayTime = Random(20,150);
        }
        else if(newSky == -17)
        {
            ChangeSky("XTARTAN2","XTARTAN2");
            delay(5);
            ChangeSky("XP_FACE1","XP_FACE1");
            delayTime = Random(20,100);
        }
        else if(newSky == -18)
        {
            ChangeSky("XIREBLU1","XIREBLU1");
            delayTime = Random(20,80);
        }
        else if(newsky < -55)
        {
            ChangeSky("0KY1","0KY2");
        }
        else if(newsky < -45)
        {
            ChangeSky("0KY2","0KY3");
        }
        else if(newsky < -35)
        {
            ChangeSky("0KY3","0KY1");
        }
        else if (newSky < 11)
        {
            ChangeSky("QKY1","QKY2");
        }
        else if (newSky < 22)
        {
            ChangeSky("XKY1","XKY2");
        }
        else if (newSky < 33)
        {
            ChangeSky("ZKY1","ZKY2");
        }
        else if (newSky < 44)
        {
            ChangeSky("XKY2","XKY3");
        }
        else if (newSky < 55)
        {
            ChangeSky("QKY2","QKY3");
        }
        else if (newSky < 66)
        {
            ChangeSky("ZKY2","ZKY3");
        } 
        else if (newSky < 77)
        {
            ChangeSky("XKY3","XKY1");
        }
        else if (newSky < 88)
        {
            ChangeSky("QKY3","QKY1");
        }
        else {
            ChangeSky("ZKY3","ZKY1");
        }
    }
}

script 703 OPEN // SOUND MESSER
{
    while(1)
    {
        Thing_Deactivate(7031);
        Thing_Deactivate(7032);
        Thing_Activate(7030);
        delay(Random(300,956));
        
        int time = Random(1,3);
        int time2 = Random(1,3);
        int count = Random(7,9) - time - time2;
        for(int i = 0; i < count; i++)
        {
            Thing_Deactivate(7030);
            Thing_Deactivate(7031);
            Thing_Activate(7032);
            delay(time);
            Thing_Deactivate(7032);
            Thing_Activate(7030);
            delay(time);
            Thing_Deactivate(7030);
            Thing_Activate(7032);
        }
        
        if(Random(1,2) == 1)
        {
            Thing_Activate(7031);
            Thing_Deactivate(7032);
        } else if(Random(1,2) == 1)
        {
            Thing_Deactivate(7032);
            Thing_Activate(7030);
        }
    }
}

script 704 ENTER // PISTOL & PLAYER SPRITE MESSER
{
    Thing_ChangeTID(0, 99 + PlayerNumber());
    while(1)
    {
        Delay(random(60,180));
        SetActorProperty(99 + PlayerNumber(), APROP_Alpha, Random(0.5,1.0));
        SetActorProperty(99 + PlayerNumber(), APROP_StencilColor, Random(0x000000,0xFFFFFF));
        SetActorProperty(99 + PlayerNumber(), APROP_RenderStyle, random(STYLE_None,STYLE_Subtract+1));
        Delay(Random(3,60));
        SetActorProperty(99 + PlayerNumber(), APROP_RenderStyle, STYLE_Normal);
        SetActorProperty(99 + PlayerNumber(), APROP_Alpha, 1.0);
    }
}

script 705 ENTER // SKULLTAG/GZDOOM/ZANDRO DETECTOR
{
    if (SpawnForced("DynamicLight", 0, 0, 0, 0))
    {
        Log(s:"NON-ZDOOM DETECTED, PLEASE START IN REGULAR ZDOOM");
        SetFont("BIGFONT");
        HudMessage(s:"NON-ZDOOM DETECTED, PLEASE START IN REGULAR ZDOOM\nNON-ZDOOM DETECTED, PLEASE START IN REGULAR ZDOOM\nNON-ZDOOM DETECTED, PLEASE START IN REGULAR ZDOOM\nQZDOOM, GZDOOM, AND ZANDRONUM ARE INCOMPATIBLE";
            HUDMSG_PLAIN, 1, CR_CYAN, 0.5, 0.5, 0);
        Delay(1);
        SetActorProperty(99 + PlayerNumber(),APROP_Speed, 0);
        Delay(65);
        Teleport_NewMap(33, 0);
    }
}

int deathcount = 0;
#define ANO_DEATH_NUM_SOUNDS 16
script 706 DEATH
{
    str asdf[ANO_DEATH_NUM_SOUNDS] =
    { "vile/pain", "weapons/sawfull",
    "weapons/bfgf", "grunt/death1",
    "vile/death", "grunt/death2",
    "grunt/death3", "skeleton/swing",
    "skeleton/sight", "fatso/sight",
    "fatso/raiseguns", "imp/melee",
    "brain/pain","brain/sight",
    "keen/pain", "keen/death"};
    
    SetLineTexture(1200, SIDE_FRONT, TEXTURE_TOP, "XP_FACE1");
    SetLineTexture(1200, SIDE_BACK, TEXTURE_TOP, "XP_FACE1");
    SetLineTexture(1200, SIDE_FRONT, TEXTURE_BOTTOM, "XP_FACE1");
    SetLineTexture(1200, SIDE_BACK, TEXTURE_BOTTOM, "XP_FACE1");
    Scroll_Wall(1200,Random(-2.0,2.0),Random(-2.0,2.0),LINE_FRONT,7);
    Scroll_Floor(0,Random(-200,200),Random(-200,200),SCROLL);
    Scroll_Ceiling(0,Random(-200,200),Random(-200,200),SCROLL);
    SetSkyScrollSpeed (1, Random(-1.0,1.0));
    SetSkyScrollSpeed (2, Random(-1.0,1.0));
    
    PlaySound(99+PlayerNumber(),
            //asdf[ANO_DEATH_NUM_SOUNDS - 1],
            asdf[random(0, ANO_DEATH_NUM_SOUNDS)],
            CHAN_VOICE,
            0.9);
    Delay(10);
    
    
    PlaySound(99+PlayerNumber(),
            //asdf[ANO_DEATH_NUM_SOUNDS - 1],
            asdf[random(0, ANO_DEATH_NUM_SOUNDS)],
            CHAN_VOICE,
            0.9);
    Delay(8);
    PlaySound(99+PlayerNumber(),
            //asdf[ANO_DEATH_NUM_SOUNDS - 1],
            asdf[random(0, ANO_DEATH_NUM_SOUNDS)],
            CHAN_VOICE,
            0.9);
    Thing_Spawn(99+PlayerNumber(),T_REVENANT,0,2345);
    SetActorProperty(2345,APROP_Friendly,true);
    deathcount++;
}

script 707 ENTER // difficulty
{
    if(GameSkill() == 6)
    {
        Log(s:",./,;;");
        for(int i = 0; i < 950; i++)
        {
            SetActorProperty(i,APROP_RenderStyle,STYLE_None);
        }
    }
}