Facebook Twitter YouTube Frictional Games | Forum | Privacy Policy | Dev Blog | Dev Wiki | Support | Gametee


Thread Rating:
  • 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Random Scares
PutraenusAlivius Offline
Posting Freak

Posts: 4,713
Threads: 75
Joined: Dec 2012
Reputation: 119
#1
Random Scares

Hello everyone! I've used this technique in my custom story, A Forgotten Memory. Special thanks for people that helped me to understand this. Using this will randomize the scares you will have. This gives the CS/FC replay value.

It's like this, each playthrough had different results. Example;
First Playthrough : You pass out and wakes up in some other place.
Second Playthrough : A door blew open.

It's good. Why? Because the Player will think like he knew, but he didn't.

Okay, enough with the chattering. Let's start.

PHP Code: (Select All)
void OnStart()
{
AddEntityCollideCallback("Player""ScriptArea_1""PlrCollideSwitch"true1);
}

void PlrCollideSwitch(string &in asParentstring &in asChildint alState)
{
int x RandInt(15);
switch(
x)
{
case 
1:
//Scare 1
    
break;
case 
2:
//Scare 2
    
break;
case 
3:
//Scare 3
    
break;
case 
4:
//Scare 4
    
break;
case 
5:
//Scare 5
    
break;
}

Get it? Integer is RandInt, and it will randomize between 1 and 5 as 1 is the minimal and 5 is the maximal. If one of the cases fit with the inputInteger, it will do that case until the first break is reached. For this, you don't need curly brackets({}) to envelope code, but you need breaks.
Just change the
//Scare #CaseNumber
to what scare you want.

Even nobody including you (the creator) will know which one is picked.
This will give your custom story/full conversion replay value.

OFF-TOPIC:
Even Scares are now can be randomized. I'm so smart.

EDIT:
It seems like the script gives everyone an error. I already changed it and now tell me if it works or not.

"Veni, vidi, vici."
"I came, I saw, I conquered."
(This post was last modified: 05-17-2013, 12:26 PM by PutraenusAlivius.)
04-16-2013, 03:10 PM
Find
Yare Offline
Junior Member

Posts: 22
Threads: 2
Joined: Mar 2013
Reputation: 0
#2
RE: Random Scares

Most of scripts in CS I am making now is also random, but in a little bit different way. I mostly use Random Int to get an event activate or not. For example, I put some script area in the middle of the room and create RandInt(1,4). Then, with conditional statement "if", I check if randomized Int equals 1 (or any other number in the range). If it does, the event activates. It means, that there is 25% chance for the event to activate. In other words, the more you walk around the room, the more chance you have to make the scare happen.
Sometimes I add timers to those events with random time, usually ranging from 0 to 5 seconds. That means, the event may occur instantly as well as with uncertain delay.
I tested some of my random events already and this... "randomness" really makes them much more alive. They are not anymore so stiff and occuring instantly after you walk into some area.
04-16-2013, 03:39 PM
Find
PutraenusAlivius Offline
Posting Freak

Posts: 4,713
Threads: 75
Joined: Dec 2012
Reputation: 119
#3
RE: Random Scares

(04-16-2013, 03:39 PM)Yare Wrote: Most of scripts in CS I am making now is also random, but in a little bit different way. I mostly use Random Int to get an event activate or not. For example, I put some script area in the middle of the room and create RandInt(1,4). Then, with conditional statement "if", I check if randomized Int equals 1 (or any other number in the range). If it does, the event activates. It means, that there is 25% chance for the event to activate. In other words, the more you walk around the room, the more chance you have to make the scare happen.
Sometimes I add timers to those events with random time, usually ranging from 0 to 5 seconds. That means, the event may occur instantly as well as with uncertain delay.
I tested some of my random events already and this... "randomness" really makes them much more alive. They are not anymore so stiff and occuring instantly after you walk into some area.

Switch statements are more useful as they all can be put into just one function.

"Veni, vidi, vici."
"I came, I saw, I conquered."
(This post was last modified: 04-17-2013, 06:11 AM by PutraenusAlivius.)
04-17-2013, 06:10 AM
Find
Yare Offline
Junior Member

Posts: 22
Threads: 2
Joined: Mar 2013
Reputation: 0
#4
RE: Random Scares

Well, in your example it's surely much more comfortable. But in calculating a chance of event occurence, it doesn't really matter whether I use switch or if. Here is an example of sound function, that consists of both our ideas:

void SoundArea8(string &in asParent, string &in asChild, int alState)
{
    SetLocalVarInt("EventChance", RandInt(1,3));
    if (GetLocalVarInt("EventChance") == 1) AddTimer("", RandInt(0,3), "SoundArea8Delay");
}
void SoundArea8Delay(string &in asTimer)
{    
    SetLocalVarInt("WhatSound", RandInt(1,4));
    switch(GetLocalVarInt("WhatSound"))
    {
        case 1:
            
        SetLocalVarInt("WhatArea", RandInt(46,49));
        PlaySoundAtEntity("", "18_blow_wind.snt", "ScriptArea_"+GetLocalVarInt("WhatArea"), 0, false);
        break;
            
        case 2:

        SetLocalVarInt("WhatArea", RandInt(46,49));
        PlaySoundAtEntity("", "15_man01_whimp.snt", "ScriptArea_"+GetLocalVarInt("WhatArea"), 0, false);
        break;
        
        case 3:

        SetLocalVarInt("WhatArea", RandInt(46,49));
        PlaySoundAtEntity("", "05_whine.snt", "ScriptArea_"+GetLocalVarInt("WhatArea"), 0, false);
        break;
        
        case 4:

        SetLocalVarInt("WhatArea", RandInt(46,49));
        PlaySoundAtEntity("", "suitor/amb_idle_whimp.snt", "ScriptArea_"+GetLocalVarInt("WhatArea"), 0, false);
        break;
    }
}

The script has 30% chance to activate (it works every time you walk into area). It can be activated instantly or with not more than 3 seconds delay. It plays one of four sounds in one of four script areas. I know it looks more complicated with full variables declarations, but somehow only in this way everything is clear to me.
04-17-2013, 12:44 PM
Find
PutraenusAlivius Offline
Posting Freak

Posts: 4,713
Threads: 75
Joined: Dec 2012
Reputation: 119
#5
RE: Random Scares

(04-17-2013, 12:44 PM)Yare Wrote: Well, in your example it's surely much more comfortable. But in calculating a chance of event occurence, it doesn't really matter whether I use switch or if. Here is an example of sound function, that consists of both our ideas:

void SoundArea8(string &in asParent, string &in asChild, int alState)
{
    SetLocalVarInt("EventChance", RandInt(1,3));
    if (GetLocalVarInt("EventChance") == 1) AddTimer("", RandInt(0,3), "SoundArea8Delay");
}
void SoundArea8Delay(string &in asTimer)
{    
    SetLocalVarInt("WhatSound", RandInt(1,4));
    switch(GetLocalVarInt("WhatSound"))
    {
        case 1:
            
        SetLocalVarInt("WhatArea", RandInt(46,49));
        PlaySoundAtEntity("", "18_blow_wind.snt", "ScriptArea_"+GetLocalVarInt("WhatArea"), 0, false);
        break;
            
        case 2:

        SetLocalVarInt("WhatArea", RandInt(46,49));
        PlaySoundAtEntity("", "15_man01_whimp.snt", "ScriptArea_"+GetLocalVarInt("WhatArea"), 0, false);
        break;
        
        case 3:

        SetLocalVarInt("WhatArea", RandInt(46,49));
        PlaySoundAtEntity("", "05_whine.snt", "ScriptArea_"+GetLocalVarInt("WhatArea"), 0, false);
        break;
        
        case 4:

        SetLocalVarInt("WhatArea", RandInt(46,49));
        PlaySoundAtEntity("", "suitor/amb_idle_whimp.snt", "ScriptArea_"+GetLocalVarInt("WhatArea"), 0, false);
        break;
    }
}

The script has 30% chance to activate (it works every time you walk into area). It can be activated instantly or with not more than 3 seconds delay. It plays one of four sounds in one of four script areas. I know it looks more complicated with full variables declarations, but somehow only in this way everything is clear to me.

Does it work? Because I spotted one error and I want you to confirm that it worked or not.

"Veni, vidi, vici."
"I came, I saw, I conquered."
04-17-2013, 12:51 PM
Find
Yare Offline
Junior Member

Posts: 22
Threads: 2
Joined: Mar 2013
Reputation: 0
#6
RE: Random Scares

I have just checked that once again. Seems like working properly.
04-17-2013, 01:55 PM
Find
VeNoMzTeamHysterical Offline
Member

Posts: 240
Threads: 36
Joined: Dec 2012
Reputation: 3
#7
RE: Random Scares

really nice thx Wink

http://www.frictionalgames.com/forum/thread-21719.html
Evil Awaking Work In Progress!
Hours Spend 472.
04-17-2013, 02:04 PM
Website Find
FlawlessHappiness Offline
Posting Freak

Posts: 3,980
Threads: 145
Joined: Mar 2012
Reputation: 171
#8
RE: Random Scares

can a switch script determine if the case has been used before?

Trying is the first step to success.
04-18-2013, 11:11 AM
Find
PutraenusAlivius Offline
Posting Freak

Posts: 4,713
Threads: 75
Joined: Dec 2012
Reputation: 119
#9
RE: Random Scares

(04-18-2013, 11:11 AM)BeeKayK Wrote: can a switch script determine if the case has been used before?

Dunno.

"Veni, vidi, vici."
"I came, I saw, I conquered."
04-18-2013, 11:58 AM
Find
Your Computer Offline
SCAN ME!

Posts: 3,456
Threads: 32
Joined: Jul 2011
Reputation: 235
#10
RE: Random Scares

(04-18-2013, 11:11 AM)BeeKayK Wrote: can a switch script determine if the case has been used before?

Switch statements normally check against integer values, and an integer value isn't enough information to check if something has been used before. If statements check against boolean values, normally through the use of boolean operators or values that can be implicitly converted into a boolean value. Unfortunately, AngelScript scripting (at least the version that comes with Amnesia) doesn't implicitly convert other data types into boolean values for if statement conditions.

Tutorials: From Noob to Pro
04-18-2013, 12:10 PM
Website Find




Users browsing this thread: 1 Guest(s)