Peng's Portfolio
Shiling
Indie Game Studio Project
Completed in 2024

This project description has been approved by the company for use on my personal website.
Introduction
Shiling (The Spirit of Poetry)was a project I worked on during my time at an indie game studio based in Shanghai called SugarDark Studio. Although this game faced many challenges in its later stages, it eventually launched on Steam despite the setbacks. Despite the small team size, everyone could express their ideas, unlike in a large company. With fewer people, I had the chance to fully showcase all my skills, much like participating in an extended Game Jam. In this team, I served as a technical game designer, responsible for designing and implementing the skills and AI for all monsters, including both minions and bosses, using Blueprints, particularly the GAS (Gameplay Ability System). I also independently handled the level design for Chapter 2, as well as the game mechanics implementation for both Chapter 1 and Chapter 2 (out of a total of 3 chapters).
Combat
First, I want to briefly introduce our combat system. Although I didn’t implement the player’s combat mechanics, they are closely linked with many monster abilities. The player’s combat system allows for time stop with a single key press. During this time stop, players can use the left or right mouse button to click, drag, and create various shapes. Each shape has a different effect—some for combat, others for puzzle-solving.
When monsters attack or are in certain special states, players can use specific mouse gestures to knock them into a "weakness" state. In this state, they’re vulnerable, allowing players to deal significant damage. Some bosses require this method to be defeated; otherwise, they’re impervious to attack damage.
I independently implemented the blending of animations for monster state changes and knockdowns, along with the integration of these states into the AI behavior tree.


Monster Design
In this project, we created a total of 9 minions. Among these, one is designed specifically to chase the player before combat begins. Additionally, the drone minions come in 4 different forms, so they collectively count as 4 different minions. As for the bosses, there are 3 in total, each with 2 phases. When transitioning to the next phase, the boss model changes, and new abilities are added. All abilities, AI, animation system setup, and configurations for these monsters were implemented solely by me (Art assets excluded).












When designing abilities, I create an Excel sheet to streamline management and facilitate discussions with colleagues. Click the link below to view the specific sheet.

Minion Design Example Wolf
When designing the wolves, I envisioned them as fierce, cunning creatures skilled in teamwork. I developed a system where, when one wolf attacks the player, the others circle around, waiting for the perfect moment to strike, showcasing their cautious and sly nature. Additionally, if a wolf has been engaged in combat with the player for a while, it will suddenly leap back, allowing another wolf to take over the assault.

The wolf is staring at the player, remaining on alert

When the player approaches the wolf, it will sometimes jump away
Because our animator hadn’t created animations for the wolves slowly turning their heads to watch the player, I leveraged Unreal Engine’s animation system to implement the effect we wanted. By using the Transform Bone node and blending it with movement animations, I dynamically adjusted the wolf’s head direction. This approach helped us save on animation production costs while keeping the wolves’ predatory gaze locked onto the player.

Showcase of other Monster Attacks







BOSS Design Example Dragon
Dragon Main Combat Loop
The dragon boss is named Yinglong, a legendary creature from Chinese mythology. The dragon's primary combat loop involves its roar, causing rocks to fall from the sky. If hit by a rock, the player takes damage; however, these rocks also serve as a means to avoid the dragon's wind attack. By standing behind a rock, the player won’t be blown off the platform. During the dragon's wind attack, the player gets locked in place. At this point, if the player uses time-stop and the WuYi ability to attack the lasers holding them in place, they can regain movement and run behind the rocks to avoid the wind attack.

The stones began to fall

Failed to dodge the wind attack
Successfully dodge the wind attack behind the stone

Successfully sever the binding lines

The dragon’s normal attacks and fireball attacks are interwoven into this loop to create additional challenges for the player.

Dragon Normal Attack

Dragon Fireball Explosion
As the boss, the dragon has two phases. Initially, I planned to design completely different abilities for each phase. However, we realized this approach made the two phases feel disjointed and would extend our production time. After some discussions, we decided that Phase 2 would retain Phase 1’s abilities, with increased power and frequency, and introduce one entirely new ability.
In designing the Phase 1 abilities, I didn’t want the combat to be too challenging. So, I gave each ability a relatively long cooldown compared to Phase 2, allowing players to dodge with simple movements. Once Phase 2 start, the boss gains a new skill that summons snake minions, adding a bit of chaos and urgency to the fight. As the final phase of the final boss, my goal was for players to feel a hint of tension without overwhelming difficulty.

Dragon Phase 2 Attack
Since the game leans toward a narrative-driven experience, we didn’t intend for the combat or puzzles to be particularly hard. Our goal is for players to enjoy the story and gameplay at a comfortable pace.

Bluepoint
In this project, I used Blueprints to implement various functionalities. I'll focus on how I utilized the Gameplay Ability System (GAS) to create monster abilities, skill selection features, and the development of the patrol system.

Gameplay Ability System(GAS)
What is GAS?
The Gameplay Ability System (GAS) in Unreal Engine is a powerful skill system framework primarily used to manage character abilities, attributes, effects, and interactions within a game. The GAS framework organizes various character abilities into reusable components through a series of classes and interfaces, simplifying the writing and maintenance of game logic.


Initial GAS Setup
At the start of the project, I assisted the programmer colleagues in setting up the GAS, including player states and attributes, monster attributes, etc.


Monster Attribute Data Setup
When implementing monster abilities, I mainly create Gameplay Effects (GE) and Gameplay Abilities (GA), using many GAS-related Blueprint nodes. These nodes help me transfer data between different Blueprint files. For example, by using the "Add Loose Gameplay Tag" node, I can apply the player’s attack effects to a monster, adding a new state to it—this achieves direct data transfer between different Blueprints.


Create Custom Tag
Apply Flash State to Monster
For all monster-related GAS, I created a total of 62 Gameplay Abilities (GA) and 52 Gameplay Effects (GE). Besides attack abilities, I also implemented features like monster defense, defense break, getting hit, and death, and so on, by using GAS.

62 Gameplay Abilities (GA)
AI Behavior Tree And Skill Selectior (Tool)
I also independently completed all the AI for the monsters, which is divided into two types: Minions and Bosses. The AI for Minions is more flexible, as they need to react differently depending on the player or the terrain. In contrast, the AI for Bosses is relatively simpler, as we decided to have them alternate between different abilities in a set pattern.

Minion Wolf AI Behavior Tree

Boss Dragon AI Behavior Tree
Although the Boss's skill-casting pattern is simple, I created a component to manage skill selection. After attaching this component to a Boss, the Boss will follow these rules when choosing abilities: it randomly selects a skill from all available options, then, after casting that skill, it randomly chooses the next skill from the remaining, unused abilities, and so on, until all skills have been used. Once every skill has been cast, a new cycle of skill selection begins. This ensures that each skill is used without repetition while maintaining an element of randomness.

Boss Skill Selector Component

Component Implementation
Patrol system (Tool)


I created a patrol tool using Blueprints for myself and other designers. Designers only need to add this component to the Monster that requires patrolling and configure a few settings, and the Monster will be able to start patrolling.

Specific Blueprint Implementation
Designers can use this patrol system to control patrol distances, patrol positions, and more within the scene. As shown in the image below, the Monster will patrol along the path defined by the points set by the designer.

Straight Line Patrol

Curve Patrol
After setting up the patrol route, designers can also configure the AI's patrol type. There are two types: in the first type, when the Monster reaches the last point, the next point becomes the starting point, and the Monster completes a “loop”. The second type, which I call "Return," makes the Monster follow the original path back after reaching the last point. Additionally, designers can set the Monster's wait duration at each point. All these features make this tool extremely convenient for designers when setting up Monster patrols.

Additional patrol settings