The Punisher: No Mercy

At the end of 2007 a friend of mine contacted me about a job. He knew that I’m quite familiar with the Unreal engine and his company was looking for such a person. After a few meetings we reached an agreement so I started working on the Punisher game at the beginning of 2008.

The project started out as a relatively short, 9 months long development with XBLA and PSN as target platforms. We were given total freedom for the game design, so we tried to come up with simple yet fun base ideas. Considering the time constraints and the small team, we ended up with two design pitches: a 2.5D side-scroller like Shadow Complex and a top-down shooter like Chaos Engine.

Punisher screenshot with the hero The Punisher The Punisher: No Mercy Shot08 150x150

After some consideration the management rejected those designs and asked for an arena style first person shooter.

Since the team, especially the artists and level designers had no experience with FPS games or current generation graphics, I started giving lessons: modular level design, normal maps, texture baking, shaders and the like.

Learning the tricks, bugs and workarounds of UnrealEd were not easy for the guys but paid off quickly: the artists and LDs were soon checking assets and map layouts ingame, long before we had any kind of game mechanics running.

The programming side of things suffered a huge delay at the beginning: during the first 6 months of the development both coders were still debugging their previous project. This created the unfortunate situation where the level designers and artists were working on maps which no one could play on. There were no enemies, no multiplayer, no weapons only a basic single player pawn with a gravity gun.

Punisher screenshot with rocket launcher The Punisher The Punisher: No Mercy Shot02 150x150

We needed to produce some kind of a multiplayer experience early on so we faked it: I made invisible, moving platforms carrying ragdolls around the map: those were the enemies. The physics driven figures reacted to the gravity gun’s push effect thus indicated hits. By adjusting the speed of the “enemies” and the player we were able to define movement and rotation parameters which worked well with analog stick based controls.

Then we added limited shooting functionality: each fake enemy had an “gun”, a spawner entity spewing very heavy cannon balls which killed the player on touch. The ragdolls were spinning around randomly throwing deadly projectiles all over the place, the balls were bouncing and rolling around creating a minefield on the floor. It was true test of skill and made us, native PC gamers get used to the PS3 controller.

Punisher screenshot with scope The Punisher The Punisher: No Mercy Shot05 150x150

The unexpected delays and the chosen, much more demanding game genre made it impossible to deliver the game in 9 months so the deadline was extended and the XBLA platform was dropped.

Eventually, after 16 months The Punisher: No Mercy was shipped on PSN.

In spite of the less than ideal circumstances, I really enjoyed my time there because I got the chance to work on almost all aspects of the game.

I helped the team to learn the do-s and don’t-s, the dirty tricks and the elegant workarounds in the Unreal engine. I can’t say that I made everyone fall in love with it but I did see the appreciation of the system towards the end.

I told the artists everything I knew about normal maps, specular maps, parallax mapping and the like. Our lead artist picked up things very quickly and in a few months I was the one learning 3DS Max tricks from him.

Another task I had was the design of our weapon, effect and player subsystems. At the beginning I had more insight to the inner workings of the engine than the programmers so I set up the class hierarchy, defined variable names and functions directly affecting the artists and level designers. This was integral part of the workflow design where I tried to make easy to use yet flexible asset pipelines and LD procedures.

Punisher screenshot with furnace The Punisher The Punisher: No Mercy Shot01 150x150

To help out the only other level designer in the team, I made half of the 8 maps:

Building a level layout for a game which didn’t exist at the time was not easy but the constant adjustments and start-overs allowed me to show several tricks and best practices to my fellow LD.

I had the most fun while creating the special effects and shaders.

The well defined building blocks made the particle and material systems feel like puzzle games: how could I create the target effect using the least number of particles/shader instructions within the given time frame?

I got my hands dirty with the animation system when I made the first few iterations of the animation tree.

Along the way I also programmed a few utility scripts in LUA and uscript. They were mostly for level design and asset import tasks: baking physics driven entities, an image pre-processor, external level design tools (snapping, mass property adjustment) and the like.

The art department was swamped with work most of the time so I helped them out.

When I needed a new mesh for one of my maps I often modeled it with proper dimensions and name then started using it on the level. When the artist got the time to finish the object then he just reimported the asset and checked it ingame.
I also fully modeled, textured and baked one of the weapons, using modo 302.

Several models The Punisher The Punisher: No Mercy Models 150x150
Mine model The Punisher The Punisher: No Mercy GhostMine 150x150

The “dynamic comic strip” sort of cutscenes were based on original Marvel artwork. By using Photoshop, purpose built materials and UnrealEd’s matinee tools I added special effects and synced the voice actor performances.

Punisher screenshot with comic strip The Punisher The Punisher: No Mercy Shot06 150x150

So I worked on many different aspects of the development but maybe the most interesting part was acting as a mediator between different disciplines. I really enjoyed examining problems from the coder’s – artist’s – game designer’s – level designer’s points of view, having heated debates and finally finding a common ground.

All in all I had a great time and learned much during the development.