Co-op Tabletop
- michaeldiazcompsci
- Dec 26, 2024
- 4 min read
Updated: Feb 11
Game Genre
Software-Based Toolkit, TTRPG
Co-op Tabletop began as part of my final semester during my Ventures class- aimed at teaching us the business portion of game development, concepts such as market analysis, marketing strategies, and project management
For the class I wanted to lean away from a distinct game and focus more on tools development in order to bolster those parts of my technical design skillset; with my interest and considerable experience with playing/running TTRPGs I figured I should make a toolkit to facilitate running them for future games with friends
Game Engine
Unity 2022.3.13
When I had initially began working on Co-op Tabletop, I knew I wanted to use Unity as opposed to Unreal in order to make full use of the Engine's API for the variety of features I wanted to build
Additionally, given the popularity of Unreal with artists, I wanted to try and develop developer-side tools during production in order to either aid in the integration of assets or improve their quality within the engine
Responsibilities
Project Lead, Technical Designer
As a project lead I was responsible for creating the initial timeline and the core features that would make up the base of the project, and then ensuring that consistent progress was made throughout the semester to reach a functional prototype for final presentation
In order to manage tasks and track hours I used Trello to assign tasks on a weekly basis to my team members
During the Ventures class, we were required to research various aspects of running a start up to ensure we have a working understanding of the administrative side of game development; this data would then be presented to the class to demonstrate that our startup ideas were viable in their respective markets
In order to present this data and run our weekly meetings, I made a style guide in Canva to serve as a template for creating these presentations as needed
Finally, to facilitate communication across all team members remotely, I created a Discord server with automated bots for calendar meetings, deadlines, and resource tracking
As a technical designer then I worked on multiple scripted aspects of the project simultaneously in order to create prototypes of our core features
To allow players to roll dice within the engine, I modeled a standard 7-set of TTRPG dice (D4 - D20) in Blender and brought them into engine; a Dice Manager script listens to calls from the UI to determine how many dice to physically roll within the scene
The dice themselves have a script attached to determine which number is facing up once they have settled, and sends those results back to the Dice Manager
The dice manager then uses asynchronous threads to wait until all dice have settled to return the result to the user once ready
This allows the user to roll a new set of dice while still waiting on the results of the previous set, reducing downtime
In order to give the user creative freedom in expressing their character, I wanted to create an in-engine character creator that could be adjusted in a similar manner to many RPG genre games
With a proxy character created by our 3D character artist, I created a set of sliders each with a script to control an attributed bone on the proxy model
The script isolates the changes in scale, rotation, and position to a single bone (and in the case of scaling, recursively applies inverse matrix multiplications on the local scales of each bones to maintain the global scale across the skeleton's hierarchy)
To then bring life to these models outside of just being a static miniature, our animation team recorded a variety of motion capture animations to apply to any humanoid model through Unity's avatar masks
As part of integrating these animations into engine, I created the animation controller and sectioned the animation transitions into various subtrees for the sake of organization
As nearly all TTRPGs utilize a character sheet to store information for a user's character, I created a UI for the sake of in-engine UI creation
In essence the user can use a drag and drop system to pull various elements onto a blank sheet: static text, text fields, and number fields
The user can also rearrange, add, delete, and change the orientation of the sheets themselves as needed
Duration
5 Months, Ongoing
The initial 4 months spent on this project were spent getting the majority of the core functions working as a proof of concept for the Ventures class, and consisted of a very small team size, with only me and 3 other artists comprising the team
Despite this, we were able to complete a significant amount of functionality for the project, save for 2 features
After graduating from the Florida Interactive Entertainment Academy, I was able to bring on other graduates from the program onto the Co-op Tabletop team, adding multiple technical designers, project managers, programmers, and more artists to aid in the development of features
Our current goals are to revise the already created features, complete the rest of the base functionality, and run tests with users to improve the user experience
If the project seems promising, we plan to run a marketing campaign for Kickstarter before eventually publishing on Itch.io
Lessons Learned
Being a project lead for Co-op Tabletop has given me an in-depth look on the various pipelines for artists across disciplines
This, in turn, has taught me how to break up my more art-related features into subtasks associated with specific, discrete sections of the pipeline (retopology vs texturing, etc.)
Meanwhile, being the only technical member of the project for the majority of the project's lifespan has made me incredibly familiar with various sections of Unity's API; specifically the Transform class, and how Unity expresses updates to a given GameObject's transform during the update loop
Most of the work done on this project has been moreso finding clever solutions to technical problems that I've never encountered before; applying overrides to animation keyframes, creating custom shaders that map to a map creator's UI, and tracking dice roll results through the physics engine and asynchronous threading
Additionally, I have gained a much greater appreciation for delegating my tasks, as the shift from being on a small team during Ventures to tripling my team's size afterwards has allowed me to get into the engine again and resume designing solutions to the problems that are presented in the development of our core features
Comments