ID:2173328
 
(See the best response by Flame Guardian.)
How do I put a chat input on screen like part of the hud, if that's even possible?
Best response
Your best bet would be to use map text:
http://www.byond.com/docs/ref/info.html#/atom/var/maptext

I'm currently on my phone so nice examples aren't a thing... ..but yeah, you can easily set x&y bounds and the screen location of the text easily with a few variables and then attach them to an obj.

You'll want to include something like this while defining your obj:
New()
maptext="[msg]"


From there you'll need to create a framework to output text and have it turn into your maptext's msg variable(that you also need to define yourself). A simple way to accomplish this and an alternative to a chat box is to make space bar bring up an output and then relaying said output's text to the maptext's msg variable. Then you would create the maptext's obj on the player's loc and eventually delete the obj after a period of time.

You may want to also set some limits. Like how often one can output text so that people can't flood your world as well as a letter cap.

Edit: Also, you can change maptext styles by editting the map on your interface file.
Made this for ya.

var/list/max_lines = 10
var line_padding = 16
var left_padding = 16

// DEMO
mob/Login()
InitOnscreenChat()
Msg("Hello, [name]!")
Msg("wat wat chicken butt :3")
// END OF DEMO

mob
var/tmp/list/screen_chat
var/tmp/list/msgs
proc
InitOnscreenChat()
msgs = new
screen_chat = new
var onscreen_chat/oc
var py = line_padding
for(. = 1 to global.max_lines)
oc = new/onscreen_chat(left_padding,(py-line_padding))
py += line_padding
screen_chat += oc
client.screen += oc
Msg(t)
msgs.Insert(msgs.len,t)
if(msgs.len > max_lines)
msgs.Cut(1,2)
var onscreen_chat/oc
for(oc in screen_chat)
.++
oc.maptext = "<font color=#FFFFFF>[msgs[.]]</font>"

onscreen_chat
parent_type = /obj
layer = 1024
maptext_width = 1024
maptext_height = 32
New(X,Y){screen_loc = "1:[X],1:[Y]"}