top of page

Co-op Tabletop

  • Writer: michaeldiazcompsci
    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

        ree

        • 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

        ree

        • 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)

          ree

    • 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


Leave a Message

Have questions, feedback, or want to talk in general? Feel free to reach out to me using the contact form below- I'm always eager to hear from other devs in the industry!

Find me on:

bottom of page