draw_primitive_begin(pr_trianglestrip); var _in_foreground = false; var _arraysize = array_length(points); var i = _arraysize - 1; while (i >= 0) { if (i == (_arraysize - 1)) { with (points[i]) { if (foreground) _in_foreground = true; else draw_vertex_color(x, y, other.end_color, clamp01(other.end_alpha + min(0, other.lifetime / 10))); } } else if (!_in_foreground || !foreground) { var _prog = i / (_arraysize - 1); var _size = sin(_prog * pi) * (_arraysize / child_lifetime) * 4; if (lifetime < 14) _size *= max(0, lifetime / 14); var _col = merge_color(start_color, end_color, _prog); var _alpha = clamp01(lerp(start_alpha, end_alpha, _prog) + min(0, lifetime / 10)); with (points[i]) { var _yy = lerp(y, other.ystart, other.owner.ys[0]); draw_vertex_color(x - (sidex * _size), _yy - (sidey * _size), _col, _alpha); draw_vertex_color(x + (sidex * _size), _yy + (sidey * _size), _col, _alpha); } } i--; } draw_vertex_color(x, y, start_color, clamp01(start_alpha + min(0, lifetime / 10))); draw_primitive_end();