Sunny Day

Sunny Day is a game that I worked on at the 3rd Triangle Game Jam with Mike Daly, Rett Crocker, and Brett Brown.

The theme for this jam was Music Video Games, to come up with a game idea based on or inspired by a song (note: not creating rhythm games).

A little girl goes for a walk. When the sun shines on her, she is happy and spreads happiness to all those around her. When she is in the shade, she is sad. You control the sun, who wants to make the girl as happy as you can. You do so by positioning the sun so that the clouds beneath you don’t end up shadowing the girl.

The concept from this game was based off of the song “Sunny Day” from the Vib Ribbon soundtrack by the Japanese music group “Laugh & Peace”.

Check out the Triangle Game Jam page for Sunny Day for a download and more information. We struck a compromise between the two day approach of previous triangle jams and the 2.5 day approach (meet and start working Friday night) in the Global Game Jam by meeting on Friday night to come up with ideas and teams over BBQ and beer, but we didn’t start coding until we met on Saturday morning.

Space Fish

Space Fish is a game that I worked on during the first Global Game Jam at the Raleigh-Durham site with Nick Darnell. The theme was ‘As long as we’re together, we’ll never run out of problems’.

It’s sort of a physics-sandbox game, where you can use your StarBeam to grab red or blue stars and fling them around.

Mindy the Space Fish is a persistent omnivore which will exist until the end of time. You are Mindy’s minder, feeding her pesky Red stars and keeping her from eating the pretty Blue stars.

As Mindy’s minder, you are free to ignore her. However, if you want to stick around with Mindy, your life will be full of problems.

The text we included with the game:

This is Mindy the Space Fish.
Mindy likes to eat things.
You are Mindy’s minder.

Care and feeding of the Space Fish:

  • In particular, there are Red stars and Blue stars floating about that Mindy wants to eat.
  • Red stars are painful to you, so you should throw them all to Mindy.
  • You’ve got nothing against Blue stars and would be very sad if Mindy ate them all.
  • You and Mindy would both be sad if Mindy ate you, but Mindy cannot help herself.

You’ve got a StarBeam that you can use to grab the nearest star and you can fling it about, either towards Mindy or away into space. We ran out of time to create a real level, so the scene is really crowded and it ended up being more of a physics sandbox than a puzzle, but with a bit more time and actual level design, it would probably be pretty fun.

There is more information, source code, and precompiled binaries available at the global game jam page for Space Fish.

Additional Credits: Patrick Sebring created the title screen, Harrison Moore made the music, and Mike Daly saved us from programmer art by making some sprites in Max and exporting them to spritesheets.

Pixelated Martini Roller

Pixelated Martini Roller is a game that I worked on during the second Triangle Game Jam with Nolan Walker and Vincent Scheib.  Brad Acree did the awesome title screen artwork and the music is by STU.

You play an angry drunken olive off to discover the meaning of live, or something…

The theme for the game jam was mad libs.  Everyone brought three lists of five words and we randomly generated game titles at the start of the jam, then we came up with and pitched ideas to go with the best names until we’d coalesced into teams.  I highly recommend this mechanism to anyone thinking about hosting a game jam.

The game plays like time attack mode in a classic 2D platformer: you run through the level and need to hit each of the checkpoints along the way to finish.  However, you won’t make it very far sober, the olive has to soak in alcohol in order to make some of the jumps.  As the olive gets intoxicated, you can jump higher and run faster, but the superpowers come with some downsides: the screen becomes pixelated and the music distorted as the drunk-o-meter fills up.  If the olive gets wasted, you actually lose control and cannot accurately jump or run until it sobers up.

I built the level editor (it’s built right into the game and you can toggle back and forth during gameplay), the checkpoints, the drunk-o-meter, and game flow logic (title screen, gameplay, editor, win screen, etc…).

How to supress Warning LNK4099 – PDB ‘XXX’ was not found

When a library is compiled in MSVC with PDB support, but later distributed without the correct PDBs, anyone attempting to link with the library will get many warnings of the form:

warning LNK4099: PDB 'XXX' was not found with 'YYY' or at 'ZZZ'; 
linking object as if no debug info

You might think that it’s not a big deal: recompile the library to not use PDB files, or disable the warning. The former option isn’t available if it’s a 3rd party SDK without source code, and the latter option isn’t possible (more on that in a second).

