CheesusSliced
Member
In my game, I have npc followers similar to Earthbound. They move great, face the right way, and even stop where they are supposed to. The only problem is that since they are on separate layers if the player walks up, it looks like he is walking on the one behind him (I'll attach an image to show). I need the follower to be "below" the player when he moves down, left, or right, but "above" the player when he moves up, yet I have no idea how to do this. Here is what I have so far. (obj_kris_dw_ow is the player and obj_susie_dw_ow is the follower) Here is my code:
obj_kris_dw_ow create:
obj_kris_dw_ow step:
obj_kris_dw_ow key press S:
obj_susie_dw_ow create:
obj_susie_dw_ow step:
obj_kris_dw_ow create:
GML:
//follower pos record
array_size = 69; //the amount of positions to record
for(var i = array_size-1; i >= 0; i --){
follow_pos_x[i] = x;
follow_pos_y[i] = y;
toRecordSprite[i] = spr_kris_dw_down_move;
}
followerExist = false;
GML:
//movement 💩💩💩💩
hInput = keyboard_check(vk_right) - keyboard_check(vk_left);
vInput = keyboard_check(vk_down) - keyboard_check(vk_up);
if(hInput != 0 or vInput != 0){
dir = point_direction(0,0,hInput,vInput);
moveX = lengthdir_x(mvspd, dir);
moveY = lengthdir_y(mvspd, dir);
x += moveX;
y += moveY;
switch(dir){
case 0: sprite_index = spr_kris_dw_right_move; break;
case 90: sprite_index = spr_kris_dw_up_move; break;
case 180: sprite_index = spr_kris_dw_left_move; break;
case 270: sprite_index = spr_kris_dw_down_move; break;
}
} else {
image_index = 0
}
//follower following position and which way to turn
if (x != xprevious or y != yprevious){
for(var i = array_size-1; i > 0; i --){
follow_pos_x[i] = follow_pos_x[i-1];
follow_pos_y[i] = follow_pos_y[i-1];
toRecordSprite[i] = toRecordSprite[i-1];
}
follow_pos_x[0] = x;
follow_pos_y[0] = y;
toRecordSprite[0] = sprite_index;
}
GML:
followerExist = !followerExist//changes it from true to false and vice versa
if(followerExist){
var follower_1 = instance_create_layer(x-20,y-20, "Follower_Below", obj_susie_dw_ow);
follower_1.record = 10;
} else {
layer_destroy_instances("Follower_Below");
}
GML:
lastposrec = 10
s_walk_Sprite_Down = spr_susie_dw_down_move;
s_walk_Sprite_Left = spr_susie_dw_left_move;
s_walk_Sprite_Right = spr_susie_dw_right_move;
s_walk_Sprite_Up = spr_susie_dw_up_move;
GML:
switch(obj_kris_dw_ow.toRecordSprite[record]){
case spr_kris_dw_down_move: sprite_index = s_walk_Sprite_Down; break;
case spr_kris_dw_up_move: sprite_index = s_walk_Sprite_Up; break;
case spr_kris_dw_left_move: sprite_index = s_walk_Sprite_Left; break;
case spr_kris_dw_right_move: sprite_index = s_walk_Sprite_Right; break;
}
x = obj_kris_dw_ow.follow_pos_x[lastposrec];
y = obj_kris_dw_ow.follow_pos_y[lastposrec];
image_index = obj_kris_dw_ow.image_index;
Attachments
-
66.6 KB Views: 16