David Song
Home
Portfolio
Birdteeth
Subway Sermon
Fossilogical
Night Guard
Normal Weightlifting
Blight
Order in the Court
A Miniscule Moment
Resume
About
David Song
Home
Portfolio
Birdteeth
Subway Sermon
Fossilogical
Night Guard
Normal Weightlifting
Blight
Order in the Court
A Miniscule Moment
Resume
About
Demo Coming Soon!

Birdteeth is a casual creature-collecting incremental game create by me and Erica Chen, where I worked primarily on programming. The demo, built using Unity ECS, mainly focuses on the creature-collecting aspect. A big focus of the project programming-wise for the prototype was getting the in-game birds to respond to the player, their progression, and the environment. We are currently in the process of porting the game back into the Unity Gameobjects system.

The Environment

The land-able tiles in the bird map

Our custom tool for painting perchable areas based on mesh triangles

Runtime bird flight path generator

Since we anticipated for our maps to change vastly during development, our custom environmental tools (like the bird collision map baker and the perchable area painter) are designed to be as easy to use as possible. They're set-and-forget style solutions that included debug visuals, manual editing, direct run-time integrations.

The bird map baker generates the entire map based on the input of a map scriptable object, collision layers, and map bounds. For almost all terrain changes during the development of the demo, updating the baked map required only a single click. In addition, it also allows custom inspector colors for landable and solid tiles, as well as a specific tile debugger for pathfinding issues.

The perchable area painter automatically generates an area scriptable object at the terrain object's location, and allows the user to save all perchable triangles for use during runtime. The scriptable object is then shared by all instances of the same prefab, reducing memory allocation during play and need for re-painting.

I also created a pathfinding debugger tool, as that became not only a mechanical and aesthetic focus, but also a performance one. The debugger is a wrapper for the runtime pathfinder class, generating paths from a start and end position, and a start direction. Especially near the end of production when we were faced with optimization issues, It became a vital tool for balancing between visual fluidity and performance.

Working with Unity's ECS Architecture

The structure of each bird's behavioral data

Birds in various different states

The demo of Birdteeth was developed in Unity's Entity Component System (ECS) with the rest of the Data-Oriented Technology Stack (DOTS) because we wanted to utilize its capacity for performance to manage more birds in the same scene.

The birds utilize a finite state machine to control their behaviors. Each bird's state is dictated by enableable tags, and each state shares a common data component that resets during transitions. The stats for the birds (like speed, preferred seeds, state durations, etc.) are also shared between all instances, reducing the memory footprint and enhancing performance.