
freeslot(
"MT_WINDINDICATOR","SPR_WINW","S_WICREATE","S_WIINACTIVE",
"MT_WINDBLOWER","S_WIBLOW")

mobjinfo[MT_WINDINDICATOR] = {
	--$Category Wondrous Windsock
	--$Name WindCreator
	--$Sprite WINWA0
	//$Color 1
	//$WallSprite true
	//$Arg0 X_Range
	//$Arg0Default 64
	//$Arg1 Y_Range
	//$Arg1Default 64
	//$Arg2 Z_Range
	//$Arg2Default 64
	//$Arg3 Rate
	//$Arg3Default 3
	//$Arg4 Range
	//$Arg4Default 6000
	doomednum = 3080,
	radius = 32*FRACUNIT,
	height = 64*FRACUNIT,
	spawnstate = S_WIINACTIVE,
	seestate = S_WICREATE,
	flags = MF_NOGRAVITY
}

states[S_WIINACTIVE] = {
	sprite = SPR_NULL, frame = A, tics = 10, nextstate = S_WIINACTIVE}
	
states[S_WICREATE] = {
	sprite = SPR_NULL, frame = A, tics = 80, nextstate = S_WIINACTIVE}

mobjinfo[MT_WINDBLOWER] = {
	doomednum = 3081,
	radius = 32*FRACUNIT,
	height = 64*FRACUNIT,
	spawnstate = S_WIBLOW,
	flags = MF_SLIDEME|MF_PUSHABLE
}

states[S_WIBLOW] = {
	sprite = SPR_WINW, frame = FF_TRANS50|FF_SEMIBRIGHT|A, tics = 70, nextstate = S_WIBLOW}

addHook("MobjThinker", function(mob)
	local arguments = mob.spawnpoint.args
	if mob.state == S_WIINACTIVE then 
		A_Look(mob,1+(6000+arguments[4])<<16,1)
		return
	end
	
	if not(mob.tics%(3+arguments[3]) == 0) then
		return
	end
	
	local wind_object = P_SPMAngle(mob,MT_WINDBLOWER,mob.angle,0,0)
	wind_object.momx = P_RandomRange(-4,4)*FRACUNIT
	wind_object.momy = P_RandomRange(-4,4)*FRACUNIT
	wind_object.momz = P_RandomRange(-4,4)*FRACUNIT
	P_MoveOrigin(wind_object,wind_object.x+(P_RandomRange(-arguments[0],arguments[0])*FRACUNIT),wind_object.y+(P_RandomRange(-arguments[1],arguments[1])*FRACUNIT),wind_object.z+(P_RandomRange(-arguments[2],arguments[2])*FRACUNIT))
end
,MT_WINDINDICATOR)

addHook("MobjThinker", function(mob)
	if (mob.tics <= 1 or (mob.eflags == MFE_TOUCHWATER or mob.eflags == MFE_UNDERWATER)) then
		P_RemoveMobj(mob)
	end
end
,MT_WINDBLOWER)