Frictional Games Forum (read-only)
How to make lightning go off randomly? - Printable Version

+- Frictional Games Forum (read-only) (https://www.frictionalgames.com/forum)
+-- Forum: Amnesia: The Dark Descent (https://www.frictionalgames.com/forum/forum-6.html)
+--- Forum: Custom Stories, TCs & Mods (https://www.frictionalgames.com/forum/forum-35.html)
+--- Thread: How to make lightning go off randomly? (/thread-7078.html)



How to make lightning go off randomly? - Viperdream - 03-27-2011

So I have this room where I want lightning to go off randomly.

This is what I've found in the Rainy Halls map. As this is the onliest one I know that has random events.
Code:
/*Random lightning and thunder at start of level
*/
void TimerThunder(string &in asTimer)
{
    AddLocalVarInt("ThunderStep", 1);                //What step to play in the event
    float fEventSpeed = RandFloat(0.05f, 0.15f);    //The default time between steps in an event

    switch(GetLocalVarInt("ThunderStep")) {
        case 1:
            ThunderLights(2,0.05f);
        break;
        case 2:
            ThunderLights(1,0.05f);
        break;
        case 3:
            ThunderLights(3,0.05f);
        break;
        case 4:
            ThunderLights(1,0.05f);
        break;
        case 5:
            ThunderLights(2,0.05f);
        break;
        case 6:
            ThunderLights(3,0.05f);
        break;
        case 7:
            ThunderLights(1,0.3f);
            PlaySoundAtEntity("Thunder", "general_thunder.snt", "AreaThunder", 0.0f, false);
        break;
    }
    
    if(GetLocalVarInt("ThunderStep") < 8)  AddTimer("thunder", fEventSpeed, "TimerThunder");
    else {
        SetLocalVarInt("ThunderStep", 0);
        
        AddTimer("thunder", RandFloat(10.0f, 30.0f), "TimerThunder");
    }
}
void ThunderLights(int alIntensity, float afFade)
{
    /*Skip parts of a flash everynow and then but not the first strong light
    **and not the last "back to normal" light
     */
    if(RandFloat(1, 3) == 1 && (GetLocalVarInt("ThunderStep") != 3 or GetLocalVarInt("ThunderStep") != 7)) return;
    
    float fF = 0.2f;
    
    switch(alIntensity) {
        case 1:
            for(int i=0;i<=5;i++) FadeLightTo("spotthunder_"+i,0.52f,0.55f,0.6f,0.45f,-1,afFade-0.04f);
            for(int i=0;i<=7;i++) FadeLightTo("pointthunder_"+i,0.32f,0.35f,0.4f,0.2f,-1,afFade-0.025f);
            for(int i=0;i<=3;i++) FadeLightTo("ambthunder_"+i,0.2f,0.25f,0.35f,-1,-1,afFade);
        break;
        case 2:
            for(int i=0;i<=5;i++) FadeLightTo("spotthunder_"+i,0.82f+fF,0.85f+fF,0.9f+fF,0.9f+fF,-1,afFade-0.04f);
            for(int i=0;i<=7;i++) FadeLightTo("pointthunder_"+i,0.72f+fF,0.75f+fF,0.8f+fF,0.4f+fF,-1,afFade-0.025f);
            for(int i=0;i<=3;i++) FadeLightTo("ambthunder_"+i,0.25f+fF,0.3f+fF,0.4f+fF,-1,-1,afFade);
        break;
        case 3:
            for(int i=0;i<=5;i++) FadeLightTo("spotthunder_"+i,0.92f+fF,0.95f+fF,1+fF,1+fF,-1,afFade-0.04f);
            for(int i=0;i<=7;i++) FadeLightTo("pointthunder_"+i,0.82f+fF,0.85f+fF,0.9f+fF,0.5f+fF,-1,afFade-0.025f);
            for(int i=0;i<=3;i++) FadeLightTo("ambthunder_"+i,0.3f+fF,0.35f+fF,0.45f+fF,-1,-1,afFade);
        break;
    }
}


Onliest thing that I could understand were the game scripts. But I'm completely lost at the Break and Case. And what is
Code:
void ThunderLights(int alIntensity, float afFade)
I didn't even find a callback function for it.

I'm not asking you to write a script. I merely want an explanation for these things. Google didn't really make it clear for me.
So I was hoping I could get a push in the right direction here Smile


RE: How to make lightning go off randomly? - Pandemoneus - 03-27-2011

It's a custom function.
The devs could have named it
Code:
void ThunderLights(int a, float b)
aswell.

And to make "random" timers, use RandInt or RandFloat.
If you use RandInt(0, 10); for example it will choose a random whole number between (and including) 0 and 10.


RE: How to make lightning go off randomly? - Viperdream - 03-27-2011

And what is the time between those then?


RE: How to make lightning go off randomly? - Pandemoneus - 03-27-2011

Code:
AddTimer("thunder", RandFloat(10.0f, 30.0f), "TimerThunder");

Make the timer function call itself...