Thursday 21 February 2013

Client Capabilities

What I've done so far is written a fully featured Telnet server, which includes support for Telnet option negotiation, covering the Options for Negotiate About Window Size, Charset, Terminal Speed and Terminal Type, and I've written a Terminfo module that is plugged into the Terminal Type handler so I can use Terminfo details to determine how to send bytes back to the client. The theory there being that any arbitrary client will work and as long as my terminfo settings know about it then things will be grand, with no configuration needed from the client side.
I've then been playing with various MUD clients - pretty much all of the ones that are available on Ubuntu by default, plus a couple of Windows ones using Wine - and have been appalled at their level of support. The only client I've tried that supported the CHARSET option and claimed to support Unicode was MUSHClient - and that includes the standard telnet program. And the only MUD client that actually supported any Terminal Types that are present in the standard Terminfo database was gnome-mud - which falls back to xterm.
I'm less convinced that was a useful way to spend my time, but it was an interesting experience writing code to process the terminfo database :)

What am I doing?

I've always been interested in MUDs - ever since I first came across the genre about 15-20 years ago. The fact that there aren't any real graphics and everything is story driven really appeals to me.
So, I'm writing myself a MUD engine. Mostly as a learning experience, since it covers a lot of areas of game development without any of the complicated bits of needing to do graphics and audio. I'm doing it in Java as a totally, 100% from scratch codebase - because Java actually brings a lot to the table that is very useful for this kind of development, even though it's generally not as good for game development for various reasons. In specific the networking has been a doddle - see a future post - and I can imagine adding scripting in will be equally easy with the benefits of JSR-223. 
I know full well that it's likely to not go anywhere, but it's an interesting project and actually covers quite a lot of ground that is best learnt by actually doing it instead of reading Internet posts. Plus there's not a huge amount of stuff on the Internet covering this type of thing. And if I actually do manage to get it up and running, then that's great :)