Phantom, the Ghost
Who Walks and Mandrake, Shadow of the Vehme
My first commercial projects - two
games for
Gameboy Advance Platform. I list them together because they share
engine and graphics style. Phantom, however was a fast paced action
adventure game, while Mandrake had many RPG elements.
|
At that time I worked at
Italian company 7th
Sense. Both games have been created from the scratch in about 8 months.
Unfortunately, just before the release our publisher got into some
financial troubles and canned both projects. Still think it's shame
because they were really something at that time. On the left you can
see example of chained barrel explosion. |
I was responsible for most of
the game related
code. This meant everything except the UI and low-level engine. Things
I was most proud of were optimized A* path-finding system and scripting
language. We allowed about 10 NPCs at the same time and it worked
smoothly at ~16MHz machine. The scripting system was really simple
assembler-like, event-based, but it allowed our designers to create
things I'd never thought about (my favorite were Indiana Jones style
stone chasing the hero in one of the dungeons and boss fights). |
|
|
Mandrake was a little bit more
complicated
because of his unique spells (but he couldn't use a machine gun :). He
could, for example, summon his astral body and sneak around in this
form, walk through the walls etc. I left 7th Sense in January of 2003,
but I still have fond memories of the company, it was a great and very
gentle start in the industry (almost no overtime! \o/). |
WW II - Pacific Heroes
At the beginning of
2003 I returned to Poland
and after 5 months joined some of my demoscene friends in Warsaw based
company - City Interactive. I worked on two projects there - WWII -
Pacific Heroes and Project Freedom.
WWII - PH was rather simple
(done in 4-5 months) arcade game. I wasn't a member of game team, but
it
uses parts of my engine. |
|
|
I was responsible for game
object system,
collision system, AI, parts of user interface (radars, HUDs etc). I
co-authored a system for defining and controlling missions (in Lua,
based on coroutines). |
Project Freedom (Starmageddon 2)
My second project at City, more
complicated one.
Initially, it was supposed to be a space RTS (think Homeworld), but it
morphed to space shooter.
PF uses modified
and enhanced WWII-PH engine. Things
I spent most time on were collision system and group behaviors.
Collision system had to handle potential collisions between thousands
of objects in 3D space (you could collide with any object in space and
push it, so that it collided with another). I experimented with various
algorithms and narrowed choice to loose octrees and sweep-and-prune
(final implementation uses loose octrees). |
|
|
For realistic squad behaviors
I employed boids
algorithm (as described by Craig Reynolds). I had to modify it so that
ships move in organized formations rather than as flock of birds. Other
than guarding it's formation position each ship had some typical goals
that could override the basic ones like chasing opponents, avoiding
obstacles and so on. For this game I also had to implement AI for other
kinds of objects like ground turrets and mech walkers (they used
flocking algorithms as well). |
The Witcher
In January 2004 I moved to another
Polish company - CD Projekt Red Studio (now known as CD Projekt Red) to
join The Witcher
team. It's the biggest game project in Poland - a RPG game based on the
stories of the most famous Polish fantasy writer - Andrzej Sapkowski.
The Witcher uses heavily
modified version of
Aurora engine by Bioware (used in Neverwinter Nights). We rewrote most
of the components, I think only sound system wrapper, scripting
language (Neverwinter Script) and parts of resource manager were
untouched. (early shot on the right) |
|
|
Other notable 3rd part
libraries include
SpeedTree for vegetation, Karma for physics (ragdolls, rigid bodies)
and Miles Sound System. I started as tools programmer and my biggest
tasks were porting Aurora Toolset to DirectX and coding Cutscene
Editor. Currently we're creating our own toolset chain in Microsoft
Visual C++ (Aurora Toolset is in Borland C++ Builder). |
Later my role changed to
3D/gameplay programmer.
I implemented dynamic soft shadows system, volumetric fog,
normal/parallax mapping, optimized light manager, resource
caching and
visibility determination system based on portals, anti-portals and BSP
trees.
In the "spare" time I worked on low-level/system functionality like
crash reporters, stack tracers, memory management. |
|
|
Since May 2005 I've been
working as a Lead Gameplay Programmer. My additional
responsibilities include leading team of 4
other programmers and providing most of the gameplay related solutions.
Recently I've been working on a new AI system (mix between scripted and
emergent AI).
The Witcher has been released in November 2007 and turned out to be a
success, especially for a game done with relatively unexperienced team.
We've collected pretty much 100% of PC RPG Awards (usually beating Mask
of the Betrayer by Obsidian veterans), some general RPG (beating Mass
Effect) and even some PC Exclusive GOTY of 2007 (usually in front of
Crysis). All in all - great feeling after 4 years of hard
work.
Proud of my team and personally I'm satisfied with the 'living cities'
system I implemented which has been generally praised in reviews. |
Some of the most notable
awards we've gotten so
far:
|
|
|
|
|
Gamespy's PC RPG of the
Year |
IGN's Best PC RPG/Best
Original Score |
Voodoo Extreme's Best PC
Exclusive
Game, Best Computer RPG |
GameBanshee's RPG of the
Year |
|
|
|
|
Gaming Heaven Game of
the Year |
RPGamer PC RPG
of the Year |
Gamespot Readers' Choice
Winner - Best RPG |
PC Gamer - RPG of the
Year |
|
After some weeks of
regeneration we started to
working on Enhanced Edition of The Witcher. I spent 5 months on this
and it was rather hard work, mainly fixing some obscure Heisenbugs
happening once in a blue moon and trying to take memory management
under control. Thanks to my MemTracer
tool I managed to cut down memory consumption by 20%, improve usage
patterns and remove some nasty leaks. On top of that I optimized our
loading process, speeding it up by ~80% and reducing size of loaded
data (second fix was one of the most awaited and crucial points of EE,
I implemented basic version in the very first patch and sped it up even
more later).
In 2010, IGN selected The Witcher as one of the 25 best modern PC games
(last decade give or take), in big part thanks to EE. In 2013, Eurogamer chose The Witcher as one of the top 50 games of the generation (~8y). |
Bourne + Syndicate (Starbreeze Studios)
Sadly,
cannot give much details. I was mostly working on Bourne
project, but did some engine tweaks/fixes/optimizations as well.
Hopefully
will be able to put some screen shots here later.
[Update]
Sadly, Bourne game has been canceled in April 2010, before any
official media has been released. You have only my word that it could
be a really cool game.
Some of my modification/improvements/optimizations to the
engine have been used in Syndicate
game. It's been especially challenging trying to speed up a very mature
engine that's been through several optimization rounds over the years.
I still managed to squeeze some more blood from the stone, speeding up
the main object update loop by ~20% and moving raycasting to the
background trhead. I ported MemTracer to PS3, which
made my job of making sure game fits in the PS3/X360 memory much easier.
The other thing I did for Bourne that has been reused was the
"human airbag/body surfing" sequence (remember the movie)? You can see
it roughly
around 6:30 mark in this
walk through (he seems to like it).
Darkness 2 (Digital
Extremes)
Ironically, my next project was a sequel to a
game done by Starbreeze - The
Darkness II. Big part of my work was related to multiplayer.
I worked on MP games before, but was never focused on the networking
part
so much, so it was a new and learning experience for me. I was
responsible for majority of high level MP mechanisms - foundation of
Vendettas game rules, mission structure (lobby), challenge manager and
all MP challenges, dynamic difficulty system, MP save game/checkpoint
system, weather, MP specific actions and game objects (all kinds of
coop doors, triggers, events). I was pretty
much acting as "the MP guy" for level designers & scripters.
|
I also did lots of
modifications and improvements to the lower level network code,
especially the object replication system. I was responsible for making
game conform to Microsoft's/Sony's networking TRC limitations
(bandwidth, packet loss). Started with creating profiling &
diagnostics systems for networking. Introduced a new congestion control
system, new prioritization mechanism (inspired by presentation by
Bungie's David Aldridge, we had a two-level scheme, though). When I
started we were way over the required limit, when I was done, bandwidth
was down to roughly 20% of the initial numbers and we passed TRC with
no problems. |
The other important part of my
job was making sure game ran at solid 30 FPS on all platforms. I added
new profiling features to detect bottle necks and went on a crusade to
wipe them out. Probably the biggest win was converting animation update
to a background job (all the way from animation blending to generating
matrices for skinning). Ported the whole subsystem to SPU on PS3,
created several helper classes that made similar improvements easier
(allocators, container wrappers, debugging). This change alone reduced
frame time
by up to 15ms in the most demanding levels.
Other changes include game object update loop, animation tree updates,
particle systems, some boring low-level work - eliminating cache
misses/LHS/etc and wait-free structures for job manager. I
also sped up animation import/preprocessing by ~50%.
Here's Eurogamer's summary
of our work. |
|
|
I've also implemented an
animation streaming system,
that helped us tremendously with memory issues, it reduced requirements
by close to 12mb in some levels and made it possible to use cinematics
of arbitrary length (limited only by streaming buffer size) .
On top of engine work, I coded some gameplay features as well. Most
"visible" were javelins/thrown
blades, objective hints, objective trail, some of Jackie's
abilities,some minor lip sync tweaks, save game system
fixes/improvements. I also kept an eye on our input latency (measuring
it "Mick West" style and making sure it's as low as possible with 30FPS
game, shipped with 100ms latency).
Last few weeks were in typical "all hands on
deck" mode so I was doing whatever had to be done - some more
optimizations, Bink issues, last minute firefighting (tracked down
nasty X360 file cache issue minutes before deadline), bug fixing
obviously (not the most reliable metric, but I fixed the most bugs in
the team), TCR problems (responsible for big part of PS3 issues,
if I never have to eject a disc again, it's still too soon). |
Other projects
Some of my demoscene work (1994-2001)
can be found here.
I also coded one game for mobile
phones (Super
Table Soccer, published by Overloaded) and ported over 20 titles to
various phone models.
Some screens from Super Table Soccer:
|