2019-04-08 21:20:08 (edited by zkline 2021-02-05 04:27:03)

Hi ALl,

I felt that things were sufficiently far along on this project for me to mention it on the forum here, though I don't have an official  release for people to enjoy quite yet.

Once upon a time, I was working on making a completely new kind of game accessible for us. For people who aren't aware, Battletech is a turn-based tactical game, centered around giant mechs/robots and the warriors who pilot them. It has a whole elaborate fictional history, and has existed in one form or another since the 80s. I stopped work for a while, but am back to it now.

There is an open-source version of the tabletop game called Megamek, and that is the version of this game I've been working on. It's written in the Java programming language, and is generally straight-forward, code-wise.

So where do things stand at the moment? There is a basic command line interface set up, which allows you to move ground units, fire weapons, and get unit status info. There is a 95% accessible graphical UI for the rest of the game, including scenario setup, army creation, and so forth.

The biggest problem at the moment is figuring out how to handle the hex map. The game is designed so that it's drawn visually, and at the moment we're limited to asking about individual tiles one at a time, or at most a few at a time. I don't really have a great solution for this problem, though I'm sure one exists if I poke at it a bit. Any Java programmers who happen to frequent this forum, I'd love to hear from you.

What can we do in the game so far? I've brought it  to a point where we can play a multiplayer or single-player game, with some difficulty, including units such as mechs and infantry but nothing air or space-based quite yet. There are a few miscellaneous things I should possibly code text commands for, but these should be fairly straight-forward. The hex map is the most difficult part of the entire enterprise, as it's more a conceptual problem than a straight-forward coding issue. The commands that exist are entered in a separate "Accessibility window," available from the view menu. All of them begin with a "#," character, except for one, which is used to select arbitrary hexes, though I should probably convert that over to match just for consistency.

I hope that the game will become officially accessible at some point in the near future, even if only via the text commands. My ultimate goal would be to make the graphical interface fully useable as well, but that's a slightly harder problem.

Still, I thought i should at least share news of the current progress and let everybody know at long last what I've been up to. There's nothing like Battletech available for the blind, and I really hope people can enjoy it soon.

The accessibility support has been integrated into the main repository, at https://github.com/megamek/megamek.git

Any help would be appreciated as I get re-acquainted with this project.

2019-04-08 22:06:00

For anyone interested, there's a Github Megamek accessibility project here. ANy help would be very much appreciated..

2019-04-08 23:01:06

Interesting. I wish you the best of luck, sir.

#FreeTheCheese
"The most deadly poison of our times is indifference. And this happens, although the praise of God should know no limits. Let us strive, therefore, to praise Him to the greatest extent of our powers." - St. Maximilian Kolbe

2019-04-10 20:28:44

It seems to me you should be able to setup a command that would return a string of information to you.  Such as when you hit the firing stage, the game defaults to the first weapon on the list. Seems if you could have it return units in range of your weapons it would prevent you from having to scan each hex individually.

I'm still working on different ways you could get the same instant feedback of information or changes on the map that can be had visually.

2019-04-13 10:40:09

I find the  commandline interface very friendly to use. I even find it not very hard to check my fire list to the near units to see which ones i can fire at, though i think the goal of op here is to make this game accessible to everyone not those with golden patience.
I'm really hoping for a way for us to navigate the board with the keyboard I still don't know how but my big wish is to see the board with the screen reader to be able to make tactical choices.

twitter: @hadirezae3
discord: Hadi

2019-04-13 18:48:03

Fixed the git link. I didn't realize it had a period at the end and thus lead nowhere. Oops.

2019-08-25 15:20:59

What's up with this project now? it's abandoned or is still being worked on?

2019-08-29 02:13:11

I haven't looked at it in a while, just because we were facing some fairly significant challenges with how to handle the hex map, among other things. The basic text command setup I was using does work and is in the main codebase, but it's not as pleasant to use as it might be.

2021-02-05 01:07:03

I hope that a little thread necromancy can be forgiven since this is my thread, after all. smile I've been getting back into this project again and am hoping to continue working on it. The system is currently complicated but playable, and I hope to be able to improve on it. I'd welcome any help, as always.

2021-02-05 01:20:20

I'd be happy to brainstorm map accessibility ideas with you sometime.

I'm currently working on a roguelike-ish game, with plans for more traditional roguelikes in the future. Here's a preview of what my control scheme looks like now:

Gamepad: left stick moves the character. Right stick moves what I call an exploration cursor around the map square-by-square. The map tile under the cursor is described, along with distance and direction.

The d-pad is where things get a bit more interesting. D-pad left and right moves between visible items directly, announcing their distance and direction. D-pad up and down switches between item types, and every browsable item in the game has one of these. So exits, characters, allies, enemies, items, probably a few more at some point. I'll also probably come up with some way to extend the taxonomy for things that might not fall as neatly into these categories, but I'm trying to build what I need right now.

