Lemma Release 1!

It's finally here! Alright I'm just going to dump everything here. Prepare for face melting.

Windows MSI Installer (60 MB)

Note: You might get a malicious file warning. It's because I can't afford a code signing signature at the moment, so the installer has not been signed.

If you're NOT reading this on the shiny new website, did you know that you COULD BE? It's right here: lemmagame.com

Please play the alpha and leave your comments! Your feedback is greatly appreciated!

Help me pick a logo!

I'm going to try and post smaller, more frequent articles. This whole "two months between massive walls of text and screenshots" thing is not working out.

So, the alpha I promised is *still* inbound. I'm working as fast as I can! And I think it's paying off. For a while I was very worried about performance. In my last post I talked about how I optimized the renderer, but there were still issues with the physics engine. I was putting each cube into the physics space as a separate entity, which was making it absolutely crawl, even on my eight core i7.

Global Game Jam 2012 Liveblog

Update: Snakes in a Tower is complete! Downloads with source available for Mac and PC.

Friday 4:59pm

This is my first Global Game Jam. Super excited. So I'm going to liveblog it. I'll be working on a MacBook, so I decided to port the essentials of my XNA component entity system over to MonoGame. Here's what I got so far!

Breathtaking, I know.

Saturday 12:20am

Opening meeting was awesome. Heard some fantastic keynotes from fantastic people. We got to hear some great insight from Ian Schreiber before starting (I'm at the Ohio State jam). The theme has been given to everyone by now, so I'll go ahead and say that the theme is this:

Quick update - Alpha inbound soon!

This week was a lot of under the hood improvements. The voxel engine got a TON of performance optimizations, which allow my Nvidia GTX 260 to render my test scene at 100-200 FPS.

Screenshots:

New features:

  • Rough-draft tutorial level with instructions and whatnot.
  • Fullscreen toggling on-the-fly by hitting F11
  • Rudimentary fog effect

Performance optimizations:

  • Voxels are now rendered as surfaces, rather than complete cubes. This lets me cull a lot of unnecessary geometry.
  • Voxels are now split into chunks. This lets me easily implement frustum culling and view distance, which helps tremendously with shadow map rendering as well.
  • I fixed some bugs in the voxel modification code, making voxel modifications of up to 100-150 cells practically instantaneous.
  • Shadow maps and reflections are now rendered every other frame. It's a hack, but the important thing is that the gameplay is responsive.

My biggest development challenge was my battle with fullscreen toggling and graphics resource management. Switching from fullscreen to windowed mode, the entire XNA GraphicsDevice is invalidated, along with every vertex buffer, texture, shader, everything. So that was interesting.

Digital art, Facebook 3D Graph Explorer, and more Project Lemma

My last two posts focused on general game development topics, but no longer. It's the end of the year, time to look back and review before looking forward to the new year!

Digital Art

First off, some fun diversions. In my pursuit of an art minor at Ohio State, I took a digital art class autumn quarter. The instructor let me use software I was already familiar with, so I didn't learn much. But the class gave me the motivation to plonck my butt down and make some art, which is all I really wanted.

C# for scripting - runtime compilation

I set out to add scripting support to Project Lemma the other day. End result: I can recompile C# scripts on the fly and cache the bytecode in DLLs. The best part: there's no special binding code, and no performance hit.

There are a lot of .NET scripting solutions out there. Here's a few I found in my research:

  • IronPython. Fully dynamic, kinda slow. Requires marshalling of some kind between the script world and .NET.
  • CSScript. Very well supported, includes Visual Studio extensions and shell extensions. Compiles C# to bytecode at runtime, with caching. Scripts cannot be changed once loaded.
  • Lua. The industry standard in scripting. From what I understand, a little challenging to get working with .NET.

I decided to try out C# runtime compilation. Really, C# is the best scripting language I could ask for. If I succeeded, I could keep writing the same code I've been writing, but I could recompile it and see it in action with a keystroke instead of restarting the game!

Tools are everything

You've probably heard the whole "don't make engines, make games" shtick. As I progress I am learning another important lesson: tools are the most important aspect of any project, game or engine. Whether you're rolling a custom engine or shopping around for middleware, tools should be absolutely top priority. Seriously.

The question should not be "how many shiny graphics techniques can I incorporate?". It should be "how easy is it to create content for this game?". Content is the center of every game, whether that content is an AI algorithm, a map layout, or an art asset. If the content pipeline is even a little inefficient, it will prevent you from making the game you want to, whether you realize it or not. If you have to jump through hoops to create a new level or script a story sequence, you're going to put it off and focus instead on adding another feature that provides tangible results, like a new lighting technique. Problem is, those features don't make the game. Content does.

Physics and lighting fun

Sorry to post two videos in quick succession, but this was too fun not to record!

Parkour Ninja update: first-person camera, physics, deferred rendering

Parkour Ninja is still alive! And it's looking more like Mirror's Edge now, complete with first-person camera. The old direction of the game just had too much frustration and not enough fun. Hopefully things will change now.

I re-integrated a physics engine, this time BEPU physics, which is a screaming fast open-source XNA physics engine with unbelievable support. I was able to get my existing block simplification/rendering code to work with BEPU, so now you can add/remove blocks to/from existing objects on the fly. One cool side-effect of this ability is that I can also blast objects into smaller chunks... full-blown destruction is #1 on my list right now.

As promised: Component Binding "BEHIND THE SCENES"

In the wake of this brief description of my component binding system, I was asked to provide more details on its implementation. This article is my best attempt to do so!

This is a tale of intrigue, excitement, and wonder, in which I try to implement a component-entity system in C#, and stumble upon a remarkable paradigm that merges components with data binding.

Note: If you don't have at least a vague concept of component-entity design, read this article first.