Category: game development


A lot has changed since we wrote the first line of code in 2003 for the g0/g1 (g-zero/g-one) engine, for what ultimately became Lost Legends.

Back in those days, Microsoft Windows was the big operating system by far, and the engine used Microsoft Direct3D for graphics, and Microsoft DirectSound for sound effects and music.

Most computers had a single CPU, so the implementation of the engine was fairly straightforward.

Ghostwood Games' Lost Legends, gzero engine architecture

Ghostwood Games' Lost Legends, gzero engine architecture

Over the course of programming Lost Legends we learned a lot.  And, a lot has changed in computers since then.

We spent some time upgrade the engine, but ultimately, we decided that in order to address some core game design issues, core implementation, issues, and how computers have changed, we went back to the drawing board and rewrote everything from the ground up.

To begin with, the new gw3 engine is based on crossplatform technologies for easier implementation and porting.

Graphics are implemented in OpenGL, and sound effects and music use OpenAL.  And, the gw3 engine currently uses SDL to abstract out platform level differences in window, input, and event handling.  STL, well STLport specifically, and the boost library are used to provide crossplatform containers and base additional functionality.

The new engine architecture is also built assuming 2 – 4 CPU cores.

Ghost Games' gw3 base engine architecture

Ghost Games' gw3 base engine architecture

Processing is broken into 4 key, independent threads of execution.  Each thread runs fully asynchronously at a different maximum rate, and inter-thread communication at this level is handled using thread safe queue’s implemented using boost.

The main thread which is started when the engine runs also handles processing and dispatching input and operating system events, as well as updates to the UI, and management of the local player character.

Rendering in OpenGL and operating system (OS) messages and events are handled together due to the thread requirements of OpenGL and OS window management.

Audio effects and music playback are handled in their own thread using OpenAL, with effects stored as WAV files, and music as Ogg Vorbis.

The simulation thread drives the whole system and runs the world generation and management, mob AI, and authoritative world state.

A simplified example of how these components work together:

  • Player presses the attack button on the mouse to cast their current magic spell
  • OS generates an event for the mouse button
  • Renderer thread asynchronously detects the OS event and sends the event information to the Main thread
  • Main thread receives the message and determines that this should translate into an attack
  • Main thread sends the request for an attack to the Simulation thread
  • Simulation thread receives the request from the player, and determines this is a valid attack and can be carried out
  • Simulation thread executes the attack causing an audio event for the spell firing to be sent to the Audio thread, and a visual event for the spell to be sent to the Renderer thread
  • Audio thread receives the request to play the spell firing sound, and so it loads and plays the sound
  • Renderer thread receives the request to display a new visual which happens to be a burst of particles indicating the spell

Beyond these core threads, there are also other secondary threads as well.

Ghostwood Games' gw3 engine architecture

Ghostwood Games' gw3 engine architecture

These additional threads handle network communication to other players, gameplay and visual physics for the simulation and renderer threads, and loading of large files off the file system.

So, technically the engine will scale to at least an 8 CPU core system.

As with the previous engines, the heart of the gw3 engine is the ability to procedurally generate and modify the game world dynamically.

With this new architecture it’s possible, although unnecessary in the short term, to continue to evolve the threaded engine architecture to include an arbitrary number of data generation threads.

Ghostwood Games' post-gw3 engine architecture

Ghostwood Games' post-gw3 engine architecture

See you in the dungeon!

I know, I know

It’s been forever since an update.

Multiplayer is progressing well.  It’s really a ground up rewrite of everything.

Unfortunately, the original code didn’t take multiplayer into account at all, and a lot had to be torn down and rewritten.

It is far enough along to say that the first multiplayer alpha test will be against our own server to help shake things out before we allow other people to run their own multiplayer games

See you in the dungeon!

Lost Legends has very low system requirements and supports a huge number of CPUs and graphics cards.

We support every single popular graphics card today:

  •  All Nvidia GeForce cards
  •  ATI: All Radeon
  •  Intel: All GMA 900 series, GMA HD series and later

Which already is about a bazillion cards.

