Map Tool Character Sheet

A Practical Utility

This is a character sheet I made for use with Pathfinder rules, using Maptool's macro language. This was interesting because the language is very limited; for example, it only allows up to two nested code brackets, which severely limits its usability.

Despite this, I managed to get this to display for a player as a frame in their window, with links to roll for saves or abilities, ways to edit them, and the options to apply 'buffs' for common spells. This edits each Maptool Pog directly to store and retrieve information, so it can be used on any Pog with minimal to no setup. Before this, our procedure involved each player creating their own custom macros which would take time and would often result in problems - this solves those problems by using generic functions that can work for any given pog, and asking for user input when data is not found.

In addition to the code itself, all display elements such as the frame us HTML and CSS, heavily formatted for readability.

I also managed to simplify combat by allowing a player to input data about their 'attacks', which can then be performed on the fly by selecting the tokens to attack. This displays the token's AC (how hard they are to hit), resistances, and immunities. Since most attack procedures involve multiple attacks, the player can then queue up attacks on targets one at a time until they've used up all of their attacks. This is shown to them in an active window where they can edit some of the values - in case there are variables that the sheet is not accounting for.

Once they are finished they submit this, which is then sent to the GM or Game Master for approval. The GM sees both the original values and any modifications that were made, and is free to make any further modifications (as GameMaster, the ability to change results without alerting others is invaluable). Once this is approved, a simple table showing the results is output to chat, and the damage is applied to the respective targets as appropriate. This massively simplifies combat, removing the need for players to do math or spam the chat by rolling individually, and the need to add bonuses 'on the fly' when the player's macro didn't include them automatically. This feature is not yet fully implemented as I have not had time to work on this recently, but finishing it will be my next step.


Features

  • Uses modular functions to work with any Pog without prior setup
  • Prompts the user for input if data is missing
  • Automatically detects if variables are not initialized and initializes them - this is a live environment so this is not normal for this 'language'
  • Employs clever workarounds for the nesting limits such as building strings using multiple 'macros' (basically functions)
  • Uses HTML and CSS to clearly and neatly display information
  • Customizeable 'attacks' that allow automation of the pathfinder combat system
  • Self-learning Resistances and Immunities - asks player for input if it does not know, but keeps record of all player inputs for future reference
  • Prompts to edit or customize any data on the sheet
  • Created for usability - knowing I could not predict everything in the Pathfinder game, I made sure players can add bonuses and detriments on the fly
  • Very modular - created in such a way that it can apply to any token or pog without prior setup, making a GameMaster's job much easier for creating enemies since they do not need their own macros

Image or Gif Info

Challenges

  • Limited Language - The Maptool Macro scripting language is not meant for heavy usage; in order to run most scripts, you must manually increase your memory limit for MapTool via batch file, and nesting is limited to two levels. I found ways to work around this, notably by referencing other macros when I've hit the nesting limit and using their output instead of nesting further. I managed to link a CSS file using this, and create and store variables on the fly to relatively permanently store data. The language's syntax is very demanding, requiring no leading spaces for example, and documentation is not very complete - I had to learn many nuances through trial and error.
  • Actually that's pretty much it, the language is the only reason this is even notable. Seriously though, this language is terrible and I'm amazed I managed to get it to do this. In general most of the language doesn't seem to be made for live interaction - generally it's for either static display of non-changing variables or outputting directly to chat
  • Oh, HTML, I guess - When I began this, I was very new to HTML. I learned to create complex tables, legible formatting, and use CSS with this project.

Support Center 3

This was created at my previous job when their database system was running too slowly. This was only for personal use; I was not considered a programmer in this position.
Built with: Java

Sylva Bot

This was a chat moderation bot created for a client and actively updated with requests. It used multiple online services such as Discord, Twitter, Twitch, and others.
Built with: Java

Houston Game

A simple game in progress made with Unity; the idea is that one player controls a spaceship with basically no instrumentation, while the other player provides instructions over voice from the control center.
Built with: C#