See RCR precursor, Grand Theftendo In Action!

Those who have been waiting since the initial announcement in 2004 and missed the GDC talk this past February can finally see Grand Theftendo in action.

The precursor project to Retro City Rampage, Grand Theftendo was an unofficial demake of Grand Theft Auto III for the actual Nintendo NES. Although never finished, it still brought a (simplistic) open-world to the old 8-bit console.

Aaron Kaluszka at Nintendo World Report has done an amazing job summarizing the talk I gave at GDC outlining the project and how Retro City Rampage came about. There’s also lots of info in there on the tools which I built to create both projects and on game design. You’ll also find more videos, screen shots, the world map and pictures of the tools.

You can find Nintendo World Report’s great article here.

BTW, for those curious, here’s what the sprite flicker looked like on the NES. This is one of the reasons the sprites are as small as they. Sprite objects such as cars are built out of multiple smaller sprites. The more sprites on screen, the more it will flicker. The NES could only display up to 8 sprites per line, each sprite being 8 pixels wide, that’s pretty minimal. A horizontal car is 3 of those 8 sprites. More than two cars (or two cars, a pedestrian and a bullet) and you’ll start to see flicker.

Also, check out a video from 2004 of the homemade NES devkit running the game:

Posted in General News, Programming | Tagged , , , | 3 Comments

Speed up your code iteration time!

Doing Xbox coding right now and enjoying a simple perk that speeds up my iteration time by about 8 seconds. 8 seconds doesn’t sound like a lot, but remember that means that every time you change something and start up the game, you’re staring at an idle screen for 8 seconds! That really kills morale.

I’ve worked at companies where the iteration time was 1.5-6 MINUTES. Some others had experiences where the compile alone took over 20 minutes due to their poor makefile system. Now think about that. When the team is 30-120 people, that’s a lot of time wasted and a lot of money. The money a certain unnamed company wasted waiting while their horribly inefficient pipeline cooked data could’ve funded about 30 World of Goos or Braids. It blows my mind how common this is. Managers and producers are often looking everywhere BUT at the big picture to allocate time to fix these things.They definitely wasted more time waiting for things to compile and pipe than they spent doing OT. I can say that for sure.

Really, these things shouldn’t happen in the first place. It’s often the result of “temporary” code staying in which isn’t architected with the ability to scale well. When I started at that company, a friend of mine said “If I write two lines of code in a day, it’s a good day!”. I thought he was joking. He wasn’t. I then had a saying, “If it seems like people are watching youtube all day, they’re just waiting for a compile”. It was great for me though. I was able to read the entire Gamasutra site. Seriously. I ran out of stuff to read on there and was scouring the web for another equivalent site.

Anyway, ranting aside, the turnaround time on devkits is much slower than PC. So, I do anything I can do to shave off time. Turns out most of the loading time is loading then processing the audio. So, I have three #defines. “NO_AUDIO” “NO_MUSIC” and “NO_SFX”. 99% of the time, I don’t need audio to test things like say, leaderboard code. So I simply uncomment “#define NO_AUDIO” and BOOM! RCR loads almost instantly. Every second counts.

On a side note, having the ability to run the game with NO_AUDIO, which in fact doesn’t just skip loading the audio, it stubs all the functions, is very helpful when porting. Gets you to the instant gratification of seeing it on a new platform sooner because you don’t need to worry about audio initially.

Also note, I define NO_AUDIO in the cpp file, not a header. So if I want to change it, it just needs to compile and link ONE file. That’s how you do it baby! I also split up many headers with the foo_defs.h and foo.h to speed up iteration, but you get the idea.

Posted in Uncategorized | 1 Comment

Another quick win

Retro City Rampage’s simple scripting language has proven very powerful. The game makes heavy use of scripts, using about 90 of them at the moment with a few more to be added before it’s finally tied in a bow (which will be happening very soon).

Although my initial NES effort Grand Theftendo had its missions written directly in 6502, I designed the scripting language for RCR under the mentality that it could feasibly run on the NES if I were to port it backwards. It was lightweight and efficient! However, that being said, this also meant it was simple and somewhat primitive.

But, RCR got ambitious. More ambitious in cinematics. More ambitious in gameplay. These created a number of situations throughout development where the scripting language needed to be extended. New features needed to be added to the language but with time always being the enemy, the simplest approach always needed to be taken. Amazingly though in hindsight, these simple (and often elegant) solutions seem to have been the best anyway.

One example of where I could’ve gone and where I ended up going was for catching events. Given the time and resources, the old me would’ve designed an object oriented language, where I could set up sprite instances each with their own “onAttacked” method, etc. It would’ve been so clean and elegant! But that wasn’t going to happen. What was the core of what I needed? Events of course! So I added an event thread to each script and global event functions such as “on.attacked”. Each event then passes down params which can be used to check which object was attacked. And you know what? Most of the time I’m just checking if it’s the player object, at the most I pretty much check 3-4 different objects, so the single function doesn’t make code too messy. And if it did, I can break the code up into separate function calls (which were another quick hack).

