top of page

   Shiling

        Indie Game Studio Project

Completed in 2024

shiling_edited.jpg

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.

image.png

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).

Wolf.png
Monkey.png
Spider.png
Bear.png
DroneGun_edited.jpg
DroneBomb_edited_edited.png
DroneBlade_edited.jpg
DroneTreat_edited.png
Comvirus.png
Eagle.png
Doll1_edited.png
Dragon1_1.png

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.

image.png

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.

image.png

Showcase of other Monster Attacks

20241028-032329_edited_edited.jpg

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.

屏幕截图 2024-05-13 181904.png

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.

Screenshot 2024-11-02 033939.png

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.

image.png
image.png

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.

Screenshot 2024-11-02 034514_edited.jpg
image_edited_edited.jpg

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

Level Design

I have made a separate page about the level design of this project, please click to jump.

bottom of page