Other Projects

Other interesting projects

Scroll to explore
Game · Engine & gameplay programming

The Forest of Food

The Forest of Food is a top-view adventure where you pick a season, roam the forest gathering ingredients — hunting animals, harvesting crops and mushrooms — then cook the season's dish to satisfy the forest fairy and earn your way out. Team Gathering built it on DigiPen's in-house engine; as Technical Director I owned the object manager, the math types, the Bezier interpolation, the sound manager, the collision physics and the animal AI.

Role
Technical Director — engine layer, physics & animal AI
Team
Gathering — Sieun Choi (Producer), Minjae Kyung (Technical Director), Hyeonseo Yoon (Designer)
Context
DigiPen · 2020
Stack
C++ · DigiPen's in-house engine (doodle) · team-built 2D layer · DigiPen audio library
Overview

Pick a season, gather the forest, cook your way out

You drop into the forest having chosen a season, and the forest answers in kind — spring brings cows, summer chickens, autumn turkeys, winter pigs, each with its own crops and mushrooms to forage. Attack the animals for meat, pick what grows, and carry it all back to the pot.

The fairy of the forest sets the bar: cook the dish she's asking for and she lets you leave; fall short and you stay. That single loop — explore, gather, cook, be judged — sits on top of an engine the team wrote ourselves over DigiPen's in-house graphics and input layer.

Title art — Team Gathering
Core — Engine layer

The object manager and math the whole game runs on

01

Object manager

GameObjectManager owns the live world — the player, items, animals and trees — and drives the frame with UpdateAll and DrawAll. Every gameplay actor derives from a shared Object base that carries position, velocity, a sprite, a hitbox and its current state, so the manager can tick and draw them all uniformly against the camera matrix.

02

Basic data types

I wrote the math the rest of the code leans on: a templated Vector2D with the usual arithmetic and a Normalize used by the AI, a Rectangle that doubles as the hitbox (isPointInside, isOverlapped, directional vertex queries), and a Line — the small kit every system builds geometry from.

03

Bezier interpolation

An InterpolationManager animates values smoothly over time without per-frame easing code at the call site. AddSpaceLerp moves a Vector2D along a cubic Bezier path; AddTimeLerp eases a scalar with tunable start/end Bezier strength. It owns the running interpolations and reaps the ones that finish.

04

Sound manager

A sound layer over DigiPen's audio library wraps one-shot SFX and looping BGM behind a small interface. Objects register effects by name (AddSFX) and fire them by name (PlaySFX) — so an animal can cue its own cry on a timer, and a scene can swap its background track on a state change.

Animal AI

A three-state machine per animal

Each animal is a Creature running a finite-state machine over the engine's State base — Enter, Update and TestForExit per state. State_Moving patrols: it walks, flips direction on a randomised turn timer with a short pause between turns, and periodically plays its species cry. Take a hit and it switches to State_Runaway, fleeing along the normalised vector from the player at roughly twice its walk speed. When its HP reaches zero it enters State_Dying and drops the right meat item — beef, chicken, turkey or pork — for you to collect.

Movement is bounded by an Animal_Lock that clamps each creature inside the map rectangle, and collisions with trees are resolved directionally: the physics figures out which side was hit, pushes the animal back out with a small correction and reflects its velocity, so animals bounce off the scenery instead of clipping through it.

Physics & collision

Rectangle hitboxes, resolved by direction

Overlap test

Collision detection runs on the Rectangle hitboxes: a CollisionCheck reports which edge two objects met on, and isOverlapped / isPointInside back the world collisions and every mouse-driven UI hit.

Directional resolution

On contact the resolver reads the direction — up, down, left or right — snaps the moving body just outside the other's hitbox with a fixed correction offset, and flips the matching velocity component so it rebounds cleanly.

The knife hit

A swing only lands while the animal is past its invincibility window: a hit decrements HP, retriggers the brief invincibility timer, and routes the creature into Runaway — or into Dying when HP hits zero.

Bounded world

Actors stay inside the playfield by clamping their position to the map's rectangle each frame, so nothing wanders off the harvestable area of the forest.

Cooking & controls

Gather, cook, and three ways it can end

Loop

Season picker → cooking pot

After the hunt, the cooking stage lays your gathered ingredients into a grid you click to select. Match the season's recipe exactly and the fairy is satisfied — the good ending; miss it and you get the bad ending; sneak in the secret ingredient and the hidden ending unlocks. Each season checks its own recipe, so spring's dish is judged differently from winter's.

Season select — the forest menu
Controls

How to play

Arrow keys move, Space attacks the animals, Shift runs, Z opens the inventory and Ctrl eats. Top-view exploration with a kept-simple control set so the focus stays on hunting and gathering before the cook.

How to play — controls
Stack

What it's built on

Engine
C++DigiPen's in-house engine (doodle)Team-built 2D layer
My systems
Object managerVector / Rectangle / LineBezier interpolationSound manager
Gameplay
Collision physicsAnimal AI state machineObject interfaces
Audio
DigiPen audio libraryProgrammer-made SFX
Tools
Visual StudioAsepritePhotoshopMediBang Paint ProMusic Maker 2020

The engine layer — object manager, math types, Bezier interpolation and sound — plus the collision physics and animal AI behind a seasonal cooking adventure shipped with Team Gathering.