At least in Visual Studio 2003 (7.1) and Visual Studio 2005 (8.0), 4099 is on a ‘non-ignorable’ warning list. This means that you can’t use /ignore in the linker command line options to get rid of it, brilliant! This is by design [1] and they don’t care enough to provide any other mechanism right now [2]. To be fair, both the /ignore switch and which warnings are non-ignorable seem to be undocumented, but someone else has made a handy list of them [3].

Now, you could probably live with it if there was just one warning per-library and you don’t really care about compiling with 0 warnings, but it’s typically hundreds of warnings, and we all know how slow VC80 gets when you spam the output window. So, since there is no sanctioned workaround, let’s do this the hard way.

How to disable the warning by patching your linker

The following are instructions that I wrote up for some friends in this situation, only tested on VC8, but it should apply to VC7.1 or VC9 as well.  Yes, I really am proposing that you patch your linker to ensure a clean build. If it helps you sleep at night, think of it as correcting a profound oversight by Microsoft. There just isn’t any other solution if you want to compile in debug mode against libraries you don’t have source for that were incorrectly configured.

You could go after the code that generates a 4099 and prevent it from ever getting generated, or the code that prevents it from being ignored. The second path is quite easy, there is a whole list of non-ignorable warnings which makes it trivial to correctly identify the list within the linker executable.

Fire up your favorite hex editor on link.exe (likely the one in “C:\Program Files\Microsoft Visual Studio 8\VC\bin”) and look for 4099 at 32 bits wide. The very first hit also has 4088 before it, and 4105 after it, bingo! I set it to 65535; pick your poison, but you probably want to avoid the 4xxx range. Hooray for no more annoying PDB warnings, at least until the next VS SP or VC9.

The usual caveats apply when modifying executables (Make a backup copy, validate what you’re attempting to change, no warranty express or implied, etc…). If you have a newer or older link.exe, the list of unignorable warnings may be different, or stored differently, so verify that the value you’re replacing is sane:

... F8 0F 00 00 - 03 10 00 00 - 09 10 00 00 ... (4088, 4099, 4105)

Once done, you can add /ignore:4099 to your linker options and it will actually work.

EBE Promotional Video

This was a project at CHIL, showing a before and after vision of EBE for the For All We Call Mizzou Fundraising campaign.

https://www.youtube.com/watch?v=9TapPZN6b5Q

I modeled the engineering buildings as they currently are in GTK radiant, added them to an existing Q3A map of the west campus, and constructed a fly-through video for an engineering fundraiser.

Nathan and Zach constructed our idea of what the new engineering east could look like in Maya, and we composited the videos together as a before-and-after comparison to create the final video.

T27 Puzzle Game

A simple puzzle game with retro graphics

I don’t remember why I titled it T27, although it might have taken 27 minutes to make the very first version. All in all, I spent about a day playing around with the concept and here you have it. The main idea was to do something fun and fast with ASCII graphics so I didn’t get bogged down making it pretty.

T27 Gameplay

You play an owlish character (it’s hard to portray fine details in a 4×4 ASCII grid) who must defend himself from evil invading cubes. Your owl has the ability to grab cubes from the sky or throw them back, although he can only carry cubes of one color at a time.

These cubes come in a variety of colors and ones of the same color don’t get along well. If three or more cubes of the same color come into contact, they get into an argument and explode. Use this to your advantage and save the world!

After a number of grabs or throws, the screen will start to vibrate, indicating that another wave is approaching. Your owl can do two more things before the next wave comes, but he is fighting a losing battle, as the cubes never stop coming.

Reverse-engineering the WMB Prototcol

I took a graduate networking class and for my project, I decided to reverse-engineer the DS download play protocol (commonly referred to as Wireless Multi-Boot, due to ideological similarities with the GBA Multi-Boot feature).  This is the protocol underlying the ability for wirelessly transferring demos from a download station or another DS to your own DS.  Many games have the ability to transfer demos of the full game, or multiplayer clients for LAN gaming, and the kiosks are used in stores and at conferences to distribute game demos.

The project title was ‘Inferring a Proprietary Wireless L3 Protocol From Packet Traces’, and I gave a presentation in class, as well as a project report that had the technical details.  I’ve since placed all of that information on the NDSTech wiki.

Note: I was not the first person to do this.  FireFly did everything that I did first, but he did not publish any information on the protocol or source code for his tools.  However, his raw-mode driver for Ralink cards and the already re-assembled WMB captures made my life a whole lot easier.  A number of other people on the gbadev.org forums also provided vital insight (to both FireFly and myself).