//UPDATE INPUT input_left = keyboard_check(vk_left) or keyboard_check(ord("A")); input_right = keyboard_check(vk_right) or keyboard_check(ord("D")); input_up = keyboard_check(vk_up) or keyboard_check(ord("W")); input_down = keyboard_check(vk_down) or keyboard_check(ord("S")); input_walk = keyboard_check(vk_control) ; input_run = keyboard_check(vk_shift); //ALTER SPEED if (input_walk or input_run) { spd = abs((input_walk * w_spd) - (input_run * r_spd)); } else { spd = n_spd; } //Gamepad Movement var ix = gamepad_axis_value(input_device, gp_axislh); var iy = gamepad_axis_value(input_device, gp_axislv); var dx = abs(ix)*ix * spd; var dy = abs(iy)*iy * spd; var l = 0; if (ix != 0 or iy != 0) { l = sqrt(ix*ix + iy*iy); } //RESET MOVE VARIABLES moveX = 0; moveY = 0; //INTENDED MOVEMENT moveY = (input_down - input_up) * spd //Had a major error with this, may have to play around with it if (moveY == 0){ moveX = (input_right - input_left) * spd; } moveX = (input_right - input_left) * spd //This fixed the error but I'm not sure if I need to ammend it if (moveX == 0){ moveY = (input_down - input_up) * spd; } //This might make it worse //GET DIRECTION PLAYER IS FACING if(moveX != 0) { switch(sign(moveX)){ case 1: facing = dir.right; break; case -1: facing = dir.left; break; } } else if(moveY != 0){ switch(sign(moveY)){ case 1: facing = dir.down; break; case -1: facing = dir.up; break; } } else { facing = -1; } //COLLISION CHECKS //horizontal check if(moveX != 0) { var collisionH = instance_place(x+moveX, y, obj_collision); if(collisionH != noone and collisionH.collideable){ repeat(abs(moveX)){ if(!place_meeting(x+sign(moveX), y, obj_collision)){ x += sign(moveX); } else { break; } } moveX = 0; } } //vertical check if(moveY !=0) { var collisionV = instance_place(x, y+moveY, obj_collision); if(collisionV != noone and collisionV.collideable){ repeat(abs(moveY)){ if(!place_meeting(x, y+sign(moveY), obj_collision)){ y += sign(moveY); } else { break; } } moveY = 0; } } //APPLY MOVEMENT x += moveX; y += moveY; //Objects var inst = instance_place(x,y, obj_transitions); if( inst !=noone and facing == inst.playerFacingBefore){ with(obj_game) { if(!doTransition) { spawnRoom = inst.TargetRoom; spawnX = inst.targetX; spawnY = inst.targetY; spawnPlayerFacing = inst.playerFacingAfter; doTransition = true; } } }