Welcome to the Wolfire Blog! This is where we keep everyone up to date on our progress on Overgrowth and other new stuff. Be sure to subscribe to get the latest news! Also, be sure to check out the forums for even more up to date news - or get on IRC for up to the second updates.

Overgrowth Fighting System Design Doc, 1st Draft

Add Comment! By John Graham on February 16th, 2009

Hey guys, we've been talking a lot about our fighting system recently and I wanted to provide you with a first draft of what we're planning to do in Overgrowth. These are the ideas that materialized from discussions I had with David and Phillip a few days ago. Remember that what I mention here is not set in stone.

What is an attack?

An attack is an animation paired with an intended damage value to be dealt to another character if the attack is successful. An attack will be initiated by the release of the left click button. As was done in Lugaru, an attack will be directed towards the most dangerous enemy (the enemy who is going to strike the player first). David explained that auto-targeting should behave like Clint Eastwood in a western movie: Clint is able to clear a room of bad guys with his six-shooter by shooting the guys who can draw their guns fastest first. Stallone also used this method when he killed the river pirates at the beginning of Rambo IV. The type of attack and amount of damage done by the attack will be determined by context.

What is context?

Context is nothing more than the state of several variables. Here is what our initial definition of context will look like in this first draft:

Distance (from targeted enemy): d = either "close" or "ranged"
Preparation Time: t = amount of time that left click has been held (it's like the wind-up to an attack, raising the sword over your head)
Position: p = either standing still, accelerating to left of target, accelerating to right of target or crouching

So now we can say that your attack is a function of these variables.
Attack = F(d, t, p)

However, I've already mentioned that an attack is an animation component paired with an intended damage component. So we should really say that:
Attack = F(d, t, p) = (A(d, t, p), D(d, t, p))

How does the animation function turn context into an animation?

First let's clarify the effects of preparation time, t. Every attack animation will have a set of "key frames". Each set will include a "preparation frame" (for a punch this would be pulling back your fist) and an "attack frame" (sending your fist forward). The player's character will animate towards the "preparation frame" as soon as left-click is held. Then when left-click is released, the player's character will quickly animate towards the "attack frame". This gives players analogue control over the timing of their attacks. It should now be clear that preparation time only controls the play speed of an attack animation not which attack animation gets selected.

This leaves distance and position as the two contextual determinants of what attack animation will be selected. Distance shall have two valid attack states: close and ranged. Close attacks will be moves like knees, elbows, chokes, sweep kicks, gut punches and head butts. Ranged attacks will be moves like roundhouse kicks, haymaker punches, front kicks, the famous double punch from Lugaru.

If there are 4 major positions: standing, crouching, moving left across the enemy and moving right across the enemy then four positions times two distances equals eight animations to fill in. I have arbitrarily filled in the list so these moves are highly subject to change:

[close][moving left] -> gut punch from right to left with the right fist
[close][moving right] -> gut punch from left to right with the left fist
[close][standing] -> knee to the gut
[close][crouching] -> sweep kick
[ranged][moving left] -> roundhouse kick that knocks the enemy to the left
[ranged][moving right] -> roundhouse kick that knocks enemy to the right
[ranged][standing]-> double punch
[ranged][crouching] -> might not exist, maybe a cool break dance leaping attack

How does the damage function turn context into damage?

Each attack move will be paired with a maximum damage value. This maximum damage value will be moderated by a function dependent on preparation time. Here's the logic. A rushed strike is fast but weak. Conversely, if you are holding a sledge hammer behind your head, you not only stop gaining additional damage, you forfeit extra damage that could have been caused from one fluid wind-up and swing. Eventually your arms will get tired holding the hammer in the raised position. Thus it seems that there is a quick zone, an optimal zone, and a late zone for any strike. As a function of damage versus preparation time, the curve would probably look something like this:

Overgrowth, like Lugaru, will again use two kinds of damage: permanent damage and temporary damage. Both kinds of damage will be scaled proportionally to the preparation time function illustrated above. If at any time the permanent damage plus temporary damage done to a character, exceeds his health, he will either die or be unconscious.

Permanent damage stays forever. Temporary damage is based on the idea that 5 punches to the head in 5 seconds is more likely to knock someone out than 5 punches to the head spread evenly across 5 hours. Temporary damage represents the pain and trauma that a fighter can recover from over time.

Other Candidates for Context Variables

Weapons - As was the case in Lugaru, equiping a weapon will change some of a player's attack moves.
Species Type: Each species will have various special moves. I believe David has mentioned that rabbits will have specialized ranged combat with strong kicks whereas wolves will have specialized close quarters combat moves like biting with their razor sharp teeth!
Brutality: Overgrowth may include a binary brutality variable. This variable would have 2 states: lethal and non-lethal and would affect the brutality of the player's entire move set.
Other Positions: Ok so we covered 4 positions standing, crouching, moving right and moving left. However, what about the case where one or both characters are climbing and an attack is initiated? What if one or both characters are in the air? These will need their own treatments as well. The rabbit kick from Lugaru is a special case scenario.
No Enemies In Range: What happens when you push left click and there's no one to attack. Perhaps this will result in a taunt.
Detection: If the player has not been seen by an enemy they will probably have a modified attack move set at their disposal. Remember the stealth kills from Lugaru.
Right click: You will probably use right click to climb as well as to grab and block attacks. Additionally right click might serve to cancel initiated range attacks. There may be an over-arching theme of left-click being used to escalate fights and make them more violent while right click is more passive and involves more respect for the enemy's well being (think of Mr. Miyagi from karate kid).

What are your thoughts on this initial draft of Overgrowth fighting? Please share with us any games that you think have awesome fighting systems.