Game Devlog #0 - Code: Shinigami
Updated: Jan 13
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.
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.
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).
By the way, I once challenged the Sigrun on Give Me God of War difficulty and succeeded, but it took me two nights...
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 天，祂抛弃了这个世界。从此，无人再知晓死后会发生什么。死神们也从世界上销声匿迹。
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)
Combo / Locomotion animation of different weapons
Canceling of combo moves (including input cache, timing optimization of determine window)
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
The next step is to follow the online course, complete the basic combat system as soon as possible, and then start researching AI systems.
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.
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.
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.
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.
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.
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.