Inspired by Umihara Kawase, I set
about creating a 3D 3rd person grappling hook game. The idea was that you played a cat
burglar-type in a SF world. Each mission
was designed to be playable in several ways, ie you could sneak in and steal
the target item and if you were really good, you could sneak out without being
detected. However, taking the loot would
likely set off alarms and you’d have to fight your way out. Or if you preferred, you could try fighting
your way in and out…
The player experience was designed
to be as nerve-wracking as possible: the player was allowed as much practice as
they wanted in a simulator environment based on incomplete knowledge (one idea
was to allow recon missions to fill in pieces of the mission simulator), but
only one shot at actually performing the mission for real, with large meta-game
rewards/penalties.
The core dynamics were about using a
physics-based grappling hook (as opposed to the shoot-zip or stiff fake-swinging types)to move around and
manipulate a physics-based environment. The
stretchy rope enabled the excellent and deep player-skill rubber-banding
movements from Umihara Kawase, with some additions like slip-walls where the
grappling hook could freely slide in one direction. But more than just a fun method of getting
around, the grappling hook’s stretchy rope provided an indirect yet
high-fidelity way to interact with objects and enemies - the player could reel
in/let out rope, or move themselves to change the rope's tension. You could shoot out and attach to the foot of
guard standing on a ledge, then reel-in while moving back to yank him off the
edge. Or you could gently drag a crate
of something fragile (and likely explosive) to the edge of a shaftway, then
gently lower it to the bottom.
There were a number of tools that
were addend on top of the vanilla grappling hook. In order to fight the entropy of all objects
ending up at the bottom of a level, you could attach rapid-inflate balloons to
an item (or enemy). The player could also shoot a spring, one end
at a time, allowing you to attach any two things in sight, like an enemy to a
bomb crate. And the general purpose
“pipe tool” ended up being a flamethrower, which was useful for cutting springs,
detonating bombs, and torturing bound-up (by springs) enemies into dropping
keycards.
The analog stick directly controlled the camera orientation (ie not the angular velocity) in a hemisphere around the player. It mapped to the front hemi-sphere,
though I later experimented with a top hemi-sphere for a shooting/platform game.
Although the game worked, it had distinct
feel of sub-optimal design and in the end I never solved the camera and control
issues to make the game workable for beginners. We could have paved over that with a slow introduction to the tools and
lots of training, but I would have preferred a better control scheme.
Klepto had my first general-purpose
dynamics sim. It explicitly integrated
the rigid body system, and directly solved the LCP for collision and
contact. Collisions were all union of
convex hulls and spheres. The rope
physics were a partioned dynamics sim, done as a semi-implicit penalty system.
The animation system used expression-based
layered/masked animation system that blended many animations to construct fake
IK solutions, such as the player’s aiming, and slip-free walking/running.Simple secondary physics models drove some of
these IK systems, used for such things as the player’s legs when swinging and
simple enemy ragdolls.
Klepto never shipped, but it was a
great testbed for design and technology.
Montezuma's Return (PC) 1995-1998
A first-person platform game. I fought very hard to make it 3rd
person but failed (when SM64 came out, it was somewhat bittersweet). But Gary and I did our best to make it work –
3D animated player arms and legs helped to ground the player, and an active
camera to made the combat/special moves/rope climbing/dizzy knock/etc feel more
physical. The jumping had both short
blind hops and bumper-driven huge tosses, which caused the camera to auto-pitch
down so you could aim your feet for the landing/next bumper. I made a wacky hierarchical parametric system
for controlling movable parts of the environment and we leveraged that into
some pretty insane platforming action. My favorite parts are, of course, the extremely hard bonus mini-levels
that I created.
My first commercial 3D engine was
rather odd as I inherited already-made game levels built around the rather
interesting constraints of the previous engine - basically huge polygons that needed relatively high-quality dynamic lighting. For environments, the renderer dynamically computed light map on a screen-aligned
8 pixel x 8 pixel grid. The texture mapper
would do a perspective divide every 8 pixels and each span would do a
shorter sync-in and sync-out span to align into and out of the light map grid. This worked great for large foreground polys,
but in the distance it would vastly under sample the lighting, and even worse
it would sample off the triangle. The 3dfx
version worked similarly, with software-rendered screen-space light maps
(though now in color). For the Voodoo2 version, we put in embossed bump
maps, which looked quite cool with all the dynamic lights. The character animation was quat interpolation
based and crazily drove the physics of the enemies punch/kicking the
player. Characters had collision spheres
on major bones, and those were considered infinite mass for fist/feet
bones. The rest of object-object physics
was a simple sphere vs sphere penalty system that worked stably enough. The object vs environment physics had a
brute-force solution to the simple LCP of an infinite MoI sphere vs a set of
infinite-mass 6 DOF environment contacts. It worked great, felt smooth, and was exploited in later levels to
squeeze the player between two moving surfaces, shooting him out at a high
velocity.