Two weeks ago, I started developing an action game for my course program. This post is the first development log, which tells the basic information about the project and things that happened during the development process in the past two weeks.
All work is my own, except where I explicitly state that others have contributed.
Demo Video
In short, here is a video of the current results:
Background of the project
I'm a student in the University of Utah's Master of Entertainment Arts and Engineering (EAE) program, majoring in technical arts, but my job is technical planning. This project is for "Advanced Game Studio", a two-semester course in this master's program. The game will be designed and developed by myself, with some other EAE students' contributions.
The project officially began on October 18 and is expected to end its cycle as a course project in April or May 2023.
Project Vision
First, I want it to be an action game. Second, I want it to be an action game with a good feel... Considering both the time and the feasibility of development, I set the scope of this game as "a thrilling BOSS battle at 3A quality level". My expectation is to recreate the experience of the boss fight between Kratos and the Valkyrie Queen Sigrun in God of War (2018).
Reference video:
By the way, I once challenged the Sigrun on Give Me God of War difficulty and succeeded, but it took me two nights...
Combat Design
The BOSS fight against the Valkyrie Queen in God of War is a very tense and exciting "reactive" combat. Although Kratos has various skills and combos, the boss does not give the player many chances to attack. After the boss receives a certain amount of damage, she will be forced to get out of the "be hit" state, and will not be controlled by the player all the time just because the player can play a crazy long combo. In this boss fight, the primary experience of the player is to understand the boss's various moves and correct responses to them, and then take the chance after each boss moves and deal damage to the boss. To win, players can only use the most basic combos, which does not affect the overall combat experience. Of course, some of the player's moves in God of War have special abilities, which can be used as unique response methods when facing certain boss moves. Still, this part belongs to advanced gameplay and is not an essential element in establishing the basic combat experience.
Therefore, my combat design for this project tends to focus on the following:
Player basic combo: There is a set of combos that look cool and practical, and do not need to be complicated.
There are several special moves for players: Runic Attacks or Spartan Rage. Although such moves are not necessary for the essential combat experience, they are crucial to arouse the player's emotions during combat. Players shouldn't only have simple basic combos. As long as there are one or two special moves, it can have a qualitative change in the impact of players' emotions.
Players' rich reactive moves: four-directional dodge, block, precise parry, break guard, turn back... Players must have a variety of reactive moves to have enough choice space when facing different BOSS moves.
Basic damage and hit feedback system: Because I don't plan to make a very complicated RPG system like God of War, there is only a simple damage calculation and hit feedback system.
Rich BOSS moves and good AI design: The number of BOSS moves is crucial to the richness of the combat experience, and enough BOSS moves must be created so players will not feel bored. In the case of Sigrun, she has about 15 different moves, including ground, air, projectile, etc. types. My boss may also need at least three types of moves, and I hope there are at least 9 to 12 moves. At the same time, the BOSS also requires a reasonable AI design, so that the BOSS can use appropriate moves for the player to react, and make smart transitions between moves. To be honest, I believe this part is the bulk of the work, and I'm not very familiar with it. This will be the part that will take me the most time in the future.
Fast pace: The action speed is fast. There are multiple hits in a single move. The interrupt input is loosely determined, etc. This part is mainly a way to bring enough pressure on the players. Due to development cost constraints, it is unlikely that I will make a massive breakthrough in the richness of moves, so I need to use a fast-paced experience to make up for this part. The standard pace for players is the attack speed of the Leviathan Axe. The pace of the boss action should be faster than the player side. In this part of the experience, if I am not sure, I will probably reference God of War.
Feel and experience: 3C, VFX, SFX, input cache, multi-directional hit animation, lock system, attack motion correction, slow motion, execution, and UI... These are hard to categorize but have a crucial impact on the game's overall quality. Under the precondition of meeting the above design purposes, polishing these parts will improve the combat experience from quantitative to qualitative changes. In the later stages of the project, I must leave some time to polish this part, and it is even worth cutting off some unfinished content.
In addition, there is a completely optional content: Roguelike. After each round of battle with the boss, the player can choose a random modifier for themself and the boss. In the next battle, the player and the boss will have different stats - for example, after the player parries successfully, the power of the next special move x1.5; a boss move that can't break guard can now break guard. This is a way to extend the replayability of a game without requiring additional assets, which is worthwhile for a full game project. But that's not necessary for the combat experience I want to create. If there is not enough time later in the project, or the system is too difficult to make, I may abandon this part entirely.
Concept and Art
The project initially had a "Reaper vs. Undead" theme, and even a fictional myth was written for it, which is where the project's code name came from. But considering this concept is more suitable for an adventure experience, a single BOSS battle is not enough to express this grand concept. Due to the suggestions from the cooperating artists, a completely different concept design may eventually be chosen. This part is still to be determined.
For the record, though, I'll include the fictional myth I wrote. But to keep the original flavor, I don't translate it, and waiting for any professional localizer help me do that:
Contract of Life
伟大意志在创造世界之初,订下生命之契约,对于活着的时候意义非凡的生命,这样的人死后会被奉入英灵殿,其他人死后则自动进入尘世轮回。
死神是伟大意志的使者,负责确保生命之契约的执行。他们负责收割英灵候补的生命,用荣誉决斗的方式,赐予他们命定之死,之后迎接他们前往英灵殿;同时他们也负责收割本应死亡却还未死亡的灵魂,解放他们,让他们进入尘世轮回。
那时的人们,尽管笨拙且弱小,但仍然努力地活着每一天,积极地期待着死神降临于自己面前,为自己赐予命定之死。
后来,在伟大意志创造世界后的第 738043 天,祂抛弃了这个世界。从此,无人再知晓死后会发生什么。死神们也从世界上销声匿迹。
死亡后的未知,为人类降下了无与伦比的恐惧,人们虔诚地向永恒光明祈祷,希望赐予人类面对死亡的勇气。日复一日,不知道多少代人的努力之后,从这份愿望中诞生的,是一只身缠永不熄灭烈火的不死鸟。
不死鸟将自己的羽毛洒向大地,羽毛的赐福赋予了人们永生。但从此以后,再也没有新的生命降生。
失去死亡后的世界里,一些人害怕伟大意志在某一天会回归,重新让死亡遍布这片大地,因此他们制作了大量的弑神兵器。
但这些兵器在弑神之前,先被用于了人类之间的战争。而没有死亡的战争,导致的结果就是许多人从此成为了永恒的奴隶,或被痛苦地囚禁为永久的行尸走肉。
不死鸟对此视而不见,永生的赐福仍然平等地庇佑着每一个人。
这时,出现了一些人,他们认为面对死亡的勇气被扭曲了,永生不是赐福而是一种诅咒,他们誓要把死亡带回这个世界。
无数的人开始挑战不死鸟,但不死鸟是不死的。杀不死祂,永生就仍然存在。
有一小群人重新拾起了对伟大意志的信仰,他们虔诚地向伟大意志祈祷,希望祂重新回到这片大陆,为生命和死亡带来秩序。
不知过了多久,一位死神在这个荒诞的世界中苏醒了。
但她也不知道伟大意志离开之后的去处。
她只知道,终结不死鸟的永生诅咒,是生命之契约赋予她的使命。
Development Environment
Finally, it's time for the actual development introduction! This project is based on Unreal Engine 5 and uses Maya as the primary DCC tool.
Blueprint vs. C++
When it comes to Unreal, there's bound to be a blueprint versus C++ debate. I'm currently developing with pure blueprints, and I don't use heavy-weight frameworks (such as GAS), mainly for development efficiency. My previous work experience has given me familiarity with blueprints, allowing me to focus on implementing the design rather than searching for unfamiliar C++ APIs.
Currently, BP + 3rd party plugins meet my development needs. The only feature I found that cannot be implemented very elegantly with BP is the variable with the "protected" modifier in object-oriented programming. The blueprint can only set functions as protected, and variables can only be public or private. When variables are instance edited, it is troublesome without the protected modifier, because private variables cannot be instance edited in subclasses, and public variables will expose unnecessary permissions to external classes. The final solution is to make the original variable private, create a variable that is public and instanced editable, and in the constructor, assign the value of the instanced editable variable to the original private variable. Other than that, I am not dissatisfied with Blueprints's development efficiency.
As for the reasons for not using GAS and other frameworks, one is that many of these frameworks are based on C++, and the more important reason is that I want to make my own combat system framework from scratch so that I can learn the ideas and understand the relationship between related systems and functions.
Some recommended Unreal Engine plugins
Below are some of the plugins I use that have greatly improved my development efficiency. I recommend anyone with Blueprints as their primary development tool to try these plugins (search for their names in the UE marketplace):
Advanced Control Flow: Nodes like multi-branch can help you reduce a large number of branch nodes.
AutoSizeComments: Bundled with Blueprint Assist. See Blueprint Assist for details.
Blueprint Assist: HIGHLY HIGHLY RECOMMENDED! ! ! ! ! A must-have plugin for every blueprint developer! ! ! This plugin hugely increases the readability and maintainability of blueprints, turning your messy wiring into a clear and readable format. Without this plugin, I might even give up on blueprint development. Its improvement in development efficiency is completely worthy of its price, and I am very grateful to the developers of this plugin!
Debug Function Library: It provides encapsulation nodes for primitive debug functions such as formatted log and arrow drawing, as well as global debug switch control. It is a very convenient library. Unlike other plugins, the shortcut keys are set in the Project Settings, rather than Editor Settings. If you ignore that, it will unexpectedly conflict with the shortcut keys of other plugins. The only problem is that as a paid plugin, the insertion of the Debug node is intrusive to the blueprint, and it may cause issues when multiple people cooperate. You can try its Lite version, which is free.
MORT: Multiple-Objects Renaming Tool. This plugin helps rename asset files in batches. Very easy to use. I used to use it before.
Operation Extention for Blueprint Nodes: Includes some extra nodes for logic, operations, sorting, string processing, etc., as well as nice Make Literal nodes. Not required, but having these nodes is handy.
There are a few other plugins that I'm using, but I haven't concluded whether they're worth recommending. When there are more recommended plugins in the future, I will update them in the follow-up devlog. To be honest, installing development efficiency plugins for the engine is like installing mods for a game. It is really cool that you can customize the functions you need. I also want to learn UE editor plugin development in the future, and develop some plugins that I need but no one has done yet.
Development Process and Features
In fact, when I want to talk about this step, I don't have anything special to talk about at the moment... I mainly follow the following online course for the past two weeks (and take the time to select the above plugins!):
At present, I have learned lesson 14, Hit Detection. However, in the process of following along, I made some functional modifications or re-abstracts according to my own needs and used different third-party assets.
There are some critical changes. The first point is that I also added an animation notification to modify the character's direction according to the input to the combo of the attack moves, so that the player can adjust the direction of his attack during a combo. It makes a massive improvement in the control feel. The second point is to make the character turn to the attacked direction before playing the hit animation, so that the root motion of the hit animation can show the feeling of being "hit back". In the future, I plan to further optimize the hit performance, including multi-directional hit animation, some random additive animations, etc.
By the way, the current animations were not applied to UE5 Mannequin, because these animations are based on UE4 skeleton, and the use of joints is very non-standard, resulting in a relatively big issue retargeting to UE5 Mannequin. Therefore, they need corrections in the DCC tool.
The currently completed functions are:
Basic weapon function - draw/unequip (blend with locomotion)
Pickup Items
Combo / Locomotion animation of different weapons
Canceling of combo moves (including input cache, timing optimization of determine window)
Directional dodge
Hit detection and basic hit reactions
Sound effects, visual effects, and other look and feel improvements
Watch the video at the beginning of this article for more details.
Next step plan
Development:
The next step is to follow the online course, complete the basic combat system as soon as possible, and then start researching AI systems.
Design:
This part is still to be determined. After the complete framework is developed, specific combat skills and moves will be designed based on this limitation.
Characters:
So far, I'm communicating and collaborating with other artists. Some conceptual designs may be announced over time. It is expected to complete the character design of the player and BOSS within two weeks, and then start character modeling.
Environment:
There may also be some environment design work in these two weeks. However, because there is only one boss battle, the workload of the environment will not be much.
Animations:
This project is bound to use a lot of third-party animation assets. However, I also participate in a motion capture course this semester, and will probably plan to use motion capture data to produce assets.
Visual effects:
I should be using third-party assets a lot for this part, and I'm also trying to find out if there are VFX artists I can work with.
Audio:
An audio designer is willing to work on the project, although there may not be much work upfront. This part of the content will be discussed later.
Comments