/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Template rpg doors and keys
// Written by Mike Schoenhals, May 11th, 2015.
// based on the Tutorial code by Bandicam, Devon Lively
// HACKED by Malice
//DOOR MUST HAVE BOUNDING BOX FLAG ENABLED!!!!!!!
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define key skill1
#define key skill2
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
var door_range = 120; //scan distance of door to player
var key_rotating_speed = 5; //how fast should the key rotate when visible
STRING* got_key_wav = "gotkey.wav"; //sets the file name for getting a key
STRING* door_opens_wav = "dooropens.wav"; //sets the file name for opening the door
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function key_collision()
{
if (you == player)
{
my.skill67 = 1;
}
}
//Below is a define skill statement needed for the customizable window in WED. Note how they are commented out.
// skill1: key 0
action keys()
{
set (my, PASSABLE); // the key is passable
while (!player) {wait (1);} // wait until the player model is loaded
while (vec_dist (player.x, my.x) > 50) // wait until the player comes close to the key
{
my.pan += 5 * time_step; // rotate while waiting for the player
wait (1);
}
player.skill70 = my.skill1; // now pass the value set inside the key's skill1 using Wed to player's skill70
SND_CREATE_STATIC(got_the_key, got_key_wav);
snd_play(got_the_key, 80, 0); // play the "got the key" sound
set (my, INVISIBLE); // make the key invisible
wait (-1);
ent_remove(my); // and then remove it after a second
}
function open_doors() // this function is called by each door
{
set(me, POLYGON | SHADOW);
var door_swing_speed = 5;
var closed_pan = my.pan;
var OPEN_OR_CLOSED = 0;
// if (is(my.FLAG1))
{
OPEN_OR_CLOSED = 1;
my.pan+=90;
closed_pan = my.pan-90;
}
VECTOR door_handle;
//vec_for_vertex(door_handle, me, 1); // Not needed at all
while(1){
if(vec_dist(my.x, player.x) < 100 && my.pan == closed_pan)
{
if(!key_enter && my.skill88)
{
my.skill88=0;
}
if(key_enter && !my.skill88)
{
my.skill88 = 1;
my.skill89 = 1;
}
if(my.pan < closed_pan+90 && my.skill89)
{
my.pan+=door_swing_speed;
SND_CREATE_STATIC(door_opens, door_opens_wav); // play the "door opens" sound
snd_play(door_opens, 100, 0);
// door_sounds(); //runs the function for sounds below.
}
}
wait(1); // wait goes at the end....
}
}
// skill2: key 0
action door()
{
while (!player) {wait (1);} // wait until the player is loaded
vec_set (my.skill61, my.x); // store the xyz initial position of the door inside skill61... 63
my.skill64 = my.pan; // store the initial pan angle
while (!my.skill89)
{
c_scan(my.x, my.pan, vector(360, 180, door_range), IGNORE_ME | SCAN_ENTS); // each door scans around it, trying to detect the player
if (you) // detected an entity?
{
if (my.skill2 > 0) // this door needs a key?
{
if (player.skill70 == my.skill2) // the player has got the proper key? then let's open the door!
{
open_doors(); // this function opens the doors
break; // the action stops afterwards
}
}
else // this door doesn't need a key
{
open_doors(); // this function opens the doors
break; // the action stops afterwards
}
}
wait (1);
}
}