I also made use of the event thread and added callbacks, so for example, when all of the enemies in a group are killed or the player reaches a “go” arrow, the function if passed in will be called. This type of stuff is used for all kinds of things such as waypoints for a car race.

So anyway, the win today was script-to-script messaging. At one point, one of my visions for an ideal scripting language involved implementing a linker so scripts could could share common functions and variables with each other (or at the very least, all have access global functions/variables from a global script). However, this again wasn’t going to happen. Faced with a situation where I really needed to add script-to-script communication to avoid potentially shoddy code, I did the next best thing. I made use of my script opcodes by adding a post.message one, and added an event function which is triggered in the other running scripts. Worked perfectly!

For those curious, the multiple scripts running include one for the region/building/room you’re in and one for the active mission. So if you trigger something that is set up in the room (ie. activating a secret entrance) and the mission needs to know about this, it now makes use of the messaging. Since I didn’t have access to the actual object which was being activated from the other script, I could’ve implemented some sketchy catcher events. Instead of saying “if event.obj == the_obj” I’d need to say “if is type prop and is subtypeand … and …” then stick this into any event would could cause the entrance to activate. Messy code and vulnerable to holes. The simple message is the obvious way to go. It’s all about writing safe, robust, bulletproof code. Cuts down on possible bugs down the line.

After RCR is done I’ll write a whole article on the dozen or so of these scenarios which lead to great progress and robust functionality that didn’t feel like hacks or duct tape.

…and this new functionality took less time to do than I spent writing this article. EFFICIENCY FTW!

Posted in Programming | 2 Comments

Long awaited “Grand Theftendo” to finally be revealed @ GDC

Grand Theftendo, the precursor to Retro City Rampage which ran on actual NES hardware.


It’s been a long time since Grand Theftendo’s original announcement in the fall of 2004. Many of you have been very curious as to what it was like, how it played and eager to see it in action. Well, your patience has paid off. I will finally reveal the precursor to Retro City Rampage on Tuesday March 1st in a lecture at GDC’s Independent Games Summit in San Francisco.

In the talk titled The Next Steps of Indie: Four Perspectives, I delve into the development of Retro City Rampage starting from the beginning. From December 2002 when I started experimenting with NES programming and sketching a top down Grand Theft Auto III city on graph paper, to building my own tools, programming language, development hardware and announcing my first open world title, “Grand Theftendo” in the fall of 2004. After a number of years of development on it part-time, I decided to do an original game on modern platforms instead, still retaining the vision of an 8-bit open world crime game. This new game eventually earned the name, “Retro City Rampage” and became the nostalgic comedy you’re all eagerly anticipating for Xbox LIVE Arcade and WiiWare later this year.

Grand Theftendo will finally be shown in motion where you’ll see GTAIII re-envisioned in 8-bit. I’ll also show off the tools and a bunch of the source code for the tech savvy! I’ll follow it up by showing off the new tools I built for developing Retro City Rampage!

Below, a picture of the development hardware. It required a few too many soldering fumes and some frozen fingers from a cold garage to build… but was so much fun none the less.


I hope to see you all there. I’m an open book and happy to answer questions/hear about your projects as well.

The Next Steps of Indie: Four Perspectives

Tuesday 1:45- 2:45 Room 135, North Hall

More details: http://schedule.gdconf.com/session/12343

Posted in Uncategorized | 7 Comments

Retro City Rampage Remix Competition Relaunches with SoundCloud & $400+ in Additional Prizes

SoundCloud has launched their first ever video game remix competition and it’s with Retro City Rampage! They’re also providing over $400 of additional prizes to the winner and runners up. Huge thanks to SoundCloud, it’s a great honor!

The first place winner will now receive a SoundCloud Pro account (€250/$340 USD) in addition to the signed NES cartridge case and game box. The 2nd & 3rd place remixers will win a Lite account (€29/$40 USD) in addition to the signed cartridge labels, and 4th & 5th place will win labels as well! Many chances to win!

For those of you that need a bit more time, we’ve also extended the contest deadline by two weeks to March 28, 2011 so there’s no reason not to submit your prize winning mix!

Of course, chiptune remixers plugging away in their trackers remixing the .it will still be able to win any (and possibly all) the prizes.


Help us celebrate the IGF Excellence in Audio nomination at GDC February 28th to March 4th where Retro City Rampage will also be playable on the expo show floor!


Remix details:
http://www.retrocityrampage.com/remix.php

SoundCloud Page:
http://soundcloud.com/groups/retro-city-rampage-remix-competition

SoundCloud’s official release:
http://soundcloud.tumblr.com/post/2974395807/our-friends-over-at-retro-city-rampage-have

Posted in Uncategorized | 1 Comment

GameFAN Magazine #5 out now!

The latest issue of the amazing GameFAN magazine is out now and contains a huge behind the scenes interview aimed not just at fans of the game, but aspiring developers too.

Learn more about RCR, its history, getting into the industry, what’s involved in getting a game out the door and more! I’m so happy to share my knowledge and experience with others and hopefully give aspiring developers a leg up!

Big thanks to GameFAN for taking the time to do such a fantastic interview. More info on picking it up: http://gamefanmag.com

Posted in Uncategorized | Tagged , , | Leave a comment