| On the one hand, the simplest way to determine where the object should go is to make the ground pickable and use CameraPick. 
 On the other hand, that method could create issues if you are already doing picks for other stuff, so a while ago (years ago!) I wrote this function based on something from the code archives:
 
 
 
; -----------------------------------------------------------------------------
; Positions an entity in 3D from given 2D coordinates
Function PositionEntityFrom2D(usecam,entity,x2d#,y2d#,height#=0,camZoom#=1)
	gw=GraphicsWidth()
	gh=GraphicsHeight()
	x#=-((gw/2)-x2d)
	y#=(gh/2)-y2d
	parent=GetParent(entity)
	EntityParent entity,usecam
	z#=Abs(EntityZ(entity))
	div#=(gw/(2/camzoom))/z
	x=x/div
	y=y/div
	
;z distance determined by a straight line from camera, through xyz coordinates, to height
	TFormPoint x,y,z,usecam,0
	y3d#=height
	x3d#=TFormedX()
	z3d#=TFormedZ()
	EntityParent entity,parent
	PositionEntity entity,x3d,y3d,z3d
End Function
;-----------------------------------------------------------------------------
 
 
 |