Geelee & Dessert City
- junlachaktophat
- Mar 4, 2025
- 4 min read
Updated: Mar 29
Official Website: Pussycat Studio
You can check out the full project at: Gitlab
About The Game
A young boy named Geelee lives in Jelly Village, a small settlement within Dessert City. He resides with his parents and possesses remarkable combat abilities, earning the favor of the Candy Gods. Geelee's main duty is to protect the village from any threats.
One day, a swarm of insects raids Jelly Village, consuming sweets and harming its people. Amidst the chaos, Geelee is ambushed and left unconscious for a long time. Upon awakening, his guardian spirit reveals the truth. Someone in the village has resurrected the Three Rotten Candy Gods, causing great turmoil. If left unchecked, these gods will merge into a powerful Rotten Candy Deity, bringing even greater destruction. To prevent this catastrophe, Geelee must defeat all three gods before the
Story & Gameplay
Geelee & Dessert City is a Third-Person Action-Adventure Game where players take on the role of Geelee, a young warrior whose parents have been taken hostage by the Mayor of Dessert City. In addition, the mayor has unleashed insect creatures to destroy Jelly Village, Geelee’s hometown.
Players must fight through hostile insects and save Jelly Village. The game features combat mechanics, where players can:
Move using W, A, S, D
Attack using the mouse click
Utilize special skills with Q, E, C, X
Battle through increasingly difficult enemies to reach the final boss.
Project Development
This project was developed as part of my undergraduate studies at Chiang Mai University, where I collaborated with a team of four members. My primary role was as the programmer, responsible for implementing core systems and functionalities outlined in the project requirements.
Team members
Junlachak Juntasilp
Theeramate Saeba
Kanyawee Sematong
Teerakon Keawrakmuk
My Role
Gameplay Programmer / UI Implementer
Core Mechanic that I created
New Input System
This project uses an Input System to support both keyboard and controller input from players.

Boss AI (Cyrup Kings)
This project features three bosses. I, the author, was assigned to work on the first boss: Cyrup Kings, and this boss also appears in the online mode.

The Cyrup Kings has 3 main systems: First, the Barrier system. The boss automatically activates a barrier every 15 seconds, deploying a shield for 5 seconds before disappearing. Second, the detection range. The boss uses a variable, "distanceFromTarget" (default 10.0), to check if a player is within range. Finally, the attack behavior. If a player is too far (beyond range), the boss will stop moving and enter an idle state. If a player is within range, the boss will approach using a NavMeshAgent. When a player gets close (less than or equal to 3 meters), the boss will stop moving and randomly unleash a barrage of attacks.

Finally, the health or hitbox system. Health and attack power values are pulled from a configuration file. When the boss is hit, it will perform a stun animation and display damage numbers on the screen. When its health reaches zero, it will perform a death animation, disabling the collider to allow players to proceed to the next level. In multiplayer mode, players win immediately upon defeating this boss.

Other Enemies
This project also includes other enemies besides the boss. These are minor enemies that players will encounter along the way to the boss. The enemies use a ScriptableObject system to create profiles for each type, allowing them to easily modify the stats without changing the code. The enemies also have a HitBox system.

The enemies also have a HitBox system. Its function is to check for collisions (OnTriggerEnter) to verify if the incoming object matches a specified tag (Col_PlayerAtk). If it does, the enemy takes damage, deducting a percentage of their health based on the player's attack power. When their health reaches zero, a "Die" animation occurs, and the Collider is disabled to conserve resources and prevent the player from colliding with corpses.
After defeating an enemy, players will have a chance to drop potions with a random drop rate between 20.2% and 30.4%, and gold (a random amount between 100 and 200), and a message will be displayed on the screen for the player.

Multiplayer
This project adds a multiplayer system to the game, using Photon Unity Networking (PUN 2) as the core infrastructure. It handles room connectivity and data synchronization between players. Upon joining multiplayer, the system connects to Photon's Master Server and takes players to a lobby. Players can type a room name to create their own or join another player's lobby. Once successful, the system loads a dedicated online map, displaying the same screen for all players in the lobby.

Once inside, players will fight a boss in that map using a Master Client Control system. The host player (Master) will calculate the boss's logic (For example: movement, shield deployment) to prevent the boss's position from being inaccurate due to individual player calculations (desync).

In terms of character and boss synchronization, this project utilizes Remote Procedure Call (RPC) to instruct all players' machines to play animations simultaneously. For example, when a boss is attacked or dies, everyone will see the boss displaying the same animation. Additionally, a Data Stream system constantly transmits health values across the network, ensuring that the boss's and players' health bars are synchronized on everyone's screens. The system also calculates damage when the boss is attacked by two players.

Tools Used:
Unity 2021.2+
GitLab
SmartGit
Official Website: Pussycat Studio
You can check out the full project at: Gitlab

Comments