There are also commands to interact with these explored objects--at the moment only pathfinding, but more to come I'm sure. Also, I described gamepad controls, but there are keyboard equivalents as well. And if you're on point, you'll realize that what I described is essentially how touchscreens work on phones, just mapped to gamepads. So I'm hoping this same scheme would adapt to those as well, or maybe even mouse gestures.

Anyhow, hope that gives some food for thought. I haven't tested out complicated scenarios yet--my next game is going to be on the simpler side in part so I can create a great map experience--but I hope it works well for more complex mazes or crowded situations. Would love it if I could learn some things from your work, since you're retrofitting an existing game with some more complex scenarios. smile

2021-02-05 01:48:35

Hey,

Thanks. This definitely gives me a few ideas. I was thinking about some kind of hex cursor, to let me explore the map independent of unit movement. You can sort of do that now with a "show tile," command but it's tedious. Some way of getting a sense of what's nearby is a good idea.

THere's a command which can tell you the direction and distance to nearest units, optionally limited to either friendlies or enemies, which is something. It gives a bearing in degrees, which isn't quite as meaningful in a hex-based board game as it would be in a more free movement scenario, but still. It doesn't currently do anything with terrain, which is kind of important, since weapons can be blocked by forest or hills or whatever. Maybe a good start is to extend it to give info on the nearest terrain features, where feature is anything but clear ground. That could help build up a gestalt of sorts, augmented by the ability to move hex by hex if desired.

Thanks for the ideas.

2021-02-05 02:03:24

Yeah, I could see how your equivalent of my d-pad up and down taxonomy might be:

* Allied unit
* Enemy unit
* Weapon
* Powerup
* Advantageous terrain
* Disadvantageous terrain
* ...

Not sure if those last two can be quantified, maybe if there are squares that convey definite advantages and vise versa. I think the key is giving players every tool you can, because some may want to explore the map square-by-square, others want to go straight to specific goals.

2021-02-05 03:43:59

@zkline To help contribute/test out the accessibility changes, do I just clone the normal github repo? Because the one you linked to in the first post doesn't actually seem to exist anymore.

2021-02-05 04:04:26

Hey,

Oops. I'll update the first post. But yes, if you clone the Megamek default repository, found here, you'll find all the accessibility work thus far.

Note that there is currently a conflict between the accessibility window, and the "Enter," shortcut which is used to bring up the game's built-in multiplayer chat window. I have no idea why anyone decided to use Enter/return as the default shortcut for anything, but will work on fixing that asap.

2021-02-07 02:14:01

Just as an update, I've been getting reacquainted with the game, as it's been a while since I last looked at this. there are a few accessibility bugs which will hopefully be fixed in the next development release. For a bit of background, I thought I'd write up a post explaining the structure of the project, for anyone interested.

There are basically three programs, only one of which I've really been focused on. MegaMek is a hex-based war game, with giant mechs battling on maps of various sizes. It includes a quite competent AI opponent, as well as support for multiple players. It's largely tactical, in that its focus is on the combat itself, the terrain and rules for weapons, damage to mechs, etc. That has been the focus of my accessibility efforts thus far.

The second program is called MekHQ, and it's basically a campaign system. For those who aren't aware, Battletech not only features rules for the tactical mech combat aspects, but a strategic layer to go on top of them. THere's a system for running mercenary companies, taking contracts for various factions in the BT universe, and basically having an excuse for all the individual battles. MekHQ gives you mission objectives, tracks your pilots, money, equipment, and so forth. It's quite brilliant if you enjoy crunching numbers. It's also a lot more accessible than MegaMek out of the box, being mostly standard controls.

Finally, there's MegaMek lab. This is the program I have least experience with. It's used both for designing custom units in the tactical game, and retro-fitting units from MekHQ campaigns. It also appears to be largely  standard controls. Most Battletech players don't really play with custom units anyway, as far as I'm aware, there are thousands of designs from the various source books over the years which work quite well.

So in summary, the whole MegaMek project consists of three programs which are somewhat interconnected. MegMek proper is the tactical war game, MekHQ is a complex campaign system, and MegaMek Lab allows you to do unit design. All three of these programs are written in Java, though the code style varies wildly. My interest is largely in running a campaign in MekHQ, so I'll eventually work on accessibility for that as well.

I hope this little diversion has been of some interest. I can't promise any kind of timeframe for anything's ince this is an open source passion project, but it's coming along.

2021-02-07 03:29:22

@15 I can't seem to find the cmd version that you were talking about. I cloned the repo but it doesn't seem to be anywhere...

2021-02-07 03:42:06

sightlessgamer,

It's called the "Accessibility window" in the view menu. THere's currently a bug which makes it harder to use than it should be, and I need to document things better at some point. But basically you use commands starting with "#," such as "#move," "#fire," and "#tile." I didn't actually write most of them, they were largely there when I started looking into this project so it's a little bit confusing.

If you wait a bit the bugfix should be committed to master.

2021-02-07 06:50:39

That bug preventing the accessibility window from working has been fixed. Note that it's a bit of a brute force fix, the game's provided keyboard shortcuts don't work when the window is up. I haven't really  found myself needing them, but it's something to be aware of.

I'm going to keep trying to refine the accessibility a bit. At the moment it's possible to play via a combination of the "#," commands and ". hex number," which lets you select arbitrary hexes for things like physical attacks.

One question I've been wrestling with is how much I want to reinvent the wheel. The game has a lot of command buttons for all kinds of things, which generally work on the principle that you select a hex/target first, and then press a button to act on it. That's what my "period," key is for, it lets you select arbitrary hexes and use the game's provided buttons to act on them.

The original author of the accessibility code went with a different idea, that you can use "#," commands to essentially do the things the buttons on screen do. THIs is useful for some areas but tedious because there's quite a bit  of code duplication.

I'm trying to decide which approach I should go with for future work. My instinct is to try and use the game's built-in support where ever possible, and add new "#," commands only as needed, but the approach is subject to change.

This is probably largely meaningless to people not familiar with the game, but I figured I'd put my thoughts out there.

2021-02-08 01:38:45

A new snapshot version, 0.47.17, has just been released. This includes a fix to the most critical accessibility bug, in that it's possible to actually use the accessibility window as intended now. There are some weird focus issues with it which I hope to debug, but this is a lot better than it was, at any rate.

The main commands used are "#tile," to ask about hexes on the map, "#move," to move units, and "#fire," to fire weapons. There is also "#ruler," for measuring the distance between two hexes, and "#entity," for asking for info about units. Finally, "#sitrep," will tell you the details of what is in range of a given unit, with a bearing in degrees.

This is quite rough, and most of the nitty gritty details about how to use commands are buried in the code, though it's relatively straightforward Java. This is a hodge podge of work someone else did years ago, my efforts, and the development team's  help.

As always, I'll keep everyone posted as changes come in. I hope to be able to set things up so that you can mostly use the accessibility window for gameplay, whereas now you have to kind of cycle between that window and the main game board.

2021-11-25 12:49:52

I have some experience with the map navigation problems that seem to be holding you up. What you want to do is set up a command to report the basic attributes of the tile your currently selected mech is standing in. Let's call this numpad five. Hit numpad five and it reports grasslands 7, or pavement 3, giving you terrain type and elevation. That is step one.

Step 2 is to setup a command we'll call control + Numpad five. This command reports the hexes around the selected mech using the same format. I prefer seeing them in 2 rows of 3, so, for example, if you hit the command it might report:

Grasslands 7, grasslands 6, grasslands 6
Grasslands 8, grasslands 8 grasslands 6

So, with these two commands together you now know that you are standing on a 7 high grasslands, to your north and northeast it starts to slope down, and to your south and southwest it slopes up. This is extremely useful for plotting courses one step at a time while moving about.

Finally, you want to be able to scan forward in a straight line and see every hex in any given direction. Control plus numpad 7 8 9 and 1 2 3 could work for this. It does the same as the above commands, but straight out to a distance of about 9 or 10, letting you see how the terrain changes if you were to move.

If you take these three ideas, along with your ruler idea, and then perhaps make it so that you can move around the board using the numpad 1 2 3 7 8 9 keys instead of having to select a mech, you'd then be able to quickly scan around, check the area around your current hex, and widen your view beyond single hex checks. Combine this with, say, selecting a mech to fire, then moving off of that mech and hitting a key command to check distance and blocking terrains between your focus point and the selected mech, and you're most of the way toward full map exploration.

Also, some advice. You're going to want to map game commands to key bindings over a text interface. You might need the text to do more detailed things like scan units or pull up information, but ideally you want a command that you hit to pull up map mode, you can use your map navigation keys then dismiss map mode and pull up the accessibility window for typing. I would also try to move all of the game output to that window so that you have no reason to jump to the generic window. Consolidation is key. But in general, pulling up a map mode, hitting tab to switch between your team mechs, using the navigation keys to check distances between yourself and a map point, then a command to move to that point is going to give you a much cleaner experience.

2021-11-26 06:19:21

@zkline have you ever thought of making a topic in the general discussion room as seralim ultimate  have a

meet the eternal legend, accessibility group for games and applications in Brazil. main group to bring accessible games to the blind.
official website    
our discord server
youtube channel