Coconut Isle

Production time: 8 weeks, 50%

Team size: 15

Engine: TGE (TGA in-house engine)


-Collision handling

-Collision layers

-Player state machine

-Player basic movement

-Enemy AI

-Dialogue system and tutorial programming


-One-way platforms



Since we were using TGE for this project there were no physics in place, so I worked on implementing collision handling. I made a collision layer matrix so colliders are not tested against each other unless necessary.

When a collider overlapped another collider, the collider would get tested in the opposite direction of its velocity until it was no longer overlapping, alternating between moving it on the y- and x-axis. Once it's not overlapping anymore, the object would get forced to that position.

The collisions worked really well unless you were trying to jump against a wall. Since the map was built up of tiles, it would detect collision on the overside of the tiles on the walls. When the overlap check was done, it would move the player collider on the y-axis before the x-axis, which makes the player get stuck on the walls. The way I solved this was by casting rays upwards from the closest corner on the tile you are colliding with. If the ray hits a collider above, then it is a wall tile, and the overlap test will prioritize the x-axis. If you collide without the rays hitting anything, then it is a ground tile, and the overlap test will prioritize the y-axis.


I made 5 different enemy types for Coconut Isle. There are three variants of crabs - the regular one, which moves between points, a crab with coconut armor which breaks when jumped on, and a skeleton crab which gets stunned when jumped on but cannot die. There are also skeletons wielding cannons that shoot cannonballs every few seconds which can be jumped on. The skeleton also gets momentarily stunned when jumped on. Finally, there are bats which get alerted when the player gets near, and swoops down toward the ground before flying back up to their original position.

Dialogue system & tutorial

I also created a dialogue system which can also be used for simple in-game cutscenes. The cutscene is written as a sequence of events in a .json file which are then executed in order. The different types of events are text, lerp position, wait, get & set condition. This system was further iterated upon in the next project.