event_inherited(); if (!instance_exists(obj_plat_player)) { scr_flower_despwn(); exit; } if (global.pause_plat) { scr_pause_alarms(); exit; } if (is_stunned) exit; if (!can_attack) exit; reteleport_timer++; knifecount = 12 - hp; var timerlimit = 45 + (2 * hp); var attacklimit = 2 + floor(hp / 2); if (instance_exists(obj_dw_garden_aquaplatforming)) { var tt = obj_dw_garden_aquaplatforming.enemywavetimer / 2700; knifecount = max(knifecount, floor(lerp(3, 12, tt))); timerlimit = min(timerlimit, ceil(lerp(67, 45, tt))); attacklimit = min(attacklimit, ceil(lerp(8, 2, tt))); } else { var num_enemies = instance_number(obj_flower_enmparent); knifecount = ceil(knifecount / num_enemies); } if (protected) knifecount = floor(6 - (0.5 * hp)); contimer += 1; if (con == 2) evadecon = 0; if (evadecon > 0) { evadetimer++; if (evadetimer == 1) { remx = x; remy = y; } var evade_ease = ease_out_quad(evadetimer / 10, 0, 1, 1); x = lerp(remx, remx + (12 * evadedirection), evade_ease); y = lerp(remy, remy - 4, evade_ease); if (evadetimer == 10) evadecon = 0; } if (con == 0) { if (contimer == 30) { con = 1; contimer = 0; } } else if (con == 1) { if (contimer == 2) { snd_play(snd_wing); flash_hurt(16777215); } if (contimer == 6) attacking = true; if (contimer >= timerlimit && evadecon == 0) { con = 2; nextlerp = (nextlerp + 1) % 4; contimer = 0; if (regular_enemy) { var len = random_range(140, 220) + (5 * abs(obj_plat_player.hspeed)); var dir = 0; if (obj_plat_player.x < x) dir = random_range(-55, 55) + 180; else dir = random_range(-55, 55); gx = clamp(x + lengthdir_x(len, dir), camerax() + 40, camerax() + 600); gy = clamp(y + lengthdir_y(len, dir), max(cameray() + 120, obj_plat_player.y - 100), obj_plat_player.y - 40); gtime = 15; } else { gx = xstart + (targetlerp[nextlerp][0] * -320); gy = ystart + (targetlerp[nextlerp][1] * 120); gtime = targetlerp[nextlerp][2]; } lerpinst[0] = scr_lerpvar("x", x, gx, gtime, 2, "inout"); lerpinst[1] = scr_lerpvar("y", y, gy, gtime, 2, "inout"); } } else if (con == 2) { scr_afterimage_monochrome(get_tint_blend(), true).image_alpha = 0.3; if (contimer >= targetlerp[nextlerp][2]) { con = 1; contimer = 0; } } if (attacking) { attacking = false; attacktimer = 0; nextknife = 0; var _p = 910; aim = 0; if (instance_exists(_p)) { aim = point_direction(x, y, _p.x, _p.y); aim += (-5 + irandom(10)); } throwdir = choose(-1, 1); aim += (throwdir * (30 * knifecount * 0.5)); } if (attacktimer >= 0) { attacktimer++; if (attacktimer >= attacklimit) { var _len = 5; var _dir = aim; var _x = x + lengthdir_x(_len, _dir); var _y = y + lengthdir_y(_len, _dir); var _b = instance_create_depth(_x, _y, depth - 10, obj_plat_bulletred); with (_b) { do_contact_kill = function() { with (scr_plat_vfx(3607)) { die_animend = 1; depth -= 1; } }; sprite_index = spr_faqua_knife_cracked; if (other.regular_enemy && !instance_exists(obj_dw_garden_aquadash_plat)) damage = 25; else damage = 40; image_speed = 0; owner = other.id; speed = 2; depth = other.depth - 3000; image_xscale = 0; image_yscale = 0; scr_lerpvar("speed", 4, 0, 20); scr_script_delayed(scr_lerpvar, 20, "speed", 0, 12, 10); direction = _dir; image_angle = 180 + direction; scr_lerpvar("image_angle", image_angle, image_angle + 540, 15, 1, "out"); lifetime = 70; scr_lerpvar("image_xscale", 0, 2, 15); scr_lerpvar("image_yscale", 0, 2, 15); if (_dir == clamp(_dir, 90, 270)) image_yscale *= -1; } nextknife += 1; aim -= (throwdir * 30); if (nextknife >= knifecount) attacktimer = -1; else attacktimer = 1; } }