JAMI THE JELLY
Jami the Jelly is a 2D exploration game where you play as a brave jellyfish named Jami, who is trying to find lost friends in the deep-sea caves. The ocean is dark and full of frightening creatures. But you're the only one who can lead the baby jellies to the Festival of Lights!
Role & Responsibilities
As one of the two programmers on the team, I was responsible for:
Jami and other baby jellies' movement and behavior
Touch input handling
Story comic implementation
The character animations and enemies' AI behaviors were handled by the other programmer on our team.
I worked closely with the level designers and artist and helped them on daily bases for almost anything regarding Unity. I was responsible for troubleshooting Perforce, since it was our team’s first time using it.
Baby Jellies follow the Jami
( Babies follow the Jami )
In the game, once Jami finds baby jellies they start following him.
As you can see in the state diagram, initially the babies are lost in the cave. In this state, they just float at their location waiting for Jami to arrive. Once Jami comes close to them, they start following him. If any dangerous fish cross Jami’s path, or if Jami gets too far away from babies, they stop following the Jami. When this happens, they return to the “lost” state.
To accomplish this behavior, my script works by following logic:
( State diagram )
( Algorithm flowchart )
All the important variables like a reference to Jami, the speed of the babies, maximum follow distance, and distance to maintain between a baby and Jami were exposed to via inspector.
( Exposed variables )
During early play-testing we found out that most of the time players wouldn’t realize that a baby had stopped following Jami. After a while when players did notice it, they had to roam around the whole map again to find that lost baby. This led to a frustrating player experience.
To solve the issue, we needed to answer these two questions:
How do we get the player’s attention when a baby stops following?
How do we make it easier to find that baby once the player realizes it is lost?
To answer the first question, we came up with the idea that babies should spread colorful blobs if they get scared and stop following Jami.
( Jami goes too far away )
( Scary fish comes in the path )
To answer the second question, we decided that if babies left a trail behind them, then the player could simply follow the trail to the baby if they lost it. The image below demonstrate the babies’ trails.
( Blob trail )
Zoom out & Pan around the Map
Jami the Jelly was meant to give players a laid-back experience, so we never wanted them to worry about being lost. If the player has no idea where to go next or if they wish to get glimpse of the map, they have the option to zoom out and pan around the map. This feature allows player to plan the route to collect all the baby jellies.
When the player uses a pinch gesture, the camera zooms out and pauses the game. Then the player can simply drag their finger around to see different areas of the map. Once they are finished, they can pinch back to zoom in. When they do this, the camera’s focus returns to Jami and the game is resumed.
While coding this, I made sure that these gestures felt as intuitive as possible.
( Kelp overlay on zoom out )
To convey that the game is paused when zooming out a visible overlay of kelp fades in. When resuming the game it fades out according to the zoom level. Playtesting proved that this conveyance worked out very well!
Audio cues are a big part of the gameplay experience in Jami the Jelly. There is a soothing background music with ambient sounds, as well as audio clues for events like when Jami gets hurt, when Jami finds a lost baby, and when a baby stops following Jami.
We recorded multiple clips for each of these events. To make it sound a bit different every time, the audio cue is played with random pitch and volume multipliers for each playback.
I put together an Audio Manager script which a level designer could easily use for this purpose.
( Inspector view of Audio Manager )
A background story helps the player to establish deeper connection with the game. In Jami the Jelly, when the player starts the tutorial level they are presented with a comic book-style story that describes what happened and why Jami is trying to help the babies.
I was responsible for making our four-page storybook behave like it would on an eReader. The player can swipe or touch either side of the page to proceed to next page or to go backwards. Distinguishing the touch input as a swipe or a tap was an interesting and fun programming challenge!
( Inspector view of Story Comic script )
( Swipe and tap gestures in story comic )
What went well?
Scope of the project was well handled; geared according to the strengths and weaknesses of the team.
I self-taught a lot of new things during this project. Especially because I didn't have much experience of working with Unity Engine.
We prioritized and fixed appropriate bugs during beta. Because of that, during launch, the core mechanics and features of the game worked as intended!
What went wrong?
The team was not able to maintain code quality; mainly because multiple people had to work on same scripts very often.
Programmers extended the same scripts even for new features.
Some tasks ended up taking way more time than anticipated, sometimes double!
What did I learn?
Code organization works much better when gameplay features are implemented in their separate scripts, instead of lumping everything together.
Fragmentation of logic makes it convenient for multiple people to work simultaneously.
Knowing risks sooner and reserving time to mitigate them leads to more realistic time estimations. This in turn leads to a better and well-scoped game. :)