Advertisement
Wolfrost

SZ Pushout

Nov 13th, 2016
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. sz_PushOut:
  2.  
  3. ///sz_PushOut(last_hdir,last_vdir);
  4. /* Push an object out from obj_Block.
  5. ** argument0 : last_hdir
  6. ** argument1 : last_vdir
  7. ** Returns: N/A
  8. */
  9. //IL PUSHOUT DELLA VITA
  10.  
  11. var i; i=0;
  12. while((place_meeting(x-i,y,obj_Block))&&(place_meeting(x+i,y,obj_Block))&&(place_meeting(x,y-i,obj_Block))&&(place_meeting(x,y+i,obj_Block))) i+=1;
  13. var left,right,up,down;
  14. left = !place_meeting(x-i,y,obj_Block);
  15. right = !place_meeting(x+i,y,obj_Block);
  16. up = !place_meeting(x,y-i,obj_Block);
  17. down = !place_meeting(x,y+i,obj_Block);
  18. if(left){
  19.     if(right){
  20.         if(up){
  21.             if(down){
  22.                 //left & right & up & down
  23.                 //scelgo vdir
  24.                 y-=argument1*i;
  25.             }else{
  26.                 //left & right & up
  27.                 //scelgo hdir
  28.                 x-=argument0*i;
  29.             }
  30.         }else{
  31.             /*Dato che ho due possibili direzioni orizzontali in cui muovere l'oggetto e una o nessuna verticale muovo sempre orizzontalmente, ergo il controllo è inutile
  32.             if(down){
  33.                 //left & right & down
  34.                 //scelgo hdir
  35.                 x+=argument0*i;
  36.             }else{
  37.                 //left & right
  38.                 x+=argument0*i;
  39.             }*/
  40.             x-=argument0*i;
  41.         }
  42.     }else{
  43.         if(up){
  44.             if(down){
  45.                 //left & up & down
  46.                 //scelgo vdir
  47.                 y-=argument1*i;
  48.             }else{
  49.                 //left & up
  50.                 if(argument0==-1){
  51.                     if(argument1==-1){
  52.                         //boh è uguale, scelgo up
  53.                         y-=i;
  54.                     }else{
  55.                         x-=i;
  56.                     }
  57.                 }else{
  58.                     y-=i;
  59.                 }
  60.             }
  61.         }else{
  62.             if(down){
  63.                 //left & down
  64.                 if(argument0==-1){
  65.                     if(argument1==1){
  66.                         //boh è uguale, scelgo down
  67.                         y+=i;
  68.                     }else{
  69.                         x-=i;
  70.                     }
  71.                 }else{
  72.                     y+=i;
  73.                 }
  74.             }else{
  75.                 //left
  76.                 x-=i;
  77.             }
  78.         }
  79.     }
  80. }else{
  81.     if(right){
  82.         if(up){
  83.             if(down){
  84.                 //right & up & down
  85.                 //scelgo vdir
  86.                 y-=argument1*i;
  87.             }else{
  88.                 //right & up
  89.                 if(argument0==1){
  90.                     if(argument1==-1){
  91.                         //boh è uguale, scelgo up
  92.                         y-=i;
  93.                     }else{
  94.                         x+=i;
  95.                     }
  96.                 }else{
  97.                     y-=i;
  98.                 }
  99.             }
  100.         }else{
  101.             if(down){
  102.                 //right & down
  103.                 if(argument0==1){
  104.                     if(argument1==1){
  105.                         //boh è uguale, scelgo down
  106.                         y+=i;
  107.                     }else{
  108.                         x+=i;
  109.                     }
  110.                 }else{
  111.                     y+=i;
  112.                 }
  113.             }else{
  114.                 //right
  115.                 x+=i;
  116.             }
  117.         }
  118.     }else{
  119.         if(up){
  120.             if(down){
  121.                 //up & down
  122.                 y-=argument1*i;
  123.             }else{
  124.                 //up
  125.                 y-=i;
  126.             }
  127.         }else{
  128.             if(down){
  129.                 //down
  130.                 y+=i;
  131.             }else{
  132.                 //ALTRIMENTI NON FA UN CULOH.
  133.             }
  134.         }
  135.     }
  136. }
  137.  
  138. //SCALE (SALITA)
  139. while(place_meeting(x,y,par_stair)) y-=1;
  140.  
  141. //PORTE
  142. var ii;
  143. ii=instance_place(x,y,obj_Door);
  144. if(ii!=noone){
  145.     if(!ii.stato){
  146.         while(place_meeting(x,y,obj_Door)) x-=argument0;
  147.     }
  148. }
  149.  
  150. Zeb Step:
  151.  
  152. if(is_Walking)
  153. {
  154.     //BLOCK
  155.     if(place_meeting(x+hmove,y,obj_Block)) {  //allineamento se non c'è spazio per effettuare lo spostamento (collisione)
  156.         while(!place_meeting(x+sign(hmove),y,obj_Block))
  157.             x+=sign(hmove);
  158.         hmove=0;
  159.     }                               //fine allineamento
  160.     //DOOR
  161.     if(place_meeting(x+hmove,y,obj_Door)) {  //allineamento se non c'è spazio per effettuare lo spostamento (collisione)
  162.         var ii;
  163.         ii=instance_place(x+hmove,y,obj_Door);
  164.         if(ii!=noone){
  165.             if(!ii.stato){
  166.                 while(!place_meeting(x+sign(hmove),y,obj_Door))
  167.                     x+=sign(hmove);
  168.                 hmove=0;
  169.             }
  170.         }
  171.     }                                    //fine allineamento
  172.     x+=hmove;  //movimento orizzontale senza GAMEPAD
  173. }
  174.  
  175. //SCALE
  176. /*if(place_meeting(x,y+vmove,obj_StairBlockLeft)) {  //allineamento se non c'è spazio per effettuare lo spostamento (collisione)
  177.         while(!place_meeting(x,y+sign(vmove),obj_StairBlockLeft))
  178.             y+=sign(vmove);
  179.         vmove=0;
  180. }
  181. if(place_meeting(x,y+vmove,obj_StairBlockRight)) {  //allineamento se non c'è spazio per effettuare lo spostamento (collisione)
  182.         while(!place_meeting(x,y+sign(vmove),obj_StairBlockRight))
  183.             y+=sign(vmove);
  184.         vmove=0;
  185. }*/
  186. if(place_meeting(x,y+vmove,par_stair)) {  //allineamento se non c'è spazio per effettuare lo spostamento (collisione)
  187.         while(!place_meeting(x,y+sign(vmove),par_stair))
  188.             y+=sign(vmove);
  189.         vmove=0;
  190. }
  191. /*if(place_meeting(x,y+vmove,obj_Scala)) {  //allineamento se non c'è spazio per effettuare lo spostamento (collisione)
  192.         while(!place_meeting(x,y+sign(vmove),obj_Scala))
  193.             y+=sign(vmove);
  194.         vmove=0;
  195. }
  196.  
  197. list = sz_ListColl();
  198. if(!ds_list_empty(list)){
  199.     for(var i = 0; i< ds_list_size(list); i++){
  200.         yy = list[| i].y;
  201.     }
  202.     y = yy - sprite_get_height(mask_index)/2;
  203. }*/
  204.  
  205. if(is_OnStair){
  206.     maxval = 9;
  207.     i = 1;
  208.     t = false;
  209.     while(!t && i<=maxval){
  210.         if(place_meeting(x,y+i,par_stair)) t = true;
  211.         else i++;
  212.     }
  213.     if(t) y += i;    
  214. }
  215.  
  216.  
  217. //BLOCCO
  218. if(place_meeting(x,y+vmove,obj_Block)) {  //allineamento se non c'è spazio per effettuare lo spostamento (collisione)
  219.         while(!place_meeting(x,y+sign(vmove),obj_Block))
  220.             y+=sign(vmove);
  221.         vmove=0;
  222. }
  223.  
  224.  
  225. //vdir
  226.  
  227. vdir=sign(vmove);
  228. if(vdir!=0) prec_vdir=vdir;
  229.  
  230. y+=vmove;  //movimento verticale
  231.  
  232. ///CLIMBING
  233. var block = instance_nearest(x,y,obj_Ladder);
  234. var tastoScendi = keyboard_check_pressed(ord("S"))||sz_GamepadCheckStick(0,thresh,1,gp_axislv);
  235.  
  236. if(is_Climbing) {
  237.     if (climb_create_contr) climb_create_contr = false;
  238.     if(place_meeting(x,y,obj_Ladder)){  //se ci sono le scale
  239.             if(climbkey_down && place_meeting(x,y+1,obj_Block)) {  //e premo sotto ma sotto c'è un blocco
  240.                 //metto a false e esco dal code
  241.                 is_Climbing=false;
  242.                 exit;
  243.             }else{
  244.                 //prima di tutto allineiamo zeb alla scala
  245.                 x = instance_place(x,y,obj_Ladder).x;  //se entrambe le origini sono centrate
  246.                 //gravità
  247.                 grav = 0;
  248.                 vmove=0;
  249.                 //movimento
  250.                 y+=climb_speed * (-climbkey_up+climbkey_down);
  251.             }
  252.     } else {
  253.         if (y<instance_nearest(x,y,obj_ClimbingTrigger).y) {  //altrimenti se sto salendo ma non c'è più una scala significa che sono arrivato su e quindi
  254.             //Creo anche un obj_block
  255.             is_Climbing=false;
  256.             if !climb_create_contr topBlock = instance_create(block.x-16,block.y,obj_Block);
  257.             climb_create_contr=true;
  258.         } else sz_PushOutY();
  259.     }
  260. }
  261.  
  262. if ((instance_exists(topBlock))&&(!place_meeting(x,y,obj_secTrigger4))&&(tastoScendi||(instance_exists(obj_ClimbingTrigger) && y>instance_nearest(x,y,obj_ClimbingTrigger).y))) with topBlock instance_destroy();
  263. if(instance_exists(obj_Ladder)){
  264.     if (instance_exists(instance_nearest(x,y,obj_Ladder).myTopBlock)&&instance_exists(instance_nearest(x,y,obj_Ladder).myTrigger)) {
  265.         if (place_meeting(x,y,instance_nearest(x,y,obj_Ladder).myTrigger)) {
  266.             if (tastoScendi&&!place_meeting(x,y,obj_secTrigger4)) with (instance_nearest(x,y,obj_Ladder).myTopBlock) instance_destroy();
  267.         }
  268.     }
  269. }
  270.  
  271. if (is_Climbing&&x!=instance_nearest(x,y,obj_Ladder).x) is_Climbing = false;
  272.  
  273. ///LEDGEGRABBING
  274. if(is_GrabbingLedge){
  275.     var ics;
  276.     var ips;
  277.     switch(lg_status){
  278.         case 0:{
  279.             ics = 0;
  280.             ips = sprite_get_height(mask_index)/2;
  281.             if(jumpkey_hold) lg_status=1;
  282.             if(crouchkey){
  283.                 is_GrabbingLedge = false;
  284.                 lg_enabled = false;
  285.                 alarm[9] = 10;
  286.             }
  287.             break;
  288.         }
  289.         case 1:{
  290.             switch(floor(image_index)){
  291.                 case 0:{
  292.                     ics = 0;
  293.                     ips = sprite_get_height(mask_index)/2;
  294.                     break;
  295.                 }
  296.                 case 1:{
  297.                     ics = 0;
  298.                     ips = sprite_get_height(mask_index)/2 - 16;
  299.                     break;
  300.                 }
  301.                 case 2:{
  302.                     ics = 0;
  303.                     ips = sprite_get_height(mask_index)/2 - 32;
  304.                     break;
  305.                 }
  306.                 case 3:{
  307.                     ics = 0;
  308.                     ips = sprite_get_height(mask_index)/2 - 40;
  309.                     break;
  310.                 }
  311.                 case 4:{
  312.                     ics = 0;
  313.                     ips = sprite_get_height(mask_index)/2 - 45;
  314.                     break;
  315.                 }
  316.             }
  317.             break;
  318.         }
  319.         case 2:{
  320.             ics = hdir*(sprite_get_width(mask_index)/2+1);
  321.             ips = -sprite_get_height(mask_index)/2;
  322.             is_GrabbingLedge=false;
  323.             lg_status=0;
  324.             break;
  325.         }
  326.     }
  327.     x = lg_ii.x -4*hdir + ics;
  328.     y = lg_ii.y - 4 + ips;  
  329. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement