Evan Todd

Archive

Thirteen Years of Bad Game Code

Alone on a Friday night, in need of some inspiration, you decide to relive some of your past programming conquests. The old archive hard drive slowly spins up, and the...

The Poor Man's Voice Acting

Allow me to regale you with an exciting tale: the birth of a janky dialogue and voice system. I have a JSON file with all the localized strings in my...

The Poor Man's Threading Architecture

The game industry hit Peak Advice Blog a while ago. Every day I read skim ten articles telling me how to live. Fear not! I would never give you useful...

Ludum Dare 34 Postmortem

Friday 21:15 Fifteen minutes after the theme announcement, my friend Ben Homan walks through my front door. Not really my front door, I'm just a subletter. But this is a...

One Weird Trick to Write Better Code

Developers hate him! We'll cover some standard tips and tricks here, but we're not really interested in those. We're looking for the One Weird Trick to rule them all. Hopefully...

The Poor Man's Postmortem - Lemma

The big secret of our industry is, we don't actually enjoy making games. We slave away in obscurity for years in anticipation of one glorious day. Not release day, no....

The Poor Man's Character Controller

Let's say that, like so many of us, you want to make a surreal voxel-based first-person parkour game. You're trying to figure out a production schedule. What will take the...

Screenshot Saturday 213

It's the end of February and this game is supposed to be content-complete. In a sense, it actually is. All the levels are done. Twenty in all. I thought this...

The Poor Man's Voxel Engine

This is not a tutorial. It's a story. A Voxel Odyssey. The story starts with 19 year old me in a dorm room next to the Ohio State stadium. I...

Screenshot Saturday 211

Last Saturday we had the Short North gallery hop. Hundreds of people came through our gallery to see art. The guys helped me set up the Oculus and a projector...

Screenshot Saturday 210

I finished last week's map. It has some spinny things. Then I made this week's map. Who knew purple and green could look so... not terrible? Anyway, this puts me...

Screenshot Saturday 209

This week was crazy productive. I finished last week's level, finished another level, which looks like this: ...which also included some story-related writing and scripting, and actually started working on...

Screenshot Saturday 208

This week's level is not quite done yet, but I have an excuse! Power was out at the incubator for two days, and the internet didn't come up fully until...

Achilles

This past weekend I participated in the CivicHacks "Game Jam for Good". The goal was to raise awareness of the global water crisis and ultimately promote PackH2O, a Columbus-based startup...

Screenshot Saturday 207

Records continue to be broken. This week's map was actually done on Wednesday! Although most of Lemma is a strange hybrid of natural and alien-looking architecture, my design calls for...

Screenshot Saturday 206

I moved my office into an incubator / art gallery this week. The move is mostly for my own sanity. Turns out, working alone in your apartment for 9 months...

Screenshot Saturday 205

For the first time in the history of Lemma, I'm actually keeping up with my self-assigned pace of one new level per week. These past two weeks I made two...

Screenshot Saturday 203

Big update this week! My voxel renderer now has the capability to overlay everything with any texture I want. I'm using it on a new set of interconnected winter levels....

Screenshot Saturday 202

I've come to several realizations this week. Lemma is going to be good, but not great. I have to accept my limitations and finish the thing to the best of...

New blog, new app, new screenshots

Lots of stuff going on this week. New dev blog First off, my website got a much-needed overhaul. The horrible slowness of Wordpress.com was driving me nuts, so I switched...

Screenshot Saturday 199

"Level design for days" has been my motto for several months now, and this week is no different. Behold, new challenge levels! These are timed, bite-sized maps with simple goals...

grepr - 7DFPS 2014

I survived 7DFPS, barely. Here are some fascinating statistics: Days to create an FPS: 7 Hours spent: 93 Levels built: 5 Lines of code written: 2313 Hours to spare before...

7dfps work in progress

I'm participating in 7dfps this year, which means I'm making an FPS game in 7 days. Here's what I've got so far: In Soviet Russia, you are bullet. In my...

Screenshot Saturday 196

This past weekend I exhibited Lemma at the Ohio Game Dev Expo. It was an awesome time. Extra Life raised over $9,000 for charity (yes, it is in fact over...

Mass Murders, Christianity, LGBTQ, and GamerGate

With a headline like that, what could possibly go wrong? In this article I present an idea that may help both sides of GamerGate survive the ordeal. Simply this: negative...

Screenshot Saturday 194

Just a quick update this week to confirm that I am in fact alive. The iOS contract game is just about done. I'm pretty happy with it. Now it's back...

Shaders: How Do They Work?

Yesterday I gave a talk at Dev Workshop Conf introducing the basic concepts of vertex and fragment shaders. Unfortunately I don't have a video, just this one potato picture: It's probably for...

Screenshot Saturday 190

Well friends, Lemma is still on pause while I do some contract work. I also have only a few slides done for my shader presentation next week. This whole month is...

Screenshot Saturday 188

I'm taking September off to work for some clients, so Lemma is temporarily on the back-burner. HOWEVER. Wednesday night a certain something arrived in the mail. I immediately tried it out...

Screenshot Saturday 185

Hello friends. Yesterday I finished the 5th level! It took much longer than anticipated because it's actually 10 separate maps connected together. It includes some simple but hopefully interesting puzzle...

Screenshot Saturday 184

This week was a lot of level design. I'm working on a group of "fractured" but interconnected worlds that the player has to progress through. Here's a screenshot: Here's the...

Screenshot Saturday 183

I hit a milestone today. Three of the four levels so far in Lemma (Rain, Dawn, and Forest) have undergone at least one massive redesign in their short lifetimes. This week I...

Screenshot Saturday 182

What's that you say? You didn't even notice the absence of Screenshot Saturday last week? How convenient. Let's pretend it never happened. Or rather, pretend that it did. Whatever. MGDS...

New trailer!

Gearing up for Midwest Game Developers Summit this weekend. Tune in next week for my first expo post-mortem. In the mean time, the old trailer was looking woefully outdated, so here's a...

Screenshot Saturday 178

Small update. This week was bug fixes and more improvements to the level editor (more on that here). In other news, we were grateful to get some coverage from Monday...

Screenshot Saturday 177

Our animator Antonio has been hard at work on new animations. Check it out! Guys, the level editor is really close to being done. Here's some cool features: You can link entities...

Screenshot Saturday 174

First, a couple project updates. I pre-ordered an Oculus DK2! Come August, Lemma will have Oculus VR support. Huzzah! I also got a sign for our booth at the Midwest Game...

Screenshot Saturday 173

Last week was a huge update, so this week is a bit smaller. First, we're hard at work on the animations. Here are some early WIP animations: There are also a...

Screenshot Saturday 172

Big update this week! First, I updated the logo. I rotated the cubes 45 degrees to try and convey a better sense of speed and movement. What do you think?...

The Poor Man's Dialogue Tree

As some of you may know, Lemma has an interactive dialogue system that lets you exchange text messages with an AI character. I implemented every conversation manually in code (well, scripts)...

Screenshot Saturday 170

Hello and welcome to another week of Lemma development progress updates! This time I did a lot more work on the player character. I spent a ton of time in...

Screenshot Saturday 169

This week I finally implemented SSAO! It's pretty basic, but it works. Check out the effect source code here. It's a big deal for me because I tried it once...

Screenshot Saturday 168

This week was a ton of performance optimizations and graphics upgrades. Cascading shadow maps! Basically that means all the shadows are much sharper. It was surprisingly easy to implement and...

Screenshot Saturday 167

With the Kickstarter finished, it's back to our regularly scheduled programming! I am in the middle of a major graphics engine upgrade. This whole time I've been using fake HDR....

Final hours

Here we are folks, counting down the last remaining Kickstarter hours! I'm happy to announce that regardless of the Kickstarter outcome, production of Lemma will continue. To be honest, I originally...

FINAL WEEK!

We are now in the midst of the final week of Kickstarter funding! With the campaign nearing the end, I thought I would give you another development update. First, I...

GREENLIT!

From the Kickstarter: It's not every day you see this email in your inbox. WE ARE ON STEAM! Thanks everyone for your votes! We were part of a batch of...

Cheat your way through life

From the Kickstarter: Just an update on development progress for Lemma! Thank you so much everyone for your support. I'm still getting tons of useful feedback from people playing the...

Player model and animations

An update from the Kickstarter: One concern that pops up a lot on Greenlight is the low quality of the player model and animations in Lemma. The reason it's so bad is...

Movement in-depth

Update from the Kickstarter: I know it's only been 24 hours since the last update, but Lemma is now over 61% of the way to the top 100 games on Greenlight with well over 4,500 yes...

Looking forward

From the Kickstarter, a quick status update before I talk more about Lemma: At the current rate, we are just minutes away from 4,200 yes votes on Greenlight! 56% of the way to...

Greenlight update + streaming tomorrow

Hello! First: I wanted to thank everyone for the amazing support you've shown so far. We're already over 24% funded, which is more than I was expecting this early, so thank...

Lemma: first-person parkour demo

Download the demo for Windows Back the Kickstarter Vote for Lemma on Greenlight Follow me on Twitter After an unexpected 24 hour delay, the demo is finally out, and the...

Screenshot Saturday 162

The Kickstarter for Lemma launches on Monday! Keep an eye out, and tell your friends! Prepare yourself for tons of giant GIFs. You can click each one to watch a...

Screenshot Saturday 161

This week I finished what will probably be the last map in the Kickstarter demo. It teaches the player about the "extended wall-run" ability, demonstrated here: Normally, you hold Shift to...

Screenshot Saturday 160

This week I finally fixed my water code to allow finite bodies of water like this: (It's so dark because I still have a pesky rendering bug) I also realized...

Screenshot Saturday 159

This week I overhauled the menu. It's very Valve-ish now: I also distributed a number of mysterious notes around the levels to help flesh out the back story. They're actual...

The Poor Man's Gameplay Analytics

You don't want to take time away from your awesome game to write boring analytics code. So you either call up some friends, hire playtesters, integrate some 3rd party SDK...

All Ahead Full

Progress report. Sir, we have inbound screenshots from the first two weeks of full-time development. Bearing zero nine five, range three hundred. Prepare countermeasures. I added motion blur around the...

Ramping Up

I'm sorry, I've been terrible at keeping everyone up to date with Lemma. If you want to see what I've been up to since Alpha 3, my TIGSource DevLog has a few...

Auto-generating JSON serialization code in Objective C

I wrote this article for the Sidebolt company blog. Reposting it here for your reading pleasure! Our latest game Skyward Slots makes extensive use of JSON. We send Gigabytes of it flying...

Simulating UIScrollView in Cocos2D

I wrote this article for the Sidebolt company blog. Reposting it here for your reading pleasure! We publish our games on both Mac and iOS. Since UIKit is not available...

Lemma - Alpha 3 Ready to Play

Download for Windows Check out the IndieDB project page Like on Facebook Follow on Twitter After seven months of hard work, Alpha 3 is ready to play! Some interesting statistics:...

Quantity Brings Quality

As I suspected, I have an almost insurmountable case of coder's block after a full day at work. Nevertheless, things are getting done. In fact, this might be the best...

Anecdotes ahoy

A smorgasbord of anecdotes carefully compiled just for you, dear reader. This is #2 in a series of three posts which were originally one, before I decided I just had...

My Biggest Fear for the Future of Human-Computer Interfaces

I recently had to install and configure an 18-node OpenStack cluster, a process which involved a lot of SSHing and text-editing in terminals. I thought about learning Vim, but I was...

Internet is Back

I just got internet back after being without it since before Christmas. It was a tearful reunion, to be sure. Turns out, I was actually more productive than usual without internet....

Progress Report

Lemma has been radio silent recently, but that does NOT mean things aren't happening! I've been able to do a ton of work almost every day these past few weeks....

Mac and Linux Support

How's everyone doing? I'm doing okay. It's a Monday. Hope you're doing okay too. Surviving Sandy aftermath, school, work, and whatever other forms of oppression you may be under. I...

Voxel Levitation and Rain

I present to you, "Voxel Levitation: a Step-by-Step Guide". Step 1: Step 2:   Step 3:   Step 4:   Also, check it out. Hurricane Sandy has spilled over into...

Allocating large arrays in .NET

I experienced a strange memory issue with Lemma this week. Memory usage skyrocketed each time I loaded a level; it never dropped back down. Now granted, I am definitely the...

Slowmo! Stamina! Sprint! Socialism! What?

Stamina and Sprint I finally realized that speed is perhaps the most important resource in a Parkour game. Up until now, Lemma hasn't really understood the concept of "faster" and...

Scary Monsters and Nice Clouds

Nice Clouds I got sick of my old pixelated skybox powered by Google Images and decided to make a real one. I used Spacescape to generate a sufficiently trippy outer...

Now with 100% more frame buffer distortion!

Flying in the face of midterms and other IRL issues, Lemma boldly marches on! Spawn Point Graphics I realized you need a way to know where you'll respawn if you...

Story Design and Loading/Saving

I now have the complete backstory and in-game story options written out! After the initial tutorial, you'll get to a central area of the island which connects to four other...

Lemma Release 2

Here's an extremely cut-down demo! No tutorial, no story, no explanation, just showing off new moves, new enemies, and the new weapon. Download it here for free. Please let me...

Brace yourselves

Everyone pretend this blog didn't die for six months, okay? Okay. Here's a brain-dump of random things I've learned while not blogging. Distributed programming is tough but really, really fun....

Finals week

Sorry, no news to report on Lemma this week. School is keeping me busy. But I thought I'd share some of the projects I'm working on for school, since they're...

Alpha feedback

Thanks so much to everyone who made the alpha a great success! I'm blown away that people were able to look past the bugs and crashes and clunky controls and...

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...

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...

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...

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...

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...

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...

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....

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...

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...

Game dev job, Macs, and re-focusing my project

Apologies for the lack of Parkour Ninja updates. I do have fresh info about it somewhere in this post. But first! A list of potentially interesting goings-on of late: School's...

Pistol: Part 2 - Texturing

And here's episode 2 of the Sig Sauer Saga! In which I attempt to UV map and texture the model from Part 1. And do lighting and compositing for a...

Pistol - Part 1: Modeling

Poking my head in here to confirm that I am in fact not dead. I humbly offer this nifty time-lapse video as proof. Started a small project to brush up...

Parkour Ninja Alpha 1

It's here, and it needs lots of play-testing! Please help me out and play it. You'll need a Windows machine with a Shader Model 3.0 graphics card. I'm anticipating some...

Back on track

I finished refactoring with components, added a reflection-enabled editor and XML serialization, finally got real PCF shadow filtering, and started experimenting with a somewhat cel-shaded visual style. I've been busy....

Refactoring with components

Update: check this article for more in-depth details on Component Binding! I've been refactoring my engine with the component-entity model, and things are turning out quite nicely. The one problem I...

Prepping for alpha release

[These posts are now being mirrored on my GameDev.net developer journal. Check out their new revamped site, it's pretty sweet.] I am getting ready for an alpha release soon, very...

Parkour Ninja animations

I'm going to poke my head in here to reassure everyone that the game is making steady progress. The environment now turns transparent when it gets in the way of...

December 2010 Tech Demo

I finally got animations working! I'm using a Blender to FBX script, along with this fantastic multi-take FBX importer. Apparently XNA depends on the actual FBX API for importing, and...

Further deets

Okay, it's time to shed some light on this project. First off, my goal is to release on Xbox and, if possible, Steam (if not, I'll be looking at other...

Back at it!

That's right kids. I's back with a new game project. I will post these two tantalizing morsels for you. Let the wild speculation begin! I realize the chill music in...

Tricksy closures

Do not be fooled by the elegant simplicity of the mighty closure! Behind its shiny dynamic veneer lies a powerful machine capable of destroying your immortal soul. Behold: function GetOutputFunctions()...

Phew

Well, I submitted A3P to IndieCade on Friday. It's also currently in QA testing for an online gaming portal (BigPoint, still free of course). I won't say that A3P is...

Moar physics entities

Drop pods no longer sit in one place, they now roll around, freely dispersing their monetary goodness among the citizenry. They're quite light too, which means a single grenade can...

More maps

The main menu now has a global chat room, powered by some simple PHP/MySQL. The tutorial has been updated (it looks a LOT better), and the website received a makeover...

Feedback from beta 2

Hey everyone, it's me again. I'm happy to report that Beta 2 turned out pretty well! We got a bit of publicity for the final release, and more importantly, some...

Beta 2 is out!

  A3P Beta 2 is live, go check it out! This release has a whole slew of new features, some of which have been covered on this blog. To recap:...

Meshes of navigation

Update 8/23/2011: the source/executable for the navigation mesh .obj exporter is here. Import a mesh, set up the parameters (only simple mode is supported right now), and have it generate the...

More stuff!

We are closing in on a new release here... in the mean time a lot of new features have been added! First, and most notably, I'm experimenting with a new...

Drop pods are back

And they're much more interesting now. Instead of delivering reinforcements, they now act as cash dispensers. So rather than receiving a flat sum every match, you'll have to earn your...

New maps, new weapon, new money system, new game mode!

I've been silent here for a while, but that's just because I've been busy getting some glamorous new features in! Things are really starting to shape up. First things first. Bobpoblo...

New command system and social portal

Quick update just to keep this blog alive. I've made some improvements to the command/AI system. It's now much simpler and easier to tell your units to attack a specific...

Spawn points and more networking

Networking has received yet another performance boost. I discarded Panda3D's network classes in favor of Python's sockets. I also switched to a single-threaded, non-blocking system that performs significantly better and...

Finally, online multiplayer!

I've updated the browser plugin to finally support full online multiplayer! Go try it! I think the plugin is now stable enough that I am promoting it as the officially...

Update

Not dead... just really busy. Been doing a lot of network debugging and optimization; I added zlib compression to the network packets, which cut down network bandwidth by about a...

Gameplay trailer

Finally got sound working in these videos, yay! New features in this video include the aforementioned shadow mapping and reloading, a brand new three player map called Orbit, and heavy...

Reloading, shadow mapping

Thanks to the Panda3D 1.7.0 shader generator supporting shadow mapping, and the awesome new BuildBot service set up on the Panda3D website, A3P now supports basic shadow mapping! Actually, the...

Schedule delays

It's time to face the facts. While the game is progressing at an incredible pace, it's not going to be ready by January 9, or even the end of January....

v0.5a released

That "a" stands for "not quite ready yet". This is sort of an intermediate release that focuses mainly on online multiplayer, which is largely functional, but needs more testing. Aside from...

New name: A3P

Goodbye Stainless, hello A3P. I spent a good chunk of time creating new A3P material and switching everything over to the new name. Unfortunately, SourceForge's UNIX rename feature is down,...

New gameplay

Sorry for the distinct lack of updates this blog has. A lot is happening right now with Stainless, and most of it's good. :) First off, Stainless is going to...

Stainless v0.4

Available on the new website: stainless.sf.net There's a whole bunch of new stuff in v0.4 that I don't have time to talk about. So check out the website to see...

Replay functionality, new icons

Yes, you can now view the last five games you played as a spectator! All I did was save each network packet that's sent out into a big list, then...

November update

This month's release will start to show more of the Real-Time Strategy side of Stainless. One new feature that unfortunately will exclude a section of the target audience is speech...

Stainless v0.3 beta released!

Along with an HD trailer. Free download here!

Prepping for first release

Less than one week away from release! Looking at the to-do list from last week, I actually haven't worked a lot on the items listed. I've been ironing out a...

Production schedule

Yes, I have a schedule/deadline now. I'M SO NERVOUS. :) Here's the plan. And when I say "forum", I am of course referring to the fabulous GameDev.net forums. October build...

More shiny!

Three updates, one in graphics and two in gameplay. Graphics: new water shader! Thanks to Panda3D's new built-in support for user clip planes in the shader generator, the reflections were...

Panda3D distortion sample

For any Panda3D users out there, this is an improved version of the frame-buffer distortion sample currently shipping with Panda3D 1.6.2. Whereas the original sample just samples a wave texture...

New artwork

Yeah, I'm back to art now. I am ashamed. But I'm starting to get the hang of this Blender stuff. Check it out: And here it is in-game. Don't worry,...

And now for something completely different...

I actually planned a full-fledged single-player campaign for Stainless, before I came to my senses and downgraded it to a much simpler multiplayer game. However, I'm still considering a short...

Network system description

As promised. :) First, a small disclaimer. This network system is designed for a very specific task: handling networked physics/gameplay over a LAN network. The structure described here might be...

Perfunctory postage

Wow, so many updates to cover. I've been without internet for awhile, so... deal with it. :) Let's start with a list of new improvements: Networked gameplay is now fully...

Networking and better particles

Network code is working reasonably well now. The server generates a unique MD5 hash (only six characters) for an entity, then broadcasts a packet to the clients instructing them to...

Done with art for a while

I've spent way too much time fooling with the Blender-Panda3D content pipeline, so I'm moving back to working on gameplay and coding. That being said, the art was fun while...

First major update

Mmm. Been a while, hasn't it. Latest and greatest feature list: Nifty particle effects for bullet impacts Decent AI pathfinding Grenades don't go through walls any more :D New test...