Posted By: mschoenhals
Shoots to the moon - 09/09/15 13:49
I'm having an issue where when my player pushes into another model, it sends the player up (to the moon) and out of the game play area. Any ideas on how I can stop this?
my.z -= c_trace(my.x, temp.x, IGNORE_ME | IGNORE_PASSABLE) - my.dist_to_ground;
// skill1: speed 4 // skill2: key 0 // skill3: offset_x 0 // skill4: offset_y 0 // skill5: offset_z 200 // skill6: swing 0 // skill7: angle 90 // skill8: open_manually 0 action t_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 if (my.speed == 0) my.speed = 4; if (my.offset_z == 0) my.offset_z = 200; if (my.angle == 0) my.angle = 90; while (1) { c_scan(my.x, my.pan, vector(360, 180, t_door_range), IGNORE_ME | SCAN_ENTS); // each door scans around it, trying to detect the player if (you) // detected an entity? { if (you == player) // and that entity is the player? { if (my.open_manually) // need to press a key in order to open the doors? { if(key_pressed(key_for_str(key_open))) // the "open" key was pressed? { 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! { t_open_doors(); // this function opens the doors return; } else // the player doesn't have the needed key? { wait (1); // don't do anything } } else // the door doesn't need a key { t_open_doors(); // this function opens the doors return; // the action stops afterwards } } } else // the door opens automatically { 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! { t_open_doors(); // this function opens the doors return; // the action stops afterwards } } else // this door doesn't need a key { t_open_doors(); // this function opens the doors return; // the action stops afterwards } } } } wait (1); } }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Template rpg doors and keys // Written by Mike Schoenhals, May 11th, 2015. // based on the Tutorial code by Bandicam, Devon Lively //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); while(1){wait(1); if(vec_dist(door_handle.x, player.x) < 100 && my.pan == closed_pan){ set(me, PASSABLE); while(my.pan < closed_pan+90){wait(1);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. reset(me, PASSABLE); while(key_enter){wait(1);} } } } // 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 (1) { 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 return; // the action stops afterwards } } else // this door doesn't need a key { open_doors(); // this function opens the doors return; // the action stops afterwards } } wait (1); } }
if(vec_dist(door_handle.x, player.x) < 100 && my.pan == closed_pan){ set(me, PASSABLE);
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?
while(key_enter){wait(1);}
c_scan(my.x, my.pan, vector(360, 180, door_range), IGNORE_ME | IGNORE PASSABLE | SCAN_ENTS); // each door scans around it, trying to detect the player if (you) // detected an entity?
function open_doors() // this function is called by each door { // t_door_sounds(); if (my.swing) { if (my.angle > 0) { while (my.pan < my.skill64 + my.angle) // rotate the door { my.pan += my.speed * time_step; set (my, PASSABLE); // the key is passable wait (1); } } if (my.angle < 0) { while (my.pan > my.skill64 + my.angle) // rotate the door { my.pan -= my.speed * time_step; set (my, PASSABLE); // the key is passable wait (1); } } } }
act door open if(vec_dist(door_handle.x, player.x) < 100 && my.pan == closed_pan){ set(me, PASSABLE); while(my.pan < closed_pan+90){wait(1);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. reset(me, PASSABLE); while(key_enter){wait(1);}
return; // the action stops afterwards
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, 5); while(1){wait(1); if(vec_dist(door_handle.x, player.x) < 300 && my.pan == closed_pan){ // set(me, PASSABLE); while(my.pan < closed_pan+90){wait(1);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. // reset(me, PASSABLE); while(key_enter){wait(1);} } } }
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, 5); while(1){wait(1); if(vec_dist(door_handle.x, player.x) < 300 && my.pan == closed_pan){ // // REMOVED A SET while(my.pan < closed_pan+90){wait(1);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. // // REMOVED A RESET while(key_enter){wait(1);} } } }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 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); } }