Luke Pierson
Member
EDIT: Hey everyone! Help would be appreciated So I fixed the collision, however, during the flee state, and not the chase state, the bat will flee and then turn around and chase the player, and then spaz out
I'm probably doing something very obviously wrong, but I need help. Flying enemies in platformers seem hard to code if you've never done it before
Code:
// Swoop code
// This code assumes that obj_player and obj_bat both have centered origins
vdir = 1; // Bat starts by going down, assuming it will generally be perched high
if (obj_bat.y < obj_hero.y - max_swoop) {vdir = 1;} // If bat is too high, start flying down
if (obj_bat.y > obj_hero.y + max_swoop) {vdir = -1;} // If bat is too low, start flying up
if (obj_bat.y = obj_hero.y) {vdir = 0;}
x += hdir;
y += vdir;
if ((abs(obj_hero.x - obj_bat.x) > turn_distance) && (sign(obj_hero.x - obj_bat.x) == -hdir)) // If bat is further than turn_distance and facing away from player
{
hdir = -hdir; // Reverse direction
}
// No need for a separate turn state, since I'm just abruptly turning
var right_taken = place_meeting(x-1, y, obj_wall);
var left_taken = place_meeting(x+1, y, obj_wall);
var up_taken = place_meeting(x, y+1, obj_wall);
var down_taken = place_meeting(x, y-1, obj_wall);
if right_taken {
x += 1;
}
if left_taken {
x -= 1;
}
if up_taken {
y -= 1;
}
if down_taken {
y += 1;
}
Code:
// Flee code
// Similar to swoop, but make it move away from the player
vdir = 3; // Bat starts by going down, assuming it will generally be perched high
if (obj_bat.y < obj_hero.y - max_swoop) {vdir = 1;} // If bat is too high, start flying down
if (obj_bat.y > obj_hero.y + max_swoop) {vdir = -1;} // If bat is too low, start flying up
if (obj_bat.y = obj_hero.y) {vdir = 0;}
x += -hdir;
y += -vdir;
if ((abs(obj_hero.x - obj_bat.x) > turn_distance) && (sign(obj_hero.x - obj_bat.x) == -hdir)) // If bat is further than turn_distance and facing away from player
{
hdir = -hdir; // Reverse direction
}
// No need for a separate turn state, since I'm just abruptly turning
if (distance_to_object(obj_hero) > safe_distance*2) {state = state.idle;}
var right_taken = place_meeting(x-1, y, obj_wall);
var left_taken = place_meeting(x+1, y, obj_wall);
var up_taken = place_meeting(x, y+1, obj_wall);
var down_taken = place_meeting(x, y-1, obj_wall);
if right_taken {
x += 1;
}
if left_taken {
x -= 1;
}
if up_taken {
y -= 1;
}
if down_taken {
y += 1;
}
I'm probably doing something very obviously wrong, but I need help. Flying enemies in platformers seem hard to code if you've never done it before
Last edited: