Monday, September 17, 2012

A look into Super Smash Brothers Brawl’s Engine


Super Smash Bros. Brawl may have been released 4 years ago, but that doesn’t mean there isn’t something that can be learned from it. Knowledge from classes from the previous year have made me realize just how some of the systems in Super Smash Bros. Brawl now work. I won’t have code or anything but I do have tons of experience with this game so some of this is speculation but I do have some proof too!

Physics & Gameplay

For this entry in the series, they were able to get the Havok engine into their game. But Super Smash Bros has always dealt with physics in it's own way and having Havok only helps. With Havok the game deals with physics in ways that don’t deter from the core gameplay the series is known for and adds several things that make the game more dynamic then it used to be. 

A brief overview of how the gameplay works is that characters are knocked off stage, flying further the more damage they receive until they are KO’d offstage. The distance someone flies away is based on several factors...

1) The character’s weight – The lighter the character the farther they fly when hit. Heavier doesn’t fly as far. In general heavier character are slower and lighter are faster.

Mario is considered average weight while Bowser is the heaviest character (Weight values found here)


2) The floatiness of the character – Some characters are inheritly floatier, meaning they will fly up higher when hit then someone who is the same weight but has a lower floatiness. In general all characters are floatier in this game then they were in Melee. You also cannot fall as fast as when you're floaty.

These two have the same weight but despite that Samus falls much slower and is easier to knock farther vertically (Fall rank found here)

3) The amount of force in the attack – Some attacks will send players flying farther compared to other attacks. Some attacks from items like the “homerun bat” have enough force to usually knock an opponent off to the side regardless of weight or their damage.

Smash attacks have some of the most force in a character's movelist usually


4) Damage Percentage – Determines how far a character will fly from an attack. This is NOT a direct ratio of distance however. A character at 100% damage will not fly 100 times farther than a character at 1% damage. Nor is it true that You will fly twice as far at 200% damage compared to 100%. Rather than linear ratio of distance, the game uses an exponential formula to calculate how far an opponent will fly. 100% compared to 50% sends an opponent flying much farther away and that distance also depends on the force exerted. The exact formula  for this is not known (By me).

Link flies farther when hit since his damage is higher

5) Stale Moves – This is a more minor addition to how the game handles force of attacks. Basically the game keeps a counter of how many times you have used a particular move. For example, Mario’s forward Smash attack, which is very good for KO’ing. If you have only used that move, it would check the counter based on how times you used that move in a row and hit with it, compared to other moves you have used to it with recently. The amount of damage and force that the move would apply would be reduced based on this counter. Therefore the game endorses using a variety of moves rather than just spamming one single move. Basically if one person uses the same move too much, the force they can apply to knock an opponent away is reduced.

6) Directional Influence – Not known to many but this is a way to influence the direction you’re flying when hit. By mashing the control stick in the direction you want when hit, you can reduce or increase flight distance.


Havok Additions
Besides these basics, Havok applies some additions to the series as well, these are…

A. Collision of characters – When an opponent is knocked away, if they pass through another character on screen, they will collide into them. The person who was flying will have their flight distance reduced based on weight of the character you collided with. Usually this results in a significantly reduced flight distance upon hitting another person. For the person that is hit, they will fly a distance based on weight and force the other character is experiencing from flight. A set modifier seems to be added in order to reduce the distance the person hit is, since in all cases this person seems to only get knocked back a short distance. The only way you can be KO’d like this is if you’re already near the edge of the stage.

B. Weight to items – Some items are put on wheels such as crates. These items typically are given a large weight from the start and they can begin to move if they are on an inclined surface. If they happen to hit anyone on the way, the speed the crate is at will determine the force the opponent is sent flying. For these items the weight seems to be rather significant as it’s been shown to KO many characters or set them a large distance if at a high percentage. Items can be influenced by the wind as well to send them into characters as well.
Crates in Smash Bros now have weights

There are other additions that Havok or the base Smash Bros system uses for other things involving gravity that aren’t easy to tell apart. But they are in the game one way or another.

Animation & Skeletons

The game uses a skeletal animation system, this can be observed from watching Brawl moveset hacks. In these videos provide cool insight into how the skeleton is assigned to the mesh of a character. The mesh is attached to the skeleton and assigned the correct weight values to coincidence with the joints of the skeleton. Each model for a character would normally be assigned appropriate weights that fit with their particular skeleton. Once you start assigning different movesets to different characters, its basically trying to use a different set of animations which belong to the character who's moveset you're trying to mimic.

A video of Brawl Hackers switching movesets of characters Part 1

For example if we have Mario and we try to give him Luigi’s moveset, they may look similar but Luigi’s skeleton is not the same, with different proportions and with his mesh assigned to weigh correctly with the skeleton. Mario will therefore appear distorted since now he is automatically taking Luigi’s skeleton, but still using his own mesh. He appears to be stretched and is also using Luigi’s animations now. Also, certain moves that Mario does applies automatic particle effects which will still appear despite having Luigi’s skeleton. This is because those particle are still assigned to the character of Mario and since we are identifying him as still being Mario, he will get to have those fire effects in his Smash Attacks.

Part 2 of the moveset swaps. Notice how no one's meshes are breaking. It appears they all have a similar skeleton structure.


There are issues with missing animations however. If Mario was to use his down+B, which brings out his FLUDD water tank, Mario simply spawns the tool on his back, there is no animation (0:50 of the video). Luigi’s moveset however requires an animation to do the down+B attack (Luigi spins around). Since there is no animation, Mario will simply go into a T-Pose since it’s trying to reference an animation that does not exist in Mario’s data and will become unable to move due. If Mario had a normal down+B move, he would be able to reference an animation since it would likely fill that slot in Mario’s data. Sometimes the animation can break anyways even if they do have an animation in that slot, so its hard to say for certain why that is since moveset hacking is, finicky.

Final Part of moveset swaps

For the most part having a character and giving them someone else’s skeleton seems to work. Since everyone seems to be able to use each other skeletons, we can come to the conclusion that their skeletons all in fact have the same hierarchy and number of nodes. The only difference is the position of those nodes which causes the weird distortions we see in characters (such as Mario's face being weird in the first video). The only problem is a few missing or broken animations due to characters having different properties for their attacks which cause the T-Pose to activate. It's cool that they were able to make the right number of nodes that would fit all their variety of characters, from Bowser to a more humanoid character like Mario. It becomes scary when one gives a little character like Pikachu, someone big like Ganondorf’s moveset…

Pikachu becomes a creature of pure terror

Other systems

I won’t go too far into how the particle system works because I don’t really have too much information on the rendering system of the game. So I won’t spend time just purely speculating without any actual stuff to go on. All you need to know is that the game looks very nice for a Wii game, character models and particle effects.

Conclusion

That pretty much raps up this post. Thanks to moveset swapping I was able to look in detail about how the animations in the game worked as well as the meshes and skeletal animation system. Physics on the other hand were found with just years of experience with the game as well testing and observation. Thanks to Game Dev now I can see this game in a different light!

No comments:

Post a Comment