anchor.diff:  			color = "#2299d0"
   
   			alpha     = 235
  -			maptext   = "<font color=white>OK</font>"
   			maptext_x = 26
   			maptext_y = 6
  +			layer = 20
   
   			var/ScreenText/parent
   
  -			New(ScreenText/parent)
  +			New(ScreenText/parent, text, color, screenLoc = "CENTER:24-1,CENTER-2")
  +
  +				src.parent = parent
  +				screen_loc = screenLoc
  +				Set(text, color)
  +
  +				parent.owner.client.screen += src
  +
   				..()
   
  -				src.parent = parent
  +			proc
  +				Set(text, color)
  +					maptext    = "<font color=white>[text]</font>"
  +					src.color  = color
  +					name       = text
  +
  +					if(invisibility) Show()
   
   			Click()
   				..()
   				if(parent)
  -					parent.Next()
  +					parent.Next(name)
   
   		New()
   			..()
   
  -			var/a = alpha
  -			alpha = 0
  -
  -			animate(src, alpha = a, time = 10)
  +		/*	var/px = width  / 2
  +			var/py = height / 2
  +
  +			var/tx = round(px / 32, 1)
  +			var/ty = round(py / 32, 1)
  +
  +			px = px % 32
  +			py = py % 32
  +
  +			if(px)
  +				tx++
  +				px = 32 - px
  +
  +			if(py)
  +				ty++
  +				py = 32 - py*/
  +
  +			Show(10)
  +
  +		proc
  +			Hide(t = 5)
  +				set waitfor = 0
  +				if(invisibility) return
  +
  +				var/a = alpha
  +
  +				animate(src, alpha = 0, time = t)
  +
  +				sleep(t)
  +				alpha = a
  +				invisibility = 10
  +
  +			Show(t = 5)
  +				var/a        = alpha
  +				alpha        = 0
  +				invisibility = 0
  +
  +				animate(src, alpha = a, time = t)
   
   
   /*proc/shadowedMapText(atom/a, shadow_object = null, offset = 1, shadow_dir = SOUTH)
  
positive.code: 	var
  		obj/hud/input
  
  			Text/text
  	//		Text/text_shadow
  			Background/background
  			Image/image
  			Button/button
  
  		mob/Player/owner
  
  
negative.code: 		tmp
  			isBusy     = FALSE
  			isDisposed = FALSE
  			isWaiting  = FALSE
  			Result
  
  	New(mob/Player/i_Player, atom/i_Image = null, i_Button1 = "OK", i_Button1Color = "#2299d0", i_Button2 = null, i_Button2Color = "#ff0000", i_Button3 = null, i_Button3Color = "#00ff00")
  		..()
  
  		owner             = i_Player
  		owner.screen_text = src
  
  		displayText = new
  	//	text_shadow = new
  		background  = new
  
  		if(i_Button1)
  			button1 = new(src, i_Button1, i_Button1Color, "CENTER:24-1,CENTER-2")
  		if(i_Button2)
  			button2 = new(src, i_Button2, i_Button2Color, "CENTER:29-4,CENTER-2")
  		if(i_Button3)
  			button3 = new(src, i_Button3, i_Button3Color, "CENTER:18+2,CENTER-2")
  
  		if(i_Image)
  			displayImage = new
  			SetImage(i_Image, FALSE)
  			displayImage.name = i_Image.name
  			owner.client.screen += displayImage
  
  
  	//	shadowedMapText(text, text_shadow, 1, SOUTH)
  
  		owner.client.screen += background
  		owner.client.screen += displayText
  	//	owner.client.screen += text_shadow
  
  	proc
  		SetImage(atom/a, animate=TRUE)
  			set waitfor = 0
  
  			if(!displayImage)
  				displayImage = new
  				animate      = FALSE
  				owner.client.screen += displayImage
  
  			if(animate)
  				displayImage.Hide(5)
  				sleep(5)
  
  			displayImage.appearance = a.appearance
  			displayImage.transform *= 6.5
  			displayImage.underlays  = null
  			displayImage.layer      = 18
  
  			if(animate)
  				displayImage.Show(5)
  
  		AddImage(atom/a)
  			if(!queue)
  				SetImage(a)
  			else
  				queue += a
  
  
  		SetText(t, soundID)
  			displayText.maptext = "<b><font color=white>[t]</font></b>"
  
  			if(displayImage)
  				owner << npcsay("[displayImage.name]: [t]")
  
  	//		text_shadow.maptext = "<b><font color=black>[t]</font></b>"
  
  	//		if(owner.playSounds && soundID)
  	//			owner << sound(file("Sound/[soundID].ogg"), 0, 0, 9)
  
  		AddText(t, soundID = null)
  
  			if(displayText.maptext == null)
  				SetText(t, soundID)
  			else
  				if(!queue) queue = list()
  
  				queue[t] = soundID
  
  		SetButtons(i_Button1 = null, i_Button1Color = "#2299d0", i_Button2 = null, i_Button2Color = "#ff0000", i_Button3 = null, i_Button3Color = "#00ff00")
  
  			if(i_Button1)
  				if(button1)
  					button1.Set(i_Button1, i_Button1Color)
  				else
  					button1 = new(src, i_Button1, i_Button1Color, "CENTER:24-1,CENTER-2")
  
  			else if(button1)
  				button1.Hide()
  
  			if(i_Button2)
  				if(button2)
  					button2.Set(i_Button2, i_Button2Color)
  				else
  					button2 = new(src, i_Button2, i_Button2Color, "CENTER:29-4,CENTER-2")
  
  			else if(button2)
  				button2.Hide()
  
  			if(i_Button3)
  				if(button3)
  					button3.Set(i_Button3, i_Button3Color)
  				else
  					button3 = new(src, i_Button3, i_Button3Color, "CENTER:18+2,CENTER-2")
  
  			else if(button3)
  				button3.Hide()
  
  
  
  		AddButtons(i_Button1 = null, i_Button1Color = "#2299d0", i_Button2 = null, i_Button2Color = "#ff0000", i_Button3 = null, i_Button3Color = "#00ff00")
  			if(!queue) queue = list()
  		//		SetButtons(i_Button1, i_Button1Color, i_Button2, i_Button2Color, i_Button3, i_Button3Color)
  		//	else
  			queue           += 0
  			queue[queue.len] = list(i_Button1, i_Button1Color, i_Button2, i_Button2Color, i_Button3, i_Button3Color)
  
  		process()
  			set waitfor = 0
  			var/q = queue[1]
  
  			if(istype(q, /atom/movable))
  				SetImage(q)
  				queue -= q
  
  				if(!queue.len) queue = null
  
  
  
  		Next(i_buttonName)
  			if(isBusy) return
  
  			Result = i_buttonName
  
  			if(!queue)
  				if(isWaiting)
  					isWaiting = FALSE
  				else
  					Dispose()
  			else
  				isBusy = TRUE
  
  				var/q = queue[1]
  
  				if(islist(q))
  
  					var
  						list/buttonData = q
  						b1
  						bc1
  						b2
  						bc2
  						b3
  						bc3
  
  					if(buttonData.len > 0) b1  = buttonData[1]
  					if(buttonData.len > 1) bc1 = buttonData[2]
  					if(buttonData.len > 2) b2  = buttonData[3]
  					if(buttonData.len > 3) bc2 = buttonData[4]
  					if(buttonData.len > 4) b3  = buttonData[5]
  					if(buttonData.len > 5) bc3 = buttonData[6]
  
  					SetButtons(b1, bc1, b2, bc2, b3, bc3)
  
  					queue.Cut(1,2)
  
  					if(queue.len)
  						q = queue[1]
  					else
  						q     = null
  						queue = null
  
  				if(q)
  					displayText.Hide(5)
  					sleep(5)
  
  					SetText(q, queue[q])
  					queue -= q
  
  					if(!queue.len)
  						queue = null
  					else
  						process()
  
  					displayText.Show(5)
  
  
  				sleep(5)
  				isBusy = FALSE
  
  		Wait()
  			isWaiting = TRUE
  
  			while(owner && !isDisposed && isWaiting)
  				sleep(1)
  
  			if(owner)
  				if(!isWaiting)
  					spawn() Next()
  					return 1
  
  			else if(!isDisposed)
  				Dispose()
  
  		WaitEnd()
  			while(owner && !isDisposed)
  				sleep(10)
  
  			if(owner)
  				return queue ? 0 : 1
  
  			else if(!isDisposed)
  				Dispose()
  
  		Dispose()
  			set waitfor = FALSE
  
  