Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- sz_PushOut:
- ///sz_PushOut(last_hdir,last_vdir);
- /* Push an object out from obj_Block.
- ** argument0 : last_hdir
- ** argument1 : last_vdir
- ** Returns: N/A
- */
- //IL PUSHOUT DELLA VITA
- var i; i=0;
- 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;
- var left,right,up,down;
- left = !place_meeting(x-i,y,obj_Block);
- right = !place_meeting(x+i,y,obj_Block);
- up = !place_meeting(x,y-i,obj_Block);
- down = !place_meeting(x,y+i,obj_Block);
- if(left){
- if(right){
- if(up){
- if(down){
- //left & right & up & down
- //scelgo vdir
- y-=argument1*i;
- }else{
- //left & right & up
- //scelgo hdir
- x-=argument0*i;
- }
- }else{
- /*Dato che ho due possibili direzioni orizzontali in cui muovere l'oggetto e una o nessuna verticale muovo sempre orizzontalmente, ergo il controllo è inutile
- if(down){
- //left & right & down
- //scelgo hdir
- x+=argument0*i;
- }else{
- //left & right
- x+=argument0*i;
- }*/
- x-=argument0*i;
- }
- }else{
- if(up){
- if(down){
- //left & up & down
- //scelgo vdir
- y-=argument1*i;
- }else{
- //left & up
- if(argument0==-1){
- if(argument1==-1){
- //boh è uguale, scelgo up
- y-=i;
- }else{
- x-=i;
- }
- }else{
- y-=i;
- }
- }
- }else{
- if(down){
- //left & down
- if(argument0==-1){
- if(argument1==1){
- //boh è uguale, scelgo down
- y+=i;
- }else{
- x-=i;
- }
- }else{
- y+=i;
- }
- }else{
- //left
- x-=i;
- }
- }
- }
- }else{
- if(right){
- if(up){
- if(down){
- //right & up & down
- //scelgo vdir
- y-=argument1*i;
- }else{
- //right & up
- if(argument0==1){
- if(argument1==-1){
- //boh è uguale, scelgo up
- y-=i;
- }else{
- x+=i;
- }
- }else{
- y-=i;
- }
- }
- }else{
- if(down){
- //right & down
- if(argument0==1){
- if(argument1==1){
- //boh è uguale, scelgo down
- y+=i;
- }else{
- x+=i;
- }
- }else{
- y+=i;
- }
- }else{
- //right
- x+=i;
- }
- }
- }else{
- if(up){
- if(down){
- //up & down
- y-=argument1*i;
- }else{
- //up
- y-=i;
- }
- }else{
- if(down){
- //down
- y+=i;
- }else{
- //ALTRIMENTI NON FA UN CULOH.
- }
- }
- }
- }
- //SCALE (SALITA)
- while(place_meeting(x,y,par_stair)) y-=1;
- //PORTE
- var ii;
- ii=instance_place(x,y,obj_Door);
- if(ii!=noone){
- if(!ii.stato){
- while(place_meeting(x,y,obj_Door)) x-=argument0;
- }
- }
- Zeb Step:
- if(is_Walking)
- {
- //BLOCK
- if(place_meeting(x+hmove,y,obj_Block)) { //allineamento se non c'è spazio per effettuare lo spostamento (collisione)
- while(!place_meeting(x+sign(hmove),y,obj_Block))
- x+=sign(hmove);
- hmove=0;
- } //fine allineamento
- //DOOR
- if(place_meeting(x+hmove,y,obj_Door)) { //allineamento se non c'è spazio per effettuare lo spostamento (collisione)
- var ii;
- ii=instance_place(x+hmove,y,obj_Door);
- if(ii!=noone){
- if(!ii.stato){
- while(!place_meeting(x+sign(hmove),y,obj_Door))
- x+=sign(hmove);
- hmove=0;
- }
- }
- } //fine allineamento
- x+=hmove; //movimento orizzontale senza GAMEPAD
- }
- //SCALE
- /*if(place_meeting(x,y+vmove,obj_StairBlockLeft)) { //allineamento se non c'è spazio per effettuare lo spostamento (collisione)
- while(!place_meeting(x,y+sign(vmove),obj_StairBlockLeft))
- y+=sign(vmove);
- vmove=0;
- }
- if(place_meeting(x,y+vmove,obj_StairBlockRight)) { //allineamento se non c'è spazio per effettuare lo spostamento (collisione)
- while(!place_meeting(x,y+sign(vmove),obj_StairBlockRight))
- y+=sign(vmove);
- vmove=0;
- }*/
- if(place_meeting(x,y+vmove,par_stair)) { //allineamento se non c'è spazio per effettuare lo spostamento (collisione)
- while(!place_meeting(x,y+sign(vmove),par_stair))
- y+=sign(vmove);
- vmove=0;
- }
- /*if(place_meeting(x,y+vmove,obj_Scala)) { //allineamento se non c'è spazio per effettuare lo spostamento (collisione)
- while(!place_meeting(x,y+sign(vmove),obj_Scala))
- y+=sign(vmove);
- vmove=0;
- }
- list = sz_ListColl();
- if(!ds_list_empty(list)){
- for(var i = 0; i< ds_list_size(list); i++){
- yy = list[| i].y;
- }
- y = yy - sprite_get_height(mask_index)/2;
- }*/
- if(is_OnStair){
- maxval = 9;
- i = 1;
- t = false;
- while(!t && i<=maxval){
- if(place_meeting(x,y+i,par_stair)) t = true;
- else i++;
- }
- if(t) y += i;
- }
- //BLOCCO
- if(place_meeting(x,y+vmove,obj_Block)) { //allineamento se non c'è spazio per effettuare lo spostamento (collisione)
- while(!place_meeting(x,y+sign(vmove),obj_Block))
- y+=sign(vmove);
- vmove=0;
- }
- //vdir
- vdir=sign(vmove);
- if(vdir!=0) prec_vdir=vdir;
- y+=vmove; //movimento verticale
- ///CLIMBING
- var block = instance_nearest(x,y,obj_Ladder);
- var tastoScendi = keyboard_check_pressed(ord("S"))||sz_GamepadCheckStick(0,thresh,1,gp_axislv);
- if(is_Climbing) {
- if (climb_create_contr) climb_create_contr = false;
- if(place_meeting(x,y,obj_Ladder)){ //se ci sono le scale
- if(climbkey_down && place_meeting(x,y+1,obj_Block)) { //e premo sotto ma sotto c'è un blocco
- //metto a false e esco dal code
- is_Climbing=false;
- exit;
- }else{
- //prima di tutto allineiamo zeb alla scala
- x = instance_place(x,y,obj_Ladder).x; //se entrambe le origini sono centrate
- //gravità
- grav = 0;
- vmove=0;
- //movimento
- y+=climb_speed * (-climbkey_up+climbkey_down);
- }
- } else {
- 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
- //Creo anche un obj_block
- is_Climbing=false;
- if !climb_create_contr topBlock = instance_create(block.x-16,block.y,obj_Block);
- climb_create_contr=true;
- } else sz_PushOutY();
- }
- }
- 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();
- if(instance_exists(obj_Ladder)){
- if (instance_exists(instance_nearest(x,y,obj_Ladder).myTopBlock)&&instance_exists(instance_nearest(x,y,obj_Ladder).myTrigger)) {
- if (place_meeting(x,y,instance_nearest(x,y,obj_Ladder).myTrigger)) {
- if (tastoScendi&&!place_meeting(x,y,obj_secTrigger4)) with (instance_nearest(x,y,obj_Ladder).myTopBlock) instance_destroy();
- }
- }
- }
- if (is_Climbing&&x!=instance_nearest(x,y,obj_Ladder).x) is_Climbing = false;
- ///LEDGEGRABBING
- if(is_GrabbingLedge){
- var ics;
- var ips;
- switch(lg_status){
- case 0:{
- ics = 0;
- ips = sprite_get_height(mask_index)/2;
- if(jumpkey_hold) lg_status=1;
- if(crouchkey){
- is_GrabbingLedge = false;
- lg_enabled = false;
- alarm[9] = 10;
- }
- break;
- }
- case 1:{
- switch(floor(image_index)){
- case 0:{
- ics = 0;
- ips = sprite_get_height(mask_index)/2;
- break;
- }
- case 1:{
- ics = 0;
- ips = sprite_get_height(mask_index)/2 - 16;
- break;
- }
- case 2:{
- ics = 0;
- ips = sprite_get_height(mask_index)/2 - 32;
- break;
- }
- case 3:{
- ics = 0;
- ips = sprite_get_height(mask_index)/2 - 40;
- break;
- }
- case 4:{
- ics = 0;
- ips = sprite_get_height(mask_index)/2 - 45;
- break;
- }
- }
- break;
- }
- case 2:{
- ics = hdir*(sprite_get_width(mask_index)/2+1);
- ips = -sprite_get_height(mask_index)/2;
- is_GrabbingLedge=false;
- lg_status=0;
- break;
- }
- }
- x = lg_ii.x -4*hdir + ics;
- y = lg_ii.y - 4 + ips;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement