top of page

AN ACTION GAME PROTOTYPE

Taking the experience of Yasuo in a single-player game as a starting point, explore the design and development of action games

Details

Genre: Action game

Engine: UnrealEngine4.27

Platform: PC(Windows)

Date: June 2023

The project utilizes assets sourced from the Unreal Engine Marketplace.

Effect display

Making process

1.  Idea generation & Plan formulation

One day, after watching a highlight reel of Yasuo’s gameplay, I thought: without considering the balance required for online games, extracting the fun points from Yasuo’s experience and putting them into a single-player game might be very interesting.

So I decided to make a simple prototype to test this idea. I studied the sources of Yasuo’s fun by watching the highlights and playing the game, and summarized them as high risk, high reward, flow state, accumulation and reward of game experience, and strong feedback. Then, I studied the actions and skills of some characters in action mobile games such as Honkai Impact 3rd as references. 

After that, I roughly formulated a production process based on testing and iteration as the main driving force, namely: making core skills - making basic enemies - testing and designing the rest of the skills - testing and designing the rest of the enemies - making basic combat flow - designing the rest of the combat flow based on testing - iterating constantly and finally wrapping the game with simple art resources.

Screenshot from League of Legends

2. Making normal attacks

I imported the model and animation, and added simple actions to the character. However, I found that when there was an animation playing on the character, the program would ignore the key press trigger if I pressed the key again. This sounds like it makes sense, but it actually feels like there is not enough feedback when pressing the key, making the game experience weird. So I started to investigate how other games handle this.

I found that in Hades, if there was an animation playing on the character, the program would store a new animation for the character when I pressed the key again, and automatically play the stored animation when the current animation was finished (I later learned that this is called Input Buffer). Then I modified my program according to this method, and repeatedly debugged the timing of allowing the storage of the next animation, and got a satisfactory normal attack feelings.

3. Making a dash attack skill

I quickly implemented the dash attack skill effect, which was not difficult. But just when I thought I could continue to advance, various bugs appeared, such as not being able to perform normal attacks after dash attacks, not being able to move after dash attacks, and not playing animations for the next dash attack after dash attacks, etc.

It took me a while to sort out the relationship between the states of “can move”, “can store the next attack”, and “can perform the next attack”, and I added priority levels for normal attacks and dash attacks: dash attacks can completely interrupt normal attacks, but not vice versa. I found that after adding a new skill, the program complexity increased a lot, and the readability of the blueprint also declined.

4. Making an enemy system

I wanted to create some basic enemies to test the skills I had made and to validate my ideas for other skills. I created a parent blueprint for all enemies, so that different types of enemies could reuse code through inheritance. Then I used the GOAP plugin to add AI behavior to the enemies. However, after following the official documentation carefully, I still encountered many bugs. After a long and fruitless debug, I gave up on GOAP and used AI behavior tree to complete the enemy’s AI logic.

Then I added a damage detection mechanism to the player character. I first tried to bind ray tracing to the character’s weapon, but after testing, I found that even with frequent and dense ray tracing, there was still a small chance of missing the enemy. I used box collision to write a new detection system, which gave me more accurate results than ray tracing.

After running the program, I also found that the enemy’s attack had too short of a wind-up, and the player lacked reaction time. So I made the melee enemies stop for a moment before attacking, and the ranged enemies hold the spell in their hands for a while before firing, and generate a hint mark on the floor in the direction of the shot. This way, the player could react in time, use the dash skill to dodge the attack, and complete part of the experience of Yasuo that I had envisioned.

5. Remaking the action system

After adding the second skill to the game, I found that the original action system was already overwhelmed, and its readability was so poor that I spent some time and still could not fully understand the logic behind it. When I asked someone for help with a specific bug, someone reminded me that reinventing the wheel was not advisable, which made me realize something. For simple functions, doing it myself can improve efficiency, but for a more complex system like the action system, directly using a mature technical solution can reduce many problems in development, so I restructured the action system blueprint according to the online tutorial, and its highly scalable writing style allowed me to better cope with the new features added later.

6. Adding effects to skills

After determining the effects of the skills, I added special effects to them according to the expected experience of each skill.

Mouse Button Left: Normal attack, consisting of two back and forth swings of the spear. I set the pitch multiplier of the sound effect of the second swing of the second action to 0.8 times the normal value, making this action sound heavier and more powerful than the rest of the normal attacks, and also making the four attack sound effects in a normal attack cycle not exactly the same, thus giving it a certain sense of rhythm.

E: The skill effect is to hit a rectangular area in front of the player, causing damage and knocking back the enemies within the range. I used a sound effect similar to hitting a stack of paper, making the player feel that the objects being hit would naturally be shaken up after hearing the sound, and the screen shake added at the same time enhanced this feeling. Before hitting, I let the character hang in the air for a short time as the skill’s wind-up, as one of the costs of using the skill, and also enhanced the sense of force of the hit. The dark gun tip trail was used to enhance the skill’s “heavy” feeling.

Mouse Button Left

E

Spacebar: The skill effect is to dash in the direction of the mouse pointer, and cause damage to the enemies on the path. After some time of testing, I set the skill’s wind-up to 0.2s, and the dash time to 0.15s, so that the player could have some time to confirm the dash direction, and complete the dash in a time that the player could react and was relatively fast. I added a afterimage effect to the skill, to show the dash path and speed, and also added a sound effect that made the dash feel “rapid”.

Shift: Swing the long spear to mark the enemies in the fan-shaped area where the spear tip extends and cause a lot of damage to them. In the next 12s, use spacebar to cause damage to the marked enemies to add a second mark, and after all the enemies are marked twice, you can gather them in the direction of the mouse pointer. When swinging the long spear, I changed the global time to 0.06 times the normal time speed, enhancing the sense of power of the skill, and making the player intuitively feel that the skill would cause a lot of damage to the enemies. The marked enemies would change color, and the color would fade evenly in the first 10s until it was almost gone, but it would fade slowly in the last 2s, making the player’s actual time to make a second mark longer than what they felt, and thus more likely to complete the operation in a “urgent” state, creating an tense and exciting experience.

Spacebar

Shift

Mouse Button Right: Completely block damage within 5s, and reset the time after a successful block. If the number of blocks is greater than or equal to 1 and less than 3, then a dash will follow after the block ends; if the number of blocks is greater than or equal to 3, then a combo and a forward jump will follow after the block ends, striking and knocking back the enemies in the rectangular area in front of the landing point. The color of the skill’s defense ball reflects the number of successful blocks, and the effects of the shrinking defense ball, the charging sound, and the character’s constant shaking in place enhance the feeling of the defense charging state.

Mouse Button Right: 1 < defend < 3

Mouse Button Right: defend >= 3

Programming

The functions that the program contains

Character blueprint

Data table

State machine

Material editor

©2023 Shutian's portfolio 版權所有。透過 Wix.com 製作的理想網站

bottom of page