task HormingLaser( speed, angle ){
			ObjSound_Play( CreateShotSE[13] );
			let sx = gpos[0];
			let sy = gpos[1];
			let state = 0;
			let count = 0;
			let abase = angle;
			let sbase = speed;
			let gra = ADD_BGW_PURPLE_22;
			let del = 36;
			let size = 80;
			loop{
				loop( 1 ){
					let toAngle = atan2( GetPlayerY - sy, GetPlayerX - sx );
					
					let dangle = absolute( 4 - speed ) / 2;
					let dmax = 0;
					if( state > 0 ){ dangle = dmax; }
					let ret = toAngle - angle;
					if( ( ret > 0 && ret <= 180 ) || ( ret < 0 && ret <= -180 ) ){ angle += dangle; }
					else if( ( ret > 0 && ret > 180 ) || ( ret < 0 && ret > -180 ) ){ angle += -dangle; }
					if( angle >= 180 ){ angle += -360; }
					if( angle < -180 ){ angle += 360; }
					
					alternative( state )
					case( 0 ){
						speed = sbase + ( sbase / 1.5 ) * sin( abase + count * 3 );
						if( count >  470 ){ state = 1; }
					}
					case( 1 ){
						speed += 0;
					}
					
					let leng = size * ( speed / 3 );
					let width = size;
					if( count % 2 ){
						SetLaserEffect( sx, sy, angle, leng, width, gra, 0, del/2, 0 );
					}else{
						SetLaserEffect( sx, sy, angle, leng * 0.8, width * 0.8, gra, 0, del, 1 );
					}
					sx += speed * cos( angle );
					sy += speed * sin( angle );

					if( count % 4 == 0 ){
						let ag = angle + round( rand( -1, 1 ) ) * 6;
						let spd = 0.9;
						let shote = BGW_PURPLE_13;
						let delay = 10;
						
						let sht = CreateShotA2( sx, sy, 0, ag, spd / 160, spd, shote, delay );
						ObjSound_Play( CreateShotSE[ 1 ] );
					}
					
					if( state == 1 && IsOut ){ break; }
					count++;
				}
				if( state == 1 && IsOut ){ break; }
				if( Wait( 1 ) ){ return; }
				function IsOut{
					let ans = false;
					let v=64;
					if( sx <= MinX - v ||
					    sx >= MaxX + v ||
					    sy <= MinY - v ||
					    sy >= MaxY + v ){ ans = true; }

				}
			}
			
			task SetLaserEffect( let sx, let sy, let angle, let leng, let width, let gra, let delay, let del, let type ){
				let obj = CreateStraightLaserA1( sx, sy, angle, leng, width, del, gra, delay );
				ObjStLaser_SetSource( obj, false );
				ObjShot_SetIntersectionEnable( obj, false );
				if( type ){
					let color = 96;
					ObjRender_SetColor( obj, color, color, color );
					ObjRender_SetBlendType( obj, BLEND_SUBTRACT );
					ObjShot_SetIntersectionEnable( obj, true );
				}
				let l = leng;
				let w = width;
				let count = 0;
				while( !Obj_IsDeleted( obj ) ){
					ObjLaser_SetLength( obj, leng );
					ObjLaser_SetRenderWidth( obj, width );
					leng -= l / del;
					width -= w / del;
					if( count > del / 3 ){
						ObjShot_SetIntersectionEnable( obj, false );
					}
					if( count == del ){
						Obj_Delete( obj );
					}
					count++;
					yield;
				}
			}
		}