The problem I have with curses is that is is somewhat of an old technology. The whole idea of having smart servers and dumb terminals takes us back to late 1970s, when information was presented to users on low-sophistication terminals by more sophisticated servers. In those days the terminals were basically a screen with the text on it stored and manipulated by a handful of chips, while the server would take up floor of a bank or insurance company, be operated by a round-the-clock team of operators and protected by armed guards.
However nowadays the client PCs are just as likely to be as powerful as the MUD servers, so it makes less sense for (say) the server to be formatting text for a hundred players, when the individual clients could do just as good a job.
There are also fundamental limitations in server-formatted output. For a start, the server needs to know the screen size (and yes I know about NAWS) but even so, the menus and options are going to be limited in the way they can be displayed and the ability to have lots of different colours, fonts, borders, icons etc. is severely restricted.
Compare the sort of result you are likely to get with pure text using curses, to something like the screen shots on this page:
http://www.gammon.com.au/forum/?id=10346
The miniwindows shown there can be moved around the screen at the player's whim, you can customize things at the client end, and you can show or hide stuff like inventory instantly, rather than having to send requests backwards and forwards to the server.
I know this is just one client, but it is freely available, runs on Windows and Linux (under Wine) and can be run on a Mac if you install VMware or similar, and then load up an old copy of Windows you have lying around, or install Ubuntu or similar.
My personal view is that the server should restrict itself to content, and let the client do presentation. For example, instead of this:
<white>The guard walks east.</white>
<blue>John chats, hi there</blue>
<yellow>HP: 400</yellow><blue>Mana: 60</blue><green>XP: 4000</green>
... you do this:
<move>The <what>guard</what> walks <where>east</where>.</move>
<chat><who>John</who> chats, hi there</chat>
<health>400</health><mana>60</mana><xp>4000</xp>
The first example colours the text, but doesn't provide any useful information to the client, which then has to muck around setting up triggers to try to detect the player's health.
The second example provides tagged data, which the client can then display as required. For example, chats might go in a different windows, in a colour of the player's choosing. And the health information might go into a health bar.
This was what I was suggesting we try to do with the GMCP protocol but unfortunately I was shouted down on a number of grounds - one of which was indeed the requirement for backwards compatibility. But I think we have to move on a bit from supporting every possible client (and indeed, curses is not widely supported on MUD clients).
I would like to try to have transactions that go from client to server, and vice-versa (along the lines of the second example above). And indeed the player input can be converted into player transactions. So instead of having to type:
open bag
get sword
sell sword to vendor for 500 gold
close bag
... they simply drag the sword from an inventory window to a vendor window - and this dragging operation generates a suitable machine-readable transaction. For example:
<sell><item>1234321</item> <price>500</price> <vendor>543</vendor> </sell>