Skip to main content

Roadmap for 2023

· 4 min read
Frank Ali
Front-End Developer

Happy New Year. The start of the year has been very exciting with the controvesial changes being considered for Wizards of the Coast's OGLOpen Game License. I have been considering what I want to accomplish with this project this year. Since there's been so much upheavel in the TTRPGTable Top Role Playing Game space, I'm anticipating the development of many new apps using many other game systems. With that in mind I'm hoping to support more types of dice rolls to satisfy everyone's needs as best I can. With that I think I have a decent roadmap for version 2.0 of Fantastic Dice.

Last year ended with me digging into deterministic rolling. I think this will be the most important feature to get right and will open up this project as a viable option for more developers. There are pros and cons to engineering the deterministic setup, but I think the pros outweight the cons considerably. I started by developing dice-box-threejs. This project was based on Major's 3D Dice which was based on Teal Dice. I undertook this project to both understand the deterministic approach used as well to assist others who needed this feature right away. It does not have all the features or optimizations that the original dice-box has, but it does work well enough and has been published to NPM.

Moving forward with determinism, I've chosen to swap physics engines from AmmoJS to Rapier which advertises itself as fully cross-platform deterministic. After dropping Rapier in, it became apparent right away that determinism was not working at all. After digging into the issue I think the root issue lies in the way I've set up the 3D environment to post messages to the web worker which adds collider objects to the physics world. Fixing this issue requires quite a bit of rework. It's going to be a big overhaul and a good starting point for version 2.0.

The second feature I'm hoping to tackle is redesigning the theme system. Currently it's a complicated multi-step process to make your own dice set. I'm hoping to improve on that. Originally, I opted to use Babylon JS's blender exporter plug-in to generate json data that was compact, easy to parse and could be gzip'ed. After exporting the blender data, I would still have to add additional information to the file to map the 3D mesh face id's to numerical values. Unfortunatly, the exporter has not kept up with blender releases. I think it's time to switch over to the more universally supported .fbx file type. This creates much larger files and requires additional BabylonJS plug-ins to load. The project will go well beyond the 1MB code delivery goal of version 1.0 (Rapier also contributes to a much larger package). However, I think it will allow for more flexibility when creating assests. Also, the .fbx format will allow for inclusion of 3D animations and effects. Additionally, this approach will allow creators to use the 3D software of their choice to make dice assets.

Next up are sounds. One thing I learned when developing dice-box-threejs was how to queue and play sound effects on collision events. I plan to port this behavior over and offer it as an opt-in config option or plug-in.

Another improvement I'd like to make (perhaps as part of the theme redesign) is finding a better way to determine which dice face is pointing up at the end of a roll and what value that represents. Not all dice use numbers and I want to make sure the new system is flexible enough for systems like fate or genesys. I'm also hoping I can find an elegant way to include this information in the 3D asset file.

Finally, I want to enable some post processing render effects in BabylonJS.

Stretch goal - implement a plug-in architecture for addons.

In summary, I'm very motivated by the OGLOpen Game License upheavle to create a better dice roller that supports more systems, is easy to customize and offers deterministic rolling for integration with back-end number generators. I also plan to make blog posts more frequently so others know this project isn't dead (My day job got busy the last few months). I hope it's a productive year.