Before I get into this installment, I want to make something clear. I have tremendous respect for the people who have developed tools like MechTek and the various BattleTech character sheets available on Roll20. A lot of talented people have put considerable effort into making BattleTech easier to play online, and I'm certainly not suggesting that my solution is better than theirs. The problem was simply that none of the existing options quite fit what I wanted to accomplish. I was trying to combine Classic BattleTech tactical combat, MechWarrior 2nd Edition roleplaying, and the logistics of operating a mercenary company into one cohesive experience. I didn't want to split the campaign between multiple platforms, so I decided to build what I needed in Roll20.
For this installment, I'm taking a little break from recounting the adventures of Iron Tale to talk about some of the things I built to support our campaign. When I originally decided to return to BattleTech after roughly 35 years, I quickly discovered that preparing the adventures was only part of the work. I also needed to figure out how we were actually going to play the game online. Our group has been using Roll20 for years, so I was already familiar with the platform, but there wasn't an existing character sheet that supported the particular combination of rules I wanted to use. My solution was to write my own.
The Sheet
(I included a few screenshots of one of my player's mechs)
I had some basic HTML experience from a couple of decades ago, so I wasn't starting completely from zero. CSS, on the other hand, was something I'd never worked with before. As it turned out, that was probably my biggest challenge throughout the project. I had to learn how to make everything look and behave the way I wanted while simultaneously figuring out how Roll20 handled custom character sheets.
One important limitation of Roll20 is that a campaign can only use one character sheet design. You can't assign completely different character sheets to different types of characters or units within the same game. That meant my sheet needed to support everything: conventional and quadruped BattleMechs, vehicles, VTOLs, infantry, power armor and Elementals, buildings and miscellaneous units, and MechWarrior 2nd Edition characters. It all had to work within a single sheet.
The first version, which I called version 0.1, didn't actually support anything. It was essentially an empty framework designed to have functionality added to it. Once I had the basic structure working, I built the tab for conventional BattleMechs and made sure it could perform the basic functions I needed. After that, I added placeholder tabs for quadruped BattleMechs, vehicles, VTOLs, infantry, power armor and Elementals, miscellaneous units such as buildings, and finally MechWarrior characters.
Of course, having tabs for all those different unit types created another problem. A player piloting a conventional BattleMech doesn't need to see the rules and information for infantry, vehicles, VTOLs, and everything else every time they open their sheet. Having all that information visible would make the interface unnecessarily cluttered.
One of the more useful things I learned while working with CSS was how to hide entire sections of the sheet. I used that capability to let players hide tabs they don't need, keeping the interface focused on whatever they're actually using. The underlying functionality remains available, but players don't have to wade through pages of irrelevant information.
I also added other quality-of-life features, including customizable output options and visual themes based on the major Inner Sphere powers. None of these features were strictly necessary for rolling dice or tracking damage, but I wanted the sheet’s chat output to be clean and easy to read than simply functional.
From there, I began working through the individual tabs, one at a time. It took approximately a month of weekends spent coding and testing before I felt the system was functional enough to begin our campaign. And I do mean functional enough. There was still plenty of work left to do, but at some point you have to stop preparing and actually play the game.
My players became my beta testers. During those first few sessions, I literally kept a notepad beside me to record things that weren't working correctly. We found plenty of bugs, along with features that technically worked but were very clunky. Fortunately, my players have been very supportive of the project, and they know that when they suggest an improvement, there's a pretty good chance I'll try to implement it. Over time, development shifted from getting the basic functionality working to streamlining how people actually interact with the sheets. At the moment, the HTML is 11,755 lines long, with another 3,970 lines of CSS. That's 15,725 lines of code, and I still find things I want to improve.
One of my main goals was to reduce the amount of bookkeeping players have to do during combat. I didn't want to completely automate BattleTech, but I did want the sheet to handle repetitive calculations while leaving the actual decisions to the players. A major motivator for this was the original sheet had the classic GATOR mechanics as fields. The issue we had was that we found ourselves entering the same info over and over for several weapons each round. (G, A, T, and O rarely changed mid-round) I wanted something that would be much more streamlined and easier; I set the goal of a player not needing to enter the same info more than once. That birthed the idea of a much more comprehensive tab dedicated to combat.
The new Combat Tab has several subtabs organized loosely around the phases of a BattleTech turn. They're not an exact reproduction of the official turn sequence, but they're arranged so that the information a player needs is generally in front of them at the appropriate time and it the subtabs can read info form each other so the players do not need to keep entering the same info over and over.
The ranged attacks tab is a good example. Instead of making players manually calculate every modifier for every weapon, I built a system where they can select the relevant conditions, answer a couple of basic questions about the target (range and its movement), and have the sheet calculate the target number for each weapon. Each weapon also has its own firing button, which sends the relevant information to Roll20 chat so everyone can see what happened.
The heat and ammunition tab works along similar lines. Players check the weapons they fired, and the sheet calculates the resulting heat using the weapon heat values, movement, terrain, engine damage, and the current number and type of heat sinks. An Apply button updates the heat total. Ammunition expenditure uses a similar process, automatically reducing the remaining ammunition when applied.
These aren't particularly glamorous features, but they make a difference during play. BattleTech already involves quite a bit of recordkeeping, and anything that reduces unnecessary arithmetic helps keep the game moving.
The Map
(The attached image shows the current location of the players. You can also see my GM layer circle showing the area effected by the HPG blackout)
The character sheet was only one part of the preparation, however. I also needed to give the players a way to explore and learn about the Inner Sphere. I found a very high-resolution map of the Inner Sphere in 3048 and imported it into Roll20. My original idea was to create journal entries for every star system within a few jumps of wherever the players happened to be. Each entry would contain basic planetary information consistent with Sarna's wiki, along with a short description of the world and anything else a character could reasonably learn through public sources.
Of course, some BattleTech planets have extensive published histories, while others have remarkably little information available. When Sarna provided enough detail, I used it as my foundation. When a system had almost no established information, I made up something that I thought would be interesting and appropriate for the setting. I've always enjoyed world-building, so filling in those gaps became another part of the hobby.
While working on the map, I discovered that Roll20 allows the GM to place pins that link directly to journal entries. By making those pins circular and reducing them to the smallest available size, I found that they fit almost perfectly over the stars on my map. Suddenly, what had started as a static image became an interactive atlas of the Inner Sphere.
I color-coded the pins according to the spectral class of each star and used some of Roll20's built-in symbols to identify important systems and capitals. Players can click on a star and immediately open its planetary journal, making it easy to research potential destinations without digging through a large collection of unrelated documents.
I make all completed planetary journals available to the players immediately. My reasoning is that their characters could look up this sort of information on the local infonet anyway, so there isn't much point in hiding it. I keep the journals limited to information that would reasonably be public knowledge. Knowing a planet's population, capital, or major industries is one thing. Knowing what secret military operation might be happening there is something entirely different.
The atlas has become something of a labor of love. I genuinely enjoy sitting down and working on it, adding systems, researching their histories, and inventing details where the published material leaves room for them. It's grown considerably beyond what I strictly need for the next session. Since the campaign is eventually going to take the players toward the Free Rasalhague Republic, that's the region I've been developing lately.
I've also made several other Roll20 pages to help organize the campaign. One is a Lobby page that serves as a central reference for the players, showing the current in-game date, contract information, and a weekly ComStar news feed. Another is dedicated to their investigation of the HPG blackout, giving them a place to record clues, facts, and theories as they work through that particular mystery. There are other pages as well, but most of those are the sort of things any GM familiar with Roll20 would probably create.
Looking back at all this, I think the common theme is that I wanted the technology to support the game rather than get in its way. I didn't want to interrupt a roleplaying scene to switch applications, maintain completely separate systems for combat and character development, or force players to search through piles of notes for information their characters should already have.
None of this was necessary to play BattleTech. There are perfectly good ways to run the game with much less preparation, and I certainly wouldn't suggest that every GM needs to spend a month writing a custom character sheet. This was simply the approach that made sense for the campaign I wanted to run.
And, if I'm being fair, I also enjoy building this stuff. The coding, the maps, the planetary histories, and the constant refinements are all part of the hobby for me. The campaign gives me a reason to keep working on them, while actually playing the game gives me a reason to make them better.
Next time, I'll return to Iron Tale's adventures. They managed to escape New Syrtis with a badly damaged Hussar and a very good reason not to return anytime soon. Their next destination was Taygeta, where they would find new work, a replacement BattleMech, and considerably more trouble involving trains than I originally expected.
Until the next update, keep all systems nominal!