It's free to join Gamasutra!|Have a question? Want to know who runs this site? Here you go.|Targeting the game development market with your product or service? Get info on advertising here.||For altering your contact information or changing email subscription preferences.
Registered members can log in here.Back to the home page.

Search articles, jobs, buyers guide, and more.

Gamasutra
March 27 2008

Games Demystified: Super Mario Galaxy

arrowrightPage 1
arrowrightPage 2
arrowrightPage 3
arrowrightPage 4


Printer Friendly Version



Sign up for the Gamasutra Daily Newsletter!

Day 1 Studios : Core Technology Software Engineer [05.14.08]
ArenaNet : IT Systems Engineer [05.14.08]
ArenaNet : Database Programmer [05.14.08]
ArenaNet : Spawner/ Game Designer [05.14.08]
ArenaNet : Text/Voice/Video Chat Engineer [05.14.08]
ArenaNet : Server & Network Programmer [05.14.08]
ArenaNet : Tools & Engine Programmer [05.14.08]
ArenaNet : Environment Artist [05.14.08]
ArenaNet : Graphics Programmer [05.14.08]
ArenaNet : Character Artist [05.14.08]
ArenaNet : Senior Level Animator [05.14.08]
ArenaNet : Project Manager A [05.14.08]
Team Bondi Pty, Ltd : Lead Animator [05.14.08]
NCsoft : Network Programmer [05.14.08]
Jet Black Games : Art Director [05.13.08]

View All    Post A Job

Post Resume


Upcoming Events:
CoGames 2008: The 1st International Workshop on Collaborative Games
Irvine, United States
05.19.08

Vancouver International Games Summit
Vancouver, Canada
05.21.08

Game Institute Challenge #7
, United States
05.30.08

DevStation
, United Kingdom
06.10.08

Interfaces Conference
Troy, United States
06.14.08

Submit Event

View All


Games Demystified: Super Mario Galaxy

(Page 1/4)
Next arrow


Welcome to the first article in a new Gamasutra series called Games Demystified. In this series I'll be deconstructing games with unique or distinguishing mechanics that may have left some folks scratching their heads, including reproducing effects with code samples, examining -- just how did they accomplish that? The first game we'll be covering is Super Mario Galaxy for the Nintendo Wii.

Upon release, Super Mario Galaxy enchanted the gaming community because it allowed gamers to walk upside down and inside out -- all while feeling completely intuitive. Especially geeky message boards and blogs have lit up with people attempting to apply real-world physics equations for gravity to each of the game's tiny planetoids.

Obviously, real world physics have a place in today's games. However, they take a backseat to psychology when it comes to making real world gameplay. In reality, mass distorts the fabric of time and space causing gravity, the force that keeps us stuck to Earth.

People such as Isaac Newton have studied and derived a great deal about gravity, but no one actually knows the true mechanics behind the force. The important thing for the game is that we expect to get pulled toward planets -- and in fact, Mario does get pulled to each and every strangely shaped planetoid in the game.

Normally, gravity is calculated as a force between two objects that is directly proportional to the product of their respective masses and inversely proportional to the square of the distance from the objects' centers.

Force of Gravity = Gravitational Constant * ( ( mass1 * mass2 ) / distance2)

To simplify, gravity follows the inverse square law.

Intensity of Gravity = 1 / Distance2

This means that as an object moves closer to a planet, the gravity between them
increases dramatically due to the exponential effect applied by distance. Conversely, as an object moves away from a planet the gravity between them weakens very quickly.

Traditionally, the force of gravity is applied using the radius of the more massive body. For instance, if we were to calculate the gravity holding a person to Earth we'd plug the Earth's radius into the above equation. Additionally, if the mass is great enough to hold a person down, the celestial body will be round. This is where reality and Super Mario Galaxy differ.

In Galaxy, players are pulled toward each and every arbitrarily shaped planetoid they encounter. At this point all real world physics equations break down and tell us nothing about the gravity in the game, which as in most cases is a trick. Much like the magicians in The Prestige, game developers are always attempting to one up each other with new tricks. As we all know, Nintendo stole the show with its latest.

To accomplish this "trick", the developers use the surface normals of whatever planetoid Mario inhabits to keep him running and jumping happily along. This is how gravity is distributed through completely irregular bodies. A surface normal is a ray or unit vector that runs perpendicular to a plane.

In the illustration above we can see an arrow pointing up from a plane, the arrow represents the surface normal of a plane that points straight up. If we're using a Y-up right handed coordinate system, that normal would be a (0, 1, 0) which means it's not pointing along the x or z axes at all and that the full length of the vector is all in the up direction.

A unit vector always has a length of 1, which is then distributed amongst the x, y, and z directions. The longer one direction is the shorter the others must become.


(Page 1/4)
Next arrow


Comments


Soren Andersen 27 Mar 2008 at 9:36 am PST
Funny to see this article now. Three weeks ago we gave up on getting this to work in a HL2 Source mod. We ended up making a flat world instead (se my website link for the mod profile page on moddb.com)

Dan Mitchell 27 Mar 2008 at 10:43 am PST
Excellent article. I cannot wait till the next on Very informative, and educational. I love seeing articles like this, since it helps cut down time on dev time/ research thus allowing others sections of the dev project more time, allowing for even more innovation.

Giuseppe Navarria 27 Mar 2008 at 11:36 am PST
Nice article so far, maybe the tecnique you explained is a bit rought, for example movement will be smoother with normals interpolation, also a simple raycast will lead you in a sea of gameplay glitches...
PS Next time, set your example NOT at 640x480 fullscreen, or it will crash for users without a prehistoric monitor supporting that low resolution, I had to download the source and recompile it running on a window to see your stuff!

Marty Plumbo 27 Mar 2008 at 12:55 pm PST
I used a technique very similar to this in Shockwave3D a couple of years back to create my freeware game Microbop (http://gigaplay.com/microbop).

If it can work in Shockwave3D, it can work anywhere! ;-)


Robert Dowling 27 Mar 2008 at 2:24 pm PST
This was a great little read. I'm no engineer myself, but it may cut a little research time off my coding partner's schedule.

Andrew Williams 27 Mar 2008 at 10:57 pm PST
Great article, this looks like its going to be a great series. On a side note, If anyone is familiar with Sonic Adventure 2 battle, or just Sonic Adventure 2, the space levels in that game seemed to use a very similar technique to what we see in galaxy, however I do believe that to jump from planet to planet required a cannon of sorts. Anyway, great article, hope to see another soon.

paul grenfell 28 Mar 2008 at 4:47 am PST
Good article. Looking forwards to more in the series :)

Now check out Serious Sam's gravity handling. They did it using zones (defined in the level editor) and it works very well. It is also easier to implement well since you don't need to worry about any smoothing. I suspect that SMG may well have used a hybrid of these two approaches.

Jose Teran 5 May 2008 at 8:59 am PST
Great article; a nice approach for understanding the world of physics in games.

This will help us to acquire some more basic knowledge about gravity and it's use on games, which are very demanding right now.

Keep up the good work, and I want to read the next ones.







join | contact us | advertise | write | my profile
news | features | contract work | jobs | resumes | education | product guide | store