The return of the combat suggestion
It’s been a while since my last combat mega suggestion and I think it’s time for a refresh to end this trilogy. This one is a bit more specific and tries to present a (theoretically) fully functional combat system design.
I’ve had even more time playing melee combat oriented games like Mordhau, which released into early access last year. While it has some of the best, if not the best, first person melee combat in games, the general design would be very unfitting for Vintage Story, as it requires real time sword simulation, more accurate hitboxes, high tickrate lagfree servers and procedural animations and multiple metric tons of balancing to be somewhat serviceable.
But it has some ideas Vintage Story could really benefit from, like some other games like Mount and Blade, Dark Messiah and even Skyrim. Combined with some of my own ideas, I’ve come up with a melee combat system for Vintage Story that meets these requirements:
Melee combat rather than a short range first person shooter This is the biggest problem of Minecraft combat, the long attack range makes hitting other players really difficult, as they can easily move out of the cross-hair of the other player. The game becomes more about aiming and clicking at the right moment, resembling a FPS much more than a melee fighting game.
Enough depth to enable a large degree of player freedom Having a combat system with a high skill ceiling and many viable playstyles makes the combat much more replayable. A large amount of player freedom aims to archive this and have players evolve their own styles, emotionally connecting them with the gameplay.
Little complexity for easy use without need of a tutorial Complexity is the evil brother of depth. It would make combat much harder to learn, understand and even implement for the developers. Having combat be easy to learn is essential for the new player experience, as combat is a major part of the game.
Simple mouse based control without need for extra keybinds This is a good way to limit complexity and make it easy for new players to learn the system, not having to look up controls and being familiar to many other games.
Working with ray traced or cone based hit detection This keeps the implementation effort much lower than real sword swing and collision simulations would require, as well as having a much lower potential for issues (no potential inverse kinematics, etc.) and exploits and being much more performant.
Allowing for both engaging PvE and PvP combat The game allows for both PvP and more prominently PvE combat and the combat system should reflect that, being fun and providing depth at both levels of gameplay.
No turning combat into a waiting game for cooldowns Minecraft 1.9+ combat has annoying cooldowns, making the players unable to perform any action directly after attacking. This makes for boring unengaged combat.
First Person use doesn’t give players big disadvantages Vintage Story is primarily played in first person because of the focus on the building elements of the game, having the player switch perspectives for combat seems like a very bad idea and lowers the overall immersion dramatically. Therefore the combat should be designed primarily for first person use.
Combat system not majorly interfering with other game systems The combat system shouldn’t effect other game aspects much, like exploration, as to not make these aspects less fun or more frustrating, by for example limiting running or destroying blocks outside of combat with a stamina price.
More player skill based than character skill or gear based While gear progression and character skill should have a significant impact on combat, as to allow for more PvE progression, the most important factor for combat should be player skill, to allow for an engaging PvP experience and progression of the players skills.
Effective reaction for every action and reaction This is a core piece of the combat design, the player should be able to react to any combat action and if doing so successfully forcing a new reaction from the opponent. Ideally there would be more than one possible reactions, to allow for player freedom. The goal is to never have the player in a situation where he is unable to do something helpful, making the game never feel unfair.
Easy readability to allow for reaction based actions To be able to react to an action, the player has to be able to read which action he has to react to. The first person perspective and limited animation system can make this hard from just animations alone, requiring very expressive and clear animations and sound effects.
Playability with higher latency and lag While the combat gameplay benefits from a lower latency, the combat system shouldn’t break at higher latency and therefore shouldn’t rely solely on precise player inputs and reactions and keep being playable even with lag.
Stagger
There are basically three types of actions in the system, the offensive attack triggered by the left mouse button, the defensive block triggered by the right mouse button and the evasive dodge triggered by the movement keys. Fitting those actions, there are also three types of stagger, fitting each of the actions.
Attack stagger hinders combatants to attack for a variable duration.
Block stagger hinders combatants to block for a variable duration.
Movement stagger hinders combatants to move, but not to dodge.
These staggers are mainly used as a punishment for those effected, very but short staggers are also frequently used as a way to limit spamming certain actions and allow for more dynamic combat. A key thing to note is, that the player should almost never be effected by all three types of stagger at the same time and only very rarely by two, as to not limit the players actions completely.
To prevent the player being “stagger locked”, dodging can always be performed to break out of a stagger, providing the player has enough stamina. If he doesn’t, he screwed up one last time.
During the stagger, distinct stagger animations should be played, to convey which type of stagger the player or his opponent is effected by.
Stamina
Speaking of it, stamina is also a major aspect of the combat system. It’s a limiter for the player’s defensive and evasive actions. The player has a large pool of stamina, which could almost be seen as a second health bar and certainly is that important, often quickly resulting in the death of the player if empty. Stamina regenerates over time. Most actions in combat consume an amount of stamina to balance them and punish players spamming some actions, while not explicitly preventing players to do so like with stagger. However, while many things consume stamina, only three actions are prevented by having not enough stamina for them: Blocking, dodging and running.
Combatants can’t block if completely out of stamina, making him very venerable.
Combatants can’t dodge if the stamina remaining is smaller than the cost for doing so.
Combatants can’t sprint if completely out of stamina, making them unable to flee from combat.
While all actions effecting stamina will be outlined later in this suggestion, there are two existing actions interacting with stamina, sprinting and jumping. Jumping just prevents stamina regeneration for a short duration. Sprinting is only possible when not out of stamina and prevents stamina regeneration, but only consumes stamina if stamina is below two thirds of the total stamina. This makes stamina normally not limit sprinting, only if the player was already engaging in combat.
This makes stamina only have a relevance in combat and not limit the player outside combat. Stamina is required for not having to result to more limiting ways of preventing players spamming certain actions. Without some way to punish spamming, the PvP combat would result in the same problems the Mount and Blade combat (i.e. feint spam) has, which resembles this system in a lot of ways.
The attack
The most important part of the combat system is always the attack. The player can attack simply by pressing the left mouse button. The player won’t regenerate stamina while attacking. The attack can be split into six distinct phases:
The start By pressing the left mouse button the player begins his attack. The movement direction of the player during this decides the type of attack the player launches:
If the player moves forward, he will launch an overhead attack. The overhead attack is the slowest attack and has also the least reach, but does the most damage. For hit detection it uses a vertical cone, making it easy to dodge by stepping sideways. If the player moves backwards or sideways and backwards at the same time, he will perform a stab attack. The stab attack has the most reach and is the fastest, but does the least damage. For hit detection is uses a ray cast, making it the hardest to aim and easiest to dodge.
If the player moves sideways or forward and sideways at the same time, he will perform a swing attack. The swing attack strikes a middle-ground of reach, speed and damage. For hit detection it uses a horizontal cone, making it the hardest to dodge. The direction of the swing depends on the sideways movement of the player, moving to the left will cause the attack to come from the right and moving to the right will cause the attack to come from the left. The swing direction is only important for attack blocking, which is described in the third attack phase. If the player stood still during the attack, the last movement direction will be used to determine the attack direction. During the attack, the player will be slowed down when moving in any direction other than the direction starting the attack, making movement more important.
The wind-up As long as the player keeps holding the left mouse button, the attack won’t launch, only the wind-up animation will be played. During the animation, the player slowly looses a bit of stamina. If the animation is finished, the player will hold in the last position of the animation until the mouse is released. The player can release the mouse at any time, even during the animation, to immediately launch the attack into the swing phase. The further the animation progressed, the more damage the attack will do.
If the player just tapped the left mouse button a very small wind-up animation will be played and then continue into the swing phase. During the wind-up phase, the attack can be cancelled by blocking.
The swing The swing phase marks the last phase of the attack the player has any control over it. When the swing phase starts, the player looses an amount of stamina, dependent on the weapon used to attack. A swing animation is played and the attack will progress to the next phase when it has ended. If the player presses the left mouse button during this phase, the attack will be cancelled and he will immediately start a new attack (returning to the start phase), but gets block staggered for a small amount of time, meaning the player can’t cancel his new attack by blocking if he doesn’t wind it up for some time. This is called morphing. If an attack hits the player during this phase and it has the mirrored direction of this attack (i.e. overhead when overhead, stab when stab, right swing when left swing, left swing when right swing), it will be attack blocked, meaning it won’t do any damage and let this attack continue. During the swing phase, the attack can be cancelled by blocking. This is called fainting.
The commit The commit phase marks the phase the attack can only be cancelled by the player getting attack staggered, by for example being hit by an attack himself. The phase starts by the player making a short scream, making it clear to his opponent, that he can’t cancel his attack. The players camera is also locked during this phase, meaning he can’t aim his attack in a different direction. However the player can still move. The commit animation is played and when it ends the attack transitions into the next phase.
The hit detection The hit detection is ran. When the player has successfully hit an opponent, that opponent gets movement staggered for a tiny amount of time. If he wasn’t blocking he also gets attack staggered, causing any attacks of the opponent to cancel. And well, the opponent gets damaged.
The recovery The recovery is the last phase of an attack and plays right after the hit detection. The player gets attack staggered for the duration of the recovery, but the player can cancel the recovery by blocking (however not cancelling the attack stagger). This phase can be of really different length and animation, depending on how the last phase went
If the attack misses, a long animation is played where the sword continues travelling and then hangs in the air for a bit. If the attack hit an opponent who wasn’t defending, a short animation is played where the weapon first stops for a small while on the opponent (hit-stop) and then goes through the opponent. The hit-stop conveys that something has actually been hit and the player isn’t just swinging through the air. And a nice meaty hit sound plays. If the attack hits a block, a medium length animation plays where the sword is stopped and lingers at the shield for a while. A fitting sound is played.
If the attack hits a parry, the a medium length animation plays having the sword bounce of the parry. A fitting sound is played.
If the attack hits an attack block, a very short animation where the sword is bounced of the enemy sword is played and a metal on metal grinding sound is played, maybe some nice spark particles get also in the mix.
The sound and animation of each should be very distinct, to make it immediately obvious to what happened to preserve readability.
In summary:
Directional attacks (overhead, stab, right swing, left swing)
Holding the attack for increased damage (wind-up)
Cancelling attacks with blocking (feinting)
Changing attack direction by restarting attacks (morphing)
Directional blocking with attacks (attack blocking)
After you scream, you lose control over the attack (commit)
Attacks getting cancelled when being hit by one (hit detection)
Different animations after the attack hit or missed (recovery)
The block
Blocking is much simpler than attacking, just hold right click while not being out of stamina to hold your weapon or shield in front of you. Players can block as long as they want and when they release the right mouse button the block immediately stops. Stamina however doesn’t regenerate while blocking, but blocking does actively deplete a small amount of stamina. When out of stamina, the block is cancelled. This makes hiding behind a block extremely ineffective, it’s best to block only when about to be hit.
When an attack hits the front of a blocking player, the blocking players health doesn’t get damaged. However the blocking players stamina gets damaged depending on the health damage the player would have endured.
After lowering a block the player get block staggered for a while and thus can’t block again immediately after and stamina won’t start regenerating for that duration. Up to two seconds after the block has been hit by an enemy attack, this drawback is not active, so the player can block right again after lowering his block and stamina regeneration will also start immediately.
If the player presses the left mouse button while blocking he will perform a parry. A parry is an active attempt to deflect an enemy attack. A short parry animation gets played and if an attack hits the player during this animation, the attack will be blocked without giving any stamina damage to the parrying player. After the parry animation ends, the player will get block staggered for a short while if no attack hit the parry, forcing the player out of blocking. This makes parrying a dangerous but rewarding action, if timed properly.
In summary:
Holding a block costs a small amount of stamina
Attacks hitting a block cause stamina instead of health damage
Can’t block again directly after blocking
Parry negates the stamina damage from blocking but must be timed
The dodge
Dodging is a simple and effective way to, well, dodge enemy attacks. The dodge costs a medium amount of stamina and the player won’t regenerate stamina during the animation and a short while after. Just tapping the sprint key while having enough stamina to cover the cost will cause a dodge in the current walking direction, without changing the looking direction. A short dodge animation gets played and the player quickly moves a few meters in the walking direction, smoothly moving over up to one block high ledges.
While dodging is a very effective means of evading attacks and leaves the opponent in a venerable position after having missed an attack, being in a long recovery animation, it also leaves the player venerable right after dodging, suffering a short block stagger and very short movement stagger.
Combined with the comparatively high stamina cost, this makes dodging a supporting means of defense to be used in conjunction with smart movement and positioning in PvP, but a very important defensive measure in PvE.
The gear
With an armor system now in game, the system can be easily adapted for this combat suggestion. With active blocking, the effectiveness of armor needs to be reduced a bit, to not make fights last centuries. Furthermore, the move speed penalty of heavy armor should be reduced for significantly for balance and comfort reasons, adding new negative modifiers to heavy armor like reducing stamina pool and raising stamina costs for certain actions, like dodging.
Shields should be introduced, lowering the stamina consumption from blocking, but raising the cost of other actions like attacking or dodging. Spears should also only block, when the player has a shield equipped, retaining the throwing ability otherwise, giving them a very unique playstyle focused around evasion and attack blocking.
Stamina modifiers could be added in many places, however they shall only change stamina costs and the players stamina amount, not the speed at which stamina regenerates, as that would be too big of an advantage or disadvantage.
Stamina costs act as a new balancing factor and would be applied to any weapon and also to drawing a bow or throwing stuff like rocks and spears.
The balance
I did not add any numbers to stamina costs or action/effect times on purpose, but some wording describing the relative length of effects, because providing hard numbers isn’t exactly useful, as only extensive testing will find the right numbers.
But generally speaking, offensive and defensive actions should be somewhat equal in stamina costs, to not make super aggressive or super defensive playstyles superior, although giving offensive actions slightly lower costs than defensive actions seems like a good idea to give incentive for active offensive playing.
Overall, the block and attack staggers are setup in such a way, that the attacking combatant and defending combatant are always switching, as there is a block stagger after blocking and an attack stagger after attacking.
Conclusion
I hope his system is easy to understand and fun. Other than that, replacing the red flashing when landing a hit with a proper hit animation would be a wise decision. I invite anyone to provide any kind of feedback on this. Did you understand the system, do you dislike is, think it's too complex and complicated or maybe too shallow or do you think it's just total and utter garbage? Every type of (hopefully constructive) feedback is welcome!