I'm a big fan of the Paranoia 25th Anniversary Edition comedy tabletop RPG, and I regularly act as a game master for that game on Roll20 with my regular play group in-between other tabletop RPG campaigns. However, there wasn't any good character sheet for that game system on Roll20, so I decided to make one myself.
I'm really happy to say that Roll20 has accepted my work as-is and published it, and now anyone with a free Roll20 account can use it for their own games! You may also look at my source code, which was released under the MIT License.
The current version only covers the Troubleshooters core rulebook, but I may add compatibility with the other core rulebooks as well (Internal Security and High Programmers), although not in the foreseeable future.
Indeed, like most software development tasks, my original work estimate turned out to be much, much longer due to various unexpected issues I kept running into. What I thought would be a simple HTML form with a few dice roll buttons embedded into it turned out to be almost a month-long project.
Here are a few points of particular note.
Roll20's technical documentation, while very detailed, is really frustrating to use as the menus don't work properly for some reason, and search engines constantly return links to the community-maintained wiki instead.
I have been told after the fact by one of the major wiki contributors that actually, the wiki is more up-to-date than the official documentation, which copied it. That might be true, but as a developer, I simply cannot rely on the wiki for future compatibility.
Paying to give?
Only users with a Roll20 Pro account can test character sheets. Now I've seen a bunch of scummy pricing tactics in the software industry, but having to pay to contribute free content to a private corporation is a little insulting to say the least.
That also meant that I had a deadline of 1 month from the beginning of code development in order to avoid a subscription renewal, which caused me a lot of needless pressure during a hard period of my life despite the relatively low cost of said subscription.
Dealing with editing errors
Paranoia 25th Anniversary Edition is a great game, but the books suffer from multiple editing errors, and no official errata was ever released as far as I'm aware.
Therefore, before even starting design work, I had to double-check everything in all 3 core rulebooks to find potential contradictions and identify unclear rules. In some cases, I even had to track back rules from Paranoia XP Service Pack 1, the main core rulebook of the previous edition, to figure things out.
Character sheet, or character sheets?
There are 3 official character sheets for this game in total, and all of them suffer from multiple usability issues, both on paper and for a web adaptation. I had to find design solutions to all of them first, as even though I only completed the most important one for this release, I had to consider future compatibility as well.
There already was a character sheet for Paranoia XP on Roll20, which is very similar to the official one from Paranoia 25th Anniversary Edition, but it was unusable as a base due to various bugs and design issues.
Standard web development technologies... almost
id attribute is prohibited on all elements, which causes a lot of headaches.
I also ran into a lot of major CSS compatibility issues that were hard to diagnose and solve. Sure, I could have just set everything to
initial and build my own thing over it, but I didn't want to reinvent the wheel.
UPDATE 2021-02-14: Roll20 has just announced an update that will remove some of the HTML limitations I experienced. That will give me a lot more flexibility for future iterations if I ever attempt to do so in the future.
Roll20's macro system and localization system are very crude, and there's a bunch of important stuff that requires really idiotic workarounds to implement, and some of them aren't behaving correctly anyway.
For example, I had to request two d20 results for some dice roll tests and add them together, even though I only needed one and had to discard the unnecessary addition. Oh, and the whole formula was 350+ characters even though it barely did anything beyond performing 2 integer additions.
I had to cut some content I wanted to implement in order to be legally compliant with the license for personal use provided by the original rulebooks. I tried contacting the publisher about this, but they didn't really seem to care enough about this particular edition of Paranoia anymore unfortunately.
I also had to cut even more content because Roll20 is not designed to store and send private information beyond whispering chat messages between users.
Test automation was not really an option, as the required investment is simply not worth it.
Overall, I'm very happy with the results despite the unexpected time sink it became, and I hope that other fans of the game will enjoy it!
Post image: © 2009 Chris Quilliams
The following is a Python script developed by yours truly to generate a sector according to the core rulebook of the Mongoose Traveller 2nd Edition tabletop RPG, exactly as described in the Universe and World Creation chapter. It is designed to describe worlds in human-readable format as much as…
I'm a big fan of role-playing video games, especially Japanese-style ones, but there's a big restriction these games have: players have limited abilities to create their own stories in them due to programming restrictions. When I discovered tabletop role-playing games, having this restriction lifted…
While there is no denying that Scrum revolutionized the software industry for the better, it may seem a little strange to read about someone that dislikes it despite strongly agreeing with the Agile Manifesto, considering the creator of Scrum was one of its signers. However, after having experienced…
How aligned are you with me? This is my top 5 list of human values, both present in myself and that I'm attracted to in friends, coworkers and lovers. I also included my interpretation of each one to avoid any confusion…
Here are a few commands I crafted to validate and easily read API definitions in the OpenAPI format, using Docker and open source tools provided by Swagger. I have yet to convert them into proper shell scripts, but I hope these will be helpful nonetheless. The commands are designed to be run in a…
See all of my articles