- Set up the loading of draft files to use the shared functionality in AppConfig
- Enabled draft definition hot reload
- Refactored various draft system files to be static
- Fixed the hobbit draft tests needing to be invoked manually
- Moved all text files that are loaded at runtime to gemp-lotr-cards/src/main/resources
- Updated ApplicationConfiguration (renamed AppConfig) to handle finding text data files based on configuration
- Updated gemp-lotr.properties to contain dev and test versions of the resource path (used for in-IDE execution and JUnit execution, respectively)
- Updated all references to text files to go through AppConfig
- Added shutdown enter/exit and JSON card reload to the admin panel.
- Greatly expanded the MOTD functionality in the admin panel.
- Converted server cache clear command to the new admin panel.
- fixed slash commands not working in chat
- added a warning if an invite-only table is made for a user that doesn't exist
- fixed the CoC not rendering properly
- Combined the chopped-up help messages so that spam is avoided (as <br> can just be used now)
- fixed league games being eligible for custom descriptions (this breaks anonymity)
- removed chat lock icon and added functionality to just automatically lock when at the bottom of the scroll bar
- removed some niggling grid stuff
- created buttons for deck builder and merchant, freeing up room for the center bar
- added dark mode support for all game hall controls in both Firefox and Chrome
- revamped colors from the table creation bar down to use solid colors
- Overhauled how Discounts work for json cards to support all the existing DiscountEffects.
- Altered InZoneData to now be preserved when the data was set in the void/void-from-hand.
- Converted the original Mountain-troll to json
- Added unit tests for errata + original
- Added ReinforceTokens effect
- Added limit field to ChooseAndRemoveTokens, which permits devs to set a range besides [0-max tokens]
- Added requires field to CostToEffect, which in reality is here because two consecutive ChooseAndRemoveToken actions never resolves properly due to the separate nature of the two behaviors assuming they can remove the same tokens
- Updated verbiage for share button from Export deck list -> Share deck list
- rearranged all simple and parameterized behavior filters to be alphabetized
- altered parameterized filters to all be case insensitive
- altered parameter interpretation to ignore spaces
- altered memory handling to be case insensitive
- improved Side and Signet interpretation to be case insensitive and to be flexible in what it accepts