Hi Netrek dev community. I've joined the list to seek your advice. This is a fairly long post, but I hope that you will find the situation novel and the concept interesting.

I've been programming for about 20 years. I'm also blind. For those of you that aren't familiar with how that could be possible, many blind people use a class of software called a screen reader to translate a visual interface in to synthesized speech or Braille. Anyway, while I've programmed for a while professionally, one of my personal areas of interest are alternative user interfaces. The reasons for that interest are most likely quite obvious. A good way to experiment with these concepts has been to create computer games for blind users. Generically, these are now called audio games by our community. I know...screen readers, audio games...we need flashier terms. *smile*

The first audio games were specialized systems. A program was written specifically to convey all information directly through sound cues and synthesized speech. There are lots of simple games possible with that approach. Basically, the main difference between those games and a simple game with a visual interface is that the computer either reads all prompts, or describes the current situation.

After a few of those were made, the next stage was to determine how much of the presentation of the situation could be communicated with just audio. The most successful project from this stage was a project called Shades of Doom (Nothing to do with ID's Doom). This game used surround sound audio to allow someone to hear their environment while wearing headphones. Techniques used here included being able to hear footsteps echo from walls (so based on the echo delay, you can hear how close you are), hearing emphasized wind noises to indicate tunnels and passages (so people know when they have reached a fork in a hall, for example), and hearing cues to indicate equipment and power-ups that are on the ground. Speech still needs to be used to do things like describe an item once the player finds it, but the surround sound presentation greatly enhances the feel of being in a virtual space, and conveys detail that wouldn't be possible with just speech.

The most recent stage of this work has been to move beyond single-player and specialized games, and apply these concepts to mainstream games. One reason for that is to give blind players more people to play against than just other blind people. However, the cool technical aspect to it is that the audio client/blind client is just a different way of representing the game's interface. The best example of this so far has been a project to create an accessible version of the Quake client. This has worked out well. Sight is a higher bandwidth sense, but, we've been able to layer enough distinctive audio cues so that a blind player has enough information to navigate and avoid obstacles, hear the position and movement of other players and equipment, and target them. That has proven to be a really popular project.

A problem with that project, though, is that I think that we shot too high. There is so much audio information that you almost need to train people to be able to pick it all out at once and respond to it reflexively. Many players are dedicated, and have become very good at Audio Quake, but it is profoundly difficult for new users to jump in and start fragging.

So, this brings me to why I'm writing to you all. I think that an accessible (to the blind), client for Netrek would be a great experiment. I have some ideas regarding how I'll make everything work, but, being blind myself, I haven't played, nor can I use, the existing clients, so I'll be learning to play as I develop. That's how it went with Quake, though, so I don't imagine that it will be that bad.

Some aspects of the game, I can simply translate directly to audio. For example, instead of a top-down visual perspective on the map, I can use a first-person audio perspective. Instead of seeing a ship to your left, you'll hear the sound of a ship's engine to your left. If they fire a torpedo that streaks by you, you'll hear the torpedo streak by. I can make other positional sounds for planets, bases, etc. I don't imagine that this will cause any problems. I can, of course, add keyboard commands to speak the status of things like fuel level, position, etc.

However, there are some parts to the game that, no matter how hard I try, won't be completely balanced.

For example, one big problem that has come up when creating strategy games is that it is difficult for most blind users to get a quick overview of a complete map. This makes it difficult to provide them with ways to make decisions about where they should go, the status and arrangement of resources, etc. There are a few ways to partially overcome this problem, but they are far from perfect.

The first is that, instead of a map, I present them with a type of data view that shows all ships, planets, bases, etc, along with info about each. I provide keyboard commands to sort/refine this information. They can, for example, switch to showing only planets, only bases, only fed/rom/klingon objects, sort based on distance, number of armies, etc. This will permit strategy, but there is no way that they can take this info in as fast as looking at the galactic map.

Second, I can't think of a good way to make an accessible way of targeting an enemy with weapons, tractor beams, pressors, etc. I thought that I could turn on a targeting mode where they have a target ping that can be moved around their perspective. If the ping is moved ahead and to the left, for example, shooting a torpedo would fire it along that heading. It would be profoundly difficult to aim this way, though, so they'd be at a profound disadvantage.

Another approach would be to provide an automatic targeting feature, but there would need to be some sort of skill or limitation of that in order to keep it fair. I thought that either a constant probability could be set, or else the targeting accuracy would depend on a condition like the damage level of the computer or something. For the fixed probability, the software could compute a perfect heading, and then randomize it by something like 20%. It occurs to me, though, that even perfect targeting for something like a torpedo at launch time is no guaranty that the target won't dodge or something.

I know, from reading up on Netrek, though, that this would bring the accessible client in to cyborg territory. If someone came on a game with the accessible client, I wouldn't want the cyborg advantage such that people would feel like it was cheating.

Of course, it might be that I won't be able to figure out ways to help a blind player respond fast enough to the limitations in order to sufficiently compete against sighted players. If that happens, I would need to make a modified server that would only accept connections from the accessible client.
I'd prefer not to go this way, but, if I did, the first thing that I'd want to change is the speed of the game. Is there a central place in the server code that controls the rate of frame advance in the game? It is also possible that the server doesn't manage time that way (haven't looked at the server code yet). I'd like to do something like increase the time between frames by some factor like 4X, for example. Didn't see a config option for game speed, so I'm guessing that I'd need to recompile my own version of the server to make that happen.

OK. I think that this gives a good overview of the basics of what I'd like to do. Before I start going too deep with other ideas, I'd appreciate hearing feedback to know of any problems or other considerations that you all can think of, given your detailed experience with the system and code.