Aqua's Will is a 6 students' program at Shanghai University. By creating a single-player game, our goal is to make people realize the importance of protecting the environment with a compelling backstory and detailed action.
Today, 40 percent of the world's oceans are severely impacted by humans, and more than half of the coastal habitats are being degraded. As humans enjoy the natural gifts of the ocean, we must remember the pain that the ocean has experienced. Thus, We created an ocean-themed game and hoped to use it to bring people into a marine life perspective.
As the lead programmer and designer on the team, my responsibilities include building scene interactions, writing enemy AI to bring this game world to life and design game level and mechanics.
The gameplay experience begins with an introductory scene that invites the player into Aqua's world with a story opening. Through on-screen transitions, the player becomes Aqua and embarks on a quest to save his friends.
Players take on the role of Aqua, a sea spirit, and use their skills to pass through various obstacles and travel to the deepest part of the ocean to purify the mutated whale sharks.
Aqua is the messenger of the ocean, so the level of pollution in the ocean is closely related to Aqua, who has an oxygen bar and a pollution bar, which will produce different results through different interactions with the surrounding environment:
At first, our team designed the following map, then we gradually added all kinds of organs and traps in the map, and built TileMap for user testing, then, we encountered problems:
Problem: In the initial map design, we created a vast and intricate world. However, during user testing, a player raised a critical issue - the immense open spaces made it difficult to find the path to the final boss. At the same time, players responded that they didn't know what the organs on the road were and how those organs worked on the players.
Solution: First, we restructured certain areas of the map, breaking down the larger open spaces into more manageable sections connected by well-defined pathways. This not only facilitated easier navigation but also enhanced the overall flow of gameplay.
Then, we added visual cues, landmarks, and defined pathways to guide players while revising the grand scale of the environment.
After this improvement, there was a noticeable increase in player ratings of the maps, which they felt were helpful in helping them understand the map's content and complete the flow of the game.
Here's the iteration of final map:
Problem: When creating a platform-adventure game, one of the primary concerns is designing the enemy AI system.
Initially, we use simple conditional judgements to make enemies, which offered basic functionalities for patrolling, detecting the player, and engaging in combat. However, we encountered a significant challenge in achieving the desired level of complexity and intelligence in enemy behavior. Additionally, as our game heavily relies on the AI to provide dynamic and immersive gameplay experiences, we found it necessary to explore the development of a custom AI system to meet our specific requirements.
Solution: To overcome these challenges, I studied the following ways to compose an enemy AI.
After weighing the pros and the cons, I chose to customize the state machine to complete the writing of the enemy (specifically the Boss) AI. By calculating the state and position of the boss and the position of the player, the boss can "intelligently" track the player and make it more difficult for the player to hit the boss. In addition, our AI takes into account the collision system, so that when the player tries to get close to the boss, the boss will unleash the collision skill, so that the player will have to stay at a certain distance to fight the boss. I was responsible for the development of the entire state machine. After implementing the system and conducting several tests, we achieved remarkable results. The illustration shows the state description of the Boss.
Boss can achieve functions are as follows:
In this case the state machine can be subdivided into: the state machine system, the state base class, and the actual script mounted on the object. First, the different states are written using inherited state base classes, then the state machine system is called to control the state methods, and then the individual states are added by registering events in the actual script on the object.