madman404

teleport code example (not copy-pastable)

Oct 18th, 2020
1,594
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. case AT_USPECIAL: //double teleport
  2.         var tele_distance = 150;
  3.         if window != 5 {
  4.             can_move = false;
  5.         }
  6.         switch window {
  7.             case 1:
  8.                 if window_timer == 1 {
  9.                     set_window_value(attack, 5, AG_WINDOW_TYPE, 7); //window 5 is the last window
  10.                 }
  11.                 if window_timer == get_window_value(attack, window, AG_WINDOW_LENGTH) {
  12.                     current_angle = joy_dir; //current_angle is being reused from previous code, it's just where you're aiming
  13.                     target_x = x + lengthdir_x(tele_distance,current_angle); //figure out where we're gonna go
  14.                     target_y = y + lengthdir_y(tele_distance,current_angle);
  15.                 }
  16.             break;
  17.             case 2:
  18.                 visible = false;
  19.                 invincible = true;
  20.                 if window_timer == 2 {
  21.                     //time to make sure it's actually a reasonable location
  22.                     var object_colliding = place_meeting(target_x,target_y,all);
  23.                     if object_colliding != oPlayer && object_colliding != noone && object_colliding != asset_get("par_fallthrough") && !place_free(target_x,target_y) { //if it isn't a player or platform and it isn't nothing, it's solid
  24.  
  25.                     }
  26.                     else {
  27.                         x = target_x;
  28.                         y = target_y;
  29.                     }
  30.                 }
  31.             break;
  32.             case 3:
  33.                 visible = true;
  34.                 invincible = false;
  35.                 if window_timer == get_window_value(attack, window, AG_WINDOW_LENGTH) {
  36.                     current_angle = joy_dir;
  37.                     target_x = x + lengthdir_x(tele_distance,current_angle); //figure out where we're gonna go
  38.                     target_y = y + lengthdir_y(tele_distance,current_angle);
  39.                     //make sure location is reasonable
  40.                     if place_meeting(target_x,target_y,asset_get("par_block")) || position_meeting(target_x,target_y,asset_get("obj_article_solid")) {
  41.                         //if we collide with a solid object at the given position, store its type in object_colliding for a collision test a few lines down
  42.                         var object_colliding;
  43.                         if place_meeting(target_x,target_y,asset_get("par_block")) {
  44.                             object_colliding = asset_get("par_block");
  45.                         }
  46.                         else if place_meeting(target_x,target_y,asset_get("obj_article_solid")) {
  47.                             object_colliding = asset_get("obj_article_solid");
  48.                         }
  49.                         var collision_lenience = 70;
  50.                         for (var i = 0; i < collision_lenience; i++) {
  51.                             if !place_meeting(target_x,target_y - i, object_colliding) { //if this new spot is not inside the colliding object
  52.                                 target_y = target_y - i;
  53.                                 print_debug("putting player at new offset x = " + string(target_x) + ", y = " + string(target_y) + "!");
  54.                                 break; //end the loop early
  55.                             }
  56.                             else if (i == collision_lenience - 1) { //if we're at the end of the loop and there is still a collision happening
  57.                                 print_debug("i == " + string(i));
  58.                                
  59.                                 var line_length_r = 0;
  60.                                 var line_length_l = 0;
  61.                                 var final_x_offset = 0;
  62.                                 var y_bump_offset = collision_lenience - 1; //distance to bump the player up when not putting them on the floor
  63.                                 var r_check_done = false;
  64.                                 var l_check_done = false;
  65.                                 for (var p = 0; p >= 0; p++) { //infinite loop, this is probably a bad idea
  66.                                     if (!place_meeting(target_x + p, target_y, object_colliding) && !r_check_done) {
  67.                                         line_length_r = p;
  68.                                         r_check_done = true;
  69.                                         print_debug("right check success! distance = " + string(line_length_r) + "!");
  70.                                     }
  71.                                     if (!place_meeting(target_x - p, target_y, object_colliding) && !l_check_done) {
  72.                                         line_length_l = p;
  73.                                         l_check_done = true;
  74.                                         print_debug("left check success! distance = " + string(line_length_l) + "!");
  75.                                     }
  76.                                     if r_check_done || l_check_done { //&& is more stable(?) but runs a lot of unnecessary math
  77.                                         break;
  78.                                     }
  79.                                     if p > room_width {
  80.                                         break; //if we somehow checked collision way outside even the width of the stage, we should probably stop cause this cant be right
  81.                                         print_debug("something went wrong on the collision check!");
  82.                                         print_debug("left line length: " + string(line_length_l));
  83.                                         print_debug("right line length: " + string(line_length_r));
  84.                                     }
  85.                                 }
  86.                                 //final_x_offset = line_length_r < line_length_l ? line_length_r : (line_length_l)*(-1); //if length r is longer, the final offset should be r, if not, it should be l
  87.                                 final_x_offset = r_check_done >= l_check_done ? line_length_r : line_length_l*(-1);
  88.                                 if (line_length_l == line_length_r) {
  89.                                     final_x_offset = 0;
  90.                                 }
  91.                                 target_x += final_x_offset; //adjust x to be outside the collision
  92.                                 target_y -= y_bump_offset;
  93.                                 break; //ending the loop, just to be safe
  94.                             }
  95.                         }
  96.  
  97.                     }
  98.                 }
  99.             break;
  100.             case 4:
  101.                 visible = false;
  102.                 invincible = true;
  103.                 if window_timer == 3 {
  104.                     x = target_x;
  105.                     y = target_y;
  106.                 }
  107.             break;
  108.             case 5:
  109.                 visible = true;
  110.                 invincible = false;
  111.             break;
  112.         }
  113.     break;
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×