Assuming you can find a driver, we also support most graphics cards with as little as 8 MB of memory going all the way back to 1998, including:

  • All Nvidia TNT
  • All ATI Rage 128 Pro and later
  • All Intel 740 and later
  • 3D Labs Permedia 2, Permedia 3, Oxygen VX1, Permedia 4 and later
  • TI Permedia 2c and later
  • 3Dfx Voodoo 3 and later
  • Guillemot TNT2 and later
  • Matrox G400 and later
  • ST Microelectronics Kyro 1 and later
  • SIS 315 and later, Xabre and later
  • Trident CyberBladeXP
  • S3 all Savage and later

Some things are changing, though.

We’re upgrading DirectX versions, and we’re also adding support for Nvidia PhysX.  These will allow us to create cooler high-end features than we have before.

Now, these changes are going to eliminate support for Windows 98; but we don’t think that’s much of an issue any more.

More updates on changes soon

See you in the dungeon!

Having looked back, we can look at what’s next.  We want to build on the successes and fix the problems.

The first part is to refocus on the gameplay that’s core to Lost Legends:

  • Random areas
  • Random quests
  • Lots of mobs
  • Lots of loot

Everything we do will come down to that.

There’s a few features which don’t support that list that will end up being removed.

The second part is to add key features that don’t exist today.

Multiplayer is the big feature that doesn’t exist today.

Also, while there is player and item progression, there needs to be a basic framework to have some story progression.

See you in the dungeon!

While a number of things went right, a number of things didn’t go very well or turned out to be poor decisions.

Project Scope

Probably like most people, we said, “Hey, great! Let’s make a game!”

And, like most people, we probably didn’t really understand the issue of project scope.   We spent a lot of time on features and functions that were really peripheral to the game, or we dumped in a lot of non-core features and functionality that didn’t really matter.

This also lead to complications with the level cap, and the number of items.  Ultimately, causing the gameplay to plateau.

Lack of Multiplayer out of the Gate

We didn’t have multiplayer out of the gate, and we made some attempts to add it in later to no great success.  This should’ve been there from the beginning.

No Standalone Installer

What needed to be installed was automatically taken care of when Lost Legends ran the first time.  However, this caused problems when people needed to uninstall or move the installation.  And, it caused some odd problems on a very small number of systems.

Life.

Shortest post ever.  Over in one word.  That’s why things get delayed 🙂

Without going into gritty details, when developing a game isn’t a fulltime job (well it is, but isn’t yours) it’s sometimes very hard to make substantial forward progress.

Family, work, overtime at work, mowing the grass, illness, going to the grocery store, and numerous other things fritter away the day.  Not that some of those things aren’t positive, but they do take away from substantial forward progress.

Don’t get me wrong, it is a priority issue.  I know that.

But, it’s also an issue of scope and internal project quality.

Which probably takes us on to the next post …

While we buy time … I mean, in the interest of being informative, we’d like to take a step back and look at what went right and what went wrong in creating Lost Legends based on our perspectives and the feedback we’ve had from you.  Then we can look at where we go from here.

First and foremost, Lost Legends has fun, basic gameplay: random areas, lots of different areas, lots of monsters, lots of random phat loot.  This is by the far the number one comment we get, and we agree completely.  It’s good, mindless fun.

Second, it’s goofy.  There’s lots of goofy things in Lost Legends.  From the absurdity of some of the generated quests, to the animations of some of the monsters.  None of this was coldly calculated.  Some of this was intentional.  Some was due to time constraints in getting certain animations done, and then became a cornerstone of how animations should be created.

Third, the sound effect (sfx), ambient sfx, and music are pretty good.  We feel we did a good job in finding or creating the right audio mix for the game.  All the audio has that extra “oomph” of a bass boost which really helps.

Finally, Lost Legends runs on every version of Microsoft Windows from Windows 98 to the present, and requires very very very (you can’t even buy it anymore) low hardware specs.  Since first putting it out in 2006, over a million copies of Lost Legends had been downloaded.  And, there may be more that we don’t know about.

We’ll continue the post mortem next time

See you in the dungeon!

 

 

%d bloggers like this: