top of page

Adventures Aboard S.S. Grin - 2020

  • Role: Game Developer

  • Platform: Web Browser

  • Built in Godot

  • Team of 3

  • 6 Months of Development

 


Overview

Social and Emotional Learning Game for students Grade 3 - 5. Players take the role as a new member to the S.S. Grin crew, using social skills to help the residents of Pacifico Island.

My Work

  • Developed custom build of Godot to optimize game for web platform

  • Optimized "AtlasPlayer" to import and play animation-heavy characters from Adobe Animate

  • Converted systems from original Flash version to new Godot scripts. Systems including skits, dialog actions, pathfinding, save management, and many more

  • Onboarded and assisted co-game developer for scene creation

Code Samples - Atlas Processor

A collection of samples from the Atlas Processor class I wrote for SS Grin. The script imports Texture Atlases exported from Adobe Atlas to generate Godot-ready Nodes.

The purpose of processing is to optimize and reduce json data needed to draw Atlases by turning them into Godot native formats (.res, .anim). The data size shrinks by about 10x. (e.g. The Atlas for the Player character goes from 10.7MB Animation.json file -> 277.9kb anim files and 433.2kb .res files)

Animation.json has a hierarchy of data like so: Timeline -> Layers -> Frames -> an array of Symbol Instances (SI) or Atlas Symbol Instances (ASI). During processing, all SI and ASI are put into an array called elements.

processFrame

This function processes a frame while retaining transform of the parent, draw order of elements, and the masks that should clip this frame.
SI process into an array of elements, ASI process into a single element. 

processAtlasSymbolInstance
This function processes an ASI, into an element, the lowest level of object in the processed data.
This is the data that primarily populates the .res files mentioned before.

processAnimations
This function is for processing animations into Godot's Animation resource class. The elements processed by functions, like the two I've previously shown, are referenced here by animation track calls. Each is later saved as its own .anim file. 

Code Samples - Atlas Player
drawElement
This is the function that does the heavy lifting during runtime of the game. This function is called by the Animation object generated beforehand, and draws elements in order using Godot's low-level rendering server.

bottom of page