function enemy_physics(_solid_obj = oParentSolid) { if !place_meeting(x, y + 1, oParentSolid) y_spd += global.g; if place_meeting(x, y + y_spd, _solid_obj) { while !place_meeting(x, y + sign(y_spd), _solid_obj) y += sign(y_spd); y_spd = 0; } y += y_spd * global.time_scale; if place_meeting(x + x_spd, y, _solid_obj) { while !place_meeting(x + sign(x_spd), y, _solid_obj) x += sign(x_spd); x_spd = 0; } x += x_spd * global.time_scale; } function enemy_get_hit(_damage, _kx, _ky) { hp -= _damage; if can_hitstun hitstun_timer = hitstun_max; x_spd = _kx * 10 * kb_factor; y_spd = _ky * 4 * kb_factor; image_blend = c_blue; alarm[0] = 10; if hp <= 0 { is_dead = true; instance_destroy(); // animation } } function enemy_crawl_ai() { var _wall_ahead = place_meeting(x + facing, y, oParentSolid); var _hazard_ahead = place_meeting(x + facing * abs(sprite_width) / 2, y, oParentHazard); var _ledge_ahead = !place_meeting(x + facing * abs(sprite_width), y + 1, oParentSolid); if _wall_ahead || _ledge_ahead || _hazard_ahead facing *= -1; x_spd = facing * walk_spd; }