Archive for the 'I Made This' Category

Source code for Jumpman, iJumpman, and The Snap

Tuesday, May 10th, 2011

I have just released the source code to my games, because why not.

The source code for Jumpman and iJumpman can be found here.

The source code for The Snap can be found here.

The code, art and music is available under the Creative Commons “Attribution-NonCommercial 3.0 Unported” license, which means it is free to use for noncommercial use as long as you credit the original creators. You can find more information about this at the Bitbucket pages. (If you find this license too restrictive, I suggest checking out Jumpcore instead.) Both games were created in C++.

Thanks to everyone who played these games, and if anyone finds the source useful, I’d be curious to hear about it!

Jumpcore 2

Sunday, April 3rd, 2011

Short version: Here’s an MIT-licensed open source C++ game framework that lets you write your game once and immediately have it run on Mac, Windows, Linux, iPhone, WebOS and Android 2.3. It packages together all the basic libraries you need to get started with writing a game, and makes mobile porting easy by abstracting away the incompatibilities between OpenGL, OpenGL ES 1.0, and OpenGL ES 2.0.

The project is hosted on Bitbucket, so you can download the source yourself by doing one of the following:

  • hg clone https://bitbucket.org/runhello/jumpcore
  • svn co https://bitbucket.org/runhello/jumpcore/trunk
  • Visit the Bitbucket page and click “get source” in the upper right corner.

Here’s a little physics demo that comes with Jumpcore, shown running on PC, iPhone, and Android:


Long version: When I first started writing C++ games a few years ago, I quickly discovered that there was a lot of stuff that you really need in order to write a game but which SDL+OpenGL don’t provide out of the box– things like text display, or build scripts for a crossplatform binary. So once I’d actually finished my game, I decided to package up the basic skeleton of my game into the thing I wished had existed when I started coding games– a package to serve as a bridge between “there exist cross-platform game libraries in the world” and “I can actually sit down and create a game in C++”. Once I’d put this package together, I found it useful myself for rapidly prototyping new game ideas. I released this a year or so ago as “Jumpcore”, with support for Mac, Windows and Linux; what I can announce today is a new version that adds support for mobile platforms (iPhone and Android). I’ve also set up a project on BitBucket; what I would like is if this could grow into something like a free and open-source version of Airplay SDK, or a stripped-down Unity.

Jumpcore is minimal; it tries to set things up for you and then get out of the way, allowing you to develop your own “engine” as you see fit. Most of the functionality is provided by a selection of open source libraries I’ve bundled in. Jumpcore comes with:

- SDL and GLee for event and window handling (on desktop platforms)
- Chipmunk version 5.3.4 (2D physics engine)
- A modified FTGL ES (freetype text display library) with OpenGL ES 2.0 support
- TinyXML
- LodePNG, and a simple texture loader based on LodePNG
- A generator and loader for texture atlases based on a script by Retro Affect
- Pthreads for win32

Included code unique to Jumpcore includes:

- A simple GUI interface library (based on Chipmunk spatial hashes)
- Event wrappers unifying SDL mouse events with iPhone and Android touch events
- Wrappers for getting the paths of “internal” files
- A set of OpenGL wrappers that abstract away the differences between OpenGL, OpenGL ES 1.0, and OpenGL ES 2.0, meaning you can write your OpenGL code on mobile platforms the same way you write it on desktop platforms.

Getting started

Developing with Jumpcore basically just means implementing a few simple callbacks. You can find quick instructions and links documenting all the functions in the included libraries at the Getting Started page on the BitBucket wiki.

Compiling

Jumpcore uses GCC on all platforms, however you will need a different version of GCC (XCode, mingw, etc) to compile each of the different targets. You can compile all five targets on one machine as long as that one machine is a Macintosh (Linux and Windows users may need to find a mac before they can compile for Mac and iPhone). You can find detailed build instructions at the How to Build page on the BitBucket wiki.

Caveats and future development

Jumpcore is a work in progress; as I mentioned this is the base I use for starting new projects, so I should be improving it as my main projects continue. For a list of known gotchas and things yet to be done, please see the TODO page, again on the BitBucket wiki. Note: Some of the limitations in this initial release of Jumpcore 2 are quite serious, particularly on the Android version, so you should probably read this page.

If you have problems compiling this or getting it to work, please do let me know. Thanks!

The Snap

Monday, February 28th, 2011

A first person shooter

Download (1.0, r219)

How to Play

    The Snap is a two-player deathmatch shooter with time travel. Time in the Snap arena takes place in a loop. 20 seconds or so after the start of each game, the events of the game will begin to repeat themselves. You can also jump back in time by about five seconds or so by performing a Snap.

    If you interact with the past, you will change the present. If you shoot someone in the past, you will damage them in the present. If you block a bullet in the past, thus preventing someone from getting hit by that bullet, damage in the present will be undone.

    For best results, I suggest using a gamepad with analog thumbsticks (you can fit both players on one gamepad if you try!); also, since the game uses stereo sound with the sounds “heard” by one player going to each ear, I suggest plugging in a pair of earbuds and giving each player one earbud.

    10 levels are included, and you can make your own; if anyone tries out the custom levels feature, please do post below and let me know.

Future development?

    This a prototype of sorts, created in 40 days for the Tigsource Versus competition. I’d be interested in making a more complex game with more complex environments and online play (maybe a “real” first person shooter or a 2D platformer with free-aiming guns) using the time engine someday. Is there interest in this?

A Game of the Year 2010 Poll: Results

Sunday, January 9th, 2011

CLICK HERE TO JUMP TO THE PRETTY COLOR-CODED FULL RESULTS

This explanation will look a lot like that of previous years, but:

Every year since 2004 I’ve been hosting this Game of the Year poll for the users of some forums I read. There are a lot of GOTY polls out there, but this one I think is kind of special. Most polls, you’re given a list of four or five options and you’re asked to pick the one you liked best. This poll, people are given a list of a couple of hundred options, consisting of every new game released in the previous year– and asked to rate their top ten or twenty.

This does a few interesting things. First off, we get to see all the information about what people’s second, third etc choices are. Second off, because the second, third etc choices count, people are more likely to vote for the game they want to win, rather than the game they think is likely to win– they’re less likely to engage in “strategic voting”. Finally, because we have all this information, we’re actually able to provide somewhat reasonable rankings for something like the top hundred or so games of last year.

The full results– showing the exact number of voters who ranked each game first, second, third place etc– can be found here. In the meantime, the final results were:

  1. Mass Effect 2 (8125) *** GAME OF THE YEAR ***
  2. Red Dead Redemption (4887)
  3. Starcraft 2 (3930)
  4. Minecraft (3678)
  5. Fallout: New Vegas (3513)
  6. Super Meat Boy (3205)
  7. Super Mario Galaxy 2 (3006)
  8. Halo Reach (2713)
  9. Battlefield: Bad Company 2 (2505)
  10. Civilization V (2444)
  11. Assassin’s Creed: Brotherhood (2378)
  12. Bayonetta (2257)
  13. Darksiders (1967)
  14. Just Cause 2 (1865)
  15. World of Warcraft: Cataclysm (1855)
  16. Angry Birds (1740)
  17. Alpha Protocol (1677)
  18. Call of Duty: Black Ops (1604)
  19. Heavy Rain (1573)
  20. VVVVVV (1523)

The numbers in parentheses are the final scores each game got under the poll’s ranking system. Thanks if you voted, and some more elaborate analysis of the results (plus an explanation of the scores) can be found below.

NOTEWORTHY WINNERS

  • GOTY 2010:

    #1, Mass Effect 2

  • Top-ranked PC Exclusive:

    #3, Starcraft 2

  • Top-ranked Wii Exclusive:

    #7, Super Mario Galaxy 2

  • Top-ranked 360 Exclusive:

    #8, Halo Reach

  • Top-ranked iPhone/Android Exclusive:

    #16, Angry Birds

  • Top-ranked PS3 Exclusive:

    #19, Heavy Rain

  • Top-ranked DS Exclusive:

    #31, Dragon Quest IX: Sentinels of the Starry Skies

  • Top-ranked PSP Exclusive:

    #64, Valkyria Chronicles 2

  • Best RPG:

    #1, Mass Effect 2

  • Best FPS:

    #4, Minecraft

  • Best “Indie” Game:

    #4, Minecraft

  • Best Game Available Through A Console Download Service:

    #6, Super Meat Boy

  • Best Browser Game:

    #48, Robot Unicorn Attack

  • “Cult” Award (see below):

    #52, Deadly Premonition

  • Best Downloadable Game (XBLIG division):

    #59, Breath of Death VII: The Beginning

NOTEWORTHY LOSERS

  • Best game of 2010 which somehow nobody considered to be their #1 pick: #35, Alien Swarm
  • Worst game of 2010 that at least one person considered their #1 pick: #200, 3D Infinity (This is an XBLIG game; Only one person voted for this at all)
  • Worst game of 2010: #237, Dead Nation (Only one person voted for this; it was their #20 pick)

There were 23 games on the nominations list no one voted for at all.

ALTERNATE SCORING METHODS

The rankings listed above are based on a version of the Borda count voting method. Each vote cast for a game gives that game a certain number of points. If someone ranks a game #1, that game gets 20 points. If they rank it #2, the game gets 19 points. If they rank it #3 the game gets 18 points… and so on. I have a script that checks a couple of alternate ways of ranking the same data, though.

For example, if we rank games only by the number of first post votes they got, we get a wildly different list, with tons of games listing that weren’t anywhere near the top 20:

First Past the Post

  1. Mass Effect 2 (231)
  2. Red Dead Redemption (69)
  3. Starcraft 2 (47)
  4. Super Mario Galaxy 2 (40)
  5. Minecraft (35)
  6. Fallout: New Vegas (29)
  7. Bayonetta (20)
  8. Super Meat Boy (19)
  9. Battlefield: Bad Company 2 (18)
  10. Alpha Protocol (15)
  11. World of Warcraft: Cataclysm (15)
  12. Dragon Quest IX: Sentinels of the Starry Skies (14)
  13. Deadly Premonition (12)
  14. Rock Band 3 (11)
  15. Civilization V (10)
  16. Alan Wake (10)
  17. Halo Reach (10)
  18. S.T.A.L.K.E.R.: Call of Pripyat (10)
  19. Super Street Fighter 4 (9)
  20. Call of Duty: Black Ops (9)

Most years when I look at the first-past-the-post list a “cult” game usually emerges that received very few overall votes, but where an overwhelming percentage of those votes were #1 votes; this year actually seemed to have more “cult” games than normal, but I think the cult award was pretty clearly earned here by Deadly Premonition, which went from a ridiculous #52 in the normal ranking to #13 in the first-place-votes ranking. Also noteworthy here though were Dragon Quest IX (jumps from #31 to #12) and S.T.A.L.K.E.R. Call of Pripyat (jumps from #37 to #15, tying with Halo).

I also did two more ways of sorting the rankings: an “approval” vote, where nothing is counted except the number of votes a game received (i.e. a first-place and a twentieth-place ranking count the same– all the matters is if the game was on someone’s list); and an instant runoff vote. Your eyes are probably starting to glaze over at this point, and these rankings very rarely differ from the Borda rankings, so I bolded the places where these two votes differ from the official rank. A small observation: 858 people voted this year. More than half placed some sort of vote for Mass Effect 2.

Approval

  1. Mass Effect 2 (440)
  2. Red Dead Redemption (284)
  3. Starcraft 2 (241)
  4. Minecraft (235)
  5. Fallout: New Vegas (217)
  6. Super Meat Boy (210)
  7. Super Mario Galaxy 2 (182)
  8. Halo Reach (177)
  9. Battlefield: Bad Company 2 (165)
  10. Civilization V (163)
  11. Bayonetta (155)
  12. Assassin’s Creed: Brotherhood (146)
  13. Darksiders (144)
  14. Angry Birds (137)
  15. Just Cause 2 (135)
  16. Scott Pilgrim vs The World (115)
  17. Alpha Protocol (115)
  18. Call of Duty: Black Ops (115)
  19. Heavy Rain (114)
  20. World of Warcraft: Cataclysm (114)

IRV

  1. Mass Effect 2
  2. Red Dead Redemption
  3. Starcraft 2
  4. Minecraft
  5. Fallout: New Vegas
  6. Super Meat Boy
  7. Super Mario Galaxy 2
  8. Halo Reach
  9. Battlefield: Bad Company 2
  10. Civilization V
  11. Assassin’s Creed: Brotherhood
  12. Bayonetta
  13. Darksiders
  14. Just Cause 2
  15. Angry Birds
  16. World of Warcraft: Cataclysm
  17. Alpha Protpcol
  18. Call of Duty: Black Ops
  19. Alan Wake
  20. Heavy Rain

FINALLY: PER-FORUM BREAKDOWNS

As mentioned before, this poll mostly exists for a handful of video game forums where some people I know post. Since a couple years ago when I started posting the results on this blog, I’ve tried to actually run some extra results, in each case counting only those voters who– as far as one could tell from looking at the logs– had come to the poll from one particular forum or other.

So, here you have it– these numbers aren’t totally accurate because my logging method is not entirely trustworthy, but here’s an approximate by-forum breakdown of these results. Links go to color-coded full listings.

Penny Arcade Forums (666 voters)

  1. Mass Effect 2
  2. Red Dead Redemption
  3. Starcraft 2
  4. Fallout: New Vegas
  5. Minecraft
  6. Halo Reach
  7. Super Mario Galaxy 2
  8. Super Meat Boy
  9. Civilization V
  10. Battlefield: Bad Company 2
  11. Assassin’s Creed: Brotherhood
  12. Darksiders
  13. Bayonetta
  14. World of Warcraft: Cataclysm
  15. Just Cause 2
  16. Alpha Protocol
  17. Angry Birds
  18. Call of Duty: Black Ops
  19. Heavy Rain
  20. God of War 3

Tigsource.com (39 voters)

  1. Super Meat Boy
  2. VVVVVV
  3. Minecraft
  4. Mass Effect 2
  5. Super Crate Box
  6. Starcraft 2
  7. Super Mario Galaxy 2
  8. Hero Core
  9. Halo Reach
  10. Amnesia: The Dark Descent
  11. Fallout: New Vegas
  12. Red Dead Redemption
  13. Recettear: An Item Shop’s Tale
  14. Battlefield: Bad Company 2
  15. Alan Wake
  16. Donkey Kong Country Returns
  17. Limbo
  18. Dragon Quest IX: Sentinels of the Starry Skies
  19. Alien Swarm
  20. Hydorah
Platformers.net (38 voters)

  1. Mass Effect 2
  2. Super Mario Galaxy 2
  3. Bayonetta
  4. Super Meat Boy
  5. Fallout: New Vegas
  6. Dragon Quest IX: Sentinels of the Starry Skies
  7. Red Dead Redemption
  8. Minecraft
  9. Assassin’s Creed: Brotherhood
  10. Super Street Fighter 4
  11. Bioshock 2
  12. Robot Unicorn Attack
  13. Tatsunoko vs Capcom: Ultimate All Stars
  14. Game Dev Story
  15. Battlefield: Bad Company 2
  16. Ace Attorney Investigations: Miles Edgeworth
  17. Shin Megami Tensei
  18. Lara Croft and the Guardian of Light
  19. Pokemon Heart Gold / Soul Silver
  20. Just Cause 2

Thearcadians.net (27 voters)

  1. Mass Effect 2
  2. Red Dead Redemption
  3. Halo Reach
  4. Battlefield: Bad Company 2
  5. Starcraft 2
  6. Fallout: New Vegas
  7. Rock Band 3
  8. Assassin’s Creed: Brotherhood
  9. NHL 11
  10. Minecraft
  11. Bioshock 2
  12. Limbo
  13. Pokemon Heart Gold / Soul Silver
  14. Monday Night Combat
  15. Angry Birds
  16. Alan Wake
  17. Super Street Fighter 4
  18. Call of Duty: Black Ops
  19. World of Warcraft: Cataclysm
  20. Blur

iJumpman (Jumpman for iPhone)

Wednesday, March 17th, 2010

My free Mac/PC game Jumpman is now available for iPhone, iPod Touch, and iPad.

HOW TO GET IT

  • Click here or search on the App Store for “iJumpman”.

GAMEPLAY VIDEO

FEATURES

  • All the content from the PC version
  • Gesture and tilt controls (plus optional button control scheme)
  • Full in-game soundtrack (plus iTunes library support)
  • Full level editor with integrated online level swapping
  • Supported languages: English, Spanish, French, German

PLOT

  • Guide Jumpman to the exit.

A Game of the Year 2009 Poll: Results

Friday, January 8th, 2010

CLICK HERE TO JUMP TO THE PRETTY COLOR-CODED FULL RESULTS

This explanation will look a lot like last year’s, but:

Every year since 2004 I’ve been hosting this Game of the Year poll for the users of some forums I read. There are a lot of GOTY polls out there, but this one I think is kind of special. Most polls, you’re given a list of four or five options and you’re asked to pick the one you liked best. This poll, people are given a list of a couple of hundred options, consisting of every new game released in the previous year– and asked to rate their top ten or twenty.

This does a few interesting things. First off, we get to see all the information about what people’s second, third etc choices are. Second off, because the second, third etc choices count, people are more likely to vote for the game they want to win, rather than the game they think is likely to win– they’re less likely to engage in “strategic voting”. Finally, because we have all this information, we’re actually able to provide somewhat reasonable rankings for something like the top hundred or so games of last year.

The full results– showing the exact number of voters who ranked each game first, second, third place etc– can be found here. In the meantime, the final results were:

  1. Batman: Arkham Asylum (7772) *** GAME OF THE YEAR ***
  2. Dragon Age: Origins (7019)
  3. Borderlands (5579)
  4. Call of Duty: Modern Warfare 2 (4458)
  5. Left 4 Dead 2 (4295)
  6. Assassin’s Creed II (4205)
  7. Uncharted 2: Among Thieves (3858)
  8. Torchlight (3792)
  9. New Super Mario Bros. Wii (3386)
  10. Resident Evil 5 (2941)
  11. Street Fighter IV (2576)
  12. Shadow Complex (2460)
  13. Demon’s Souls (2342)
  14. Halo 3: ODST (2104)
  15. Brütal Legend (2008)
  16. The Beatles: Rock Band (1991)
  17. Infamous (1844)
  18. Plants vs. Zombies (1773)
  19. Scribblenauts (1752)
  20. Prototype (1720)

The numbers in parentheses are the final scores each game got under the poll’s ranking system. Thanks if you voted, and some more elaborate analysis of the results (plus an explanation of the scores) can be found below.

NOTEWORTHY WINNERS

  • GOTY 2009:

    #1, Batman: Arkham Asylum

  • Top-ranked PS3 Exclusive:

    #7, Uncharted 2: Among Thieves

  • Top-ranked PC Exclusive:

    #8, Torchlight

  • Top-ranked Wii Exclusive:

    #9, New Super Mario Bros. Wii

  • Top-ranked 360 Exclusive:

    #12, Shadow Complex

  • Top-ranked DS Exclusive:

    #19, Scribblenauts

  • Top-ranked PSP Exclusive:

    #46, Dissidia: Final Fantasy

  • Top-ranked iPhone Exclusive:

    #56, Canabalt

  • Best RPG:

    #2, Dragon Age: Origins

  • Best FPS:

    #3, Borderlands

  • Best Game Only Available Through A Console Download Service:

    #12, Shadow Complex

  • Best “Indie” Game? (I’m not even sure I know what that word means.):

    #18, Plants vs Zombies

NOTEWORTHY LOSERS

  • Best game of 2009 which somehow nobody considered to be their #1 pick: #30, Punch-Out!!
  • Worst game of 2009 that at least one person considered their #1 pick: #248, Harvest Moon: Animal Parade (Only one person voted for this at all)
  • Worst game of 2009: #284, Mario & Sonic at the Olympic Winter Games (Only one person voted for this; it was their #20 pick)

There were 17 games on the nominations list no one voted for at all. Also, FIFA 10– which was left off the nominations list by complete accident– probably deserves some kind of special “moral victory” award for the sheer number of people who were upset about its absence.

ALTERNATE SCORING METHODS

The rankings listed above are based on what was originally intended to be an approximation of Condorcet voting, but which I’m told is actually closer to the Borda count. In my Borda-ish voting method, each vote cast for a game gives that game a certain number of points. If someone ranks a game #1, that game gets 20 points. If they rank it #2, the game gets 19 points. If they rank it #3 the game gets 18 points… and so on. I have a script that checks a couple of alternate ways of ranking the same data, though.

For example, if we rank games only by the number of first post votes they got, we get a wildly different list, with the most obvious difference being Batman and Dragon Age swapping places:

First Past the Post

  1. Dragon Age: Origins (134)
  2. Batman: Arkham Asylum (119)
  3. Uncharted 2: Among Thieves (111)
  4. Borderlands (58)
  5. New Super Mario Bros. Wii (45)
  6. Left 4 Dead 2 (45)
  7. Assassin’s Creed II (41)
  8. Demon’s Souls (41)
  9. Call of Duty: Modern Warfare 2 (32)
  10. Street Fighter IV (25)
  11. Brütal Legend (14)
  12. The Beatles: Rock Band (13)
  13. Shadow Complex (12)
  14. Torchlight (12)
  15. Resident Evil 5 (11)
  16. Halo 3: ODST (10)
  17. Muramasa: The Demon Blade (9)
  18. Warhammer 40,000: Dawn of War II (8)
  19. Red Faction: Guerrilla (7)
  20. Forza Motorsport 3 (7)
  21. Infamous (7)
  22. Little King’s Story (7)
  23. Machinarium (7)

Most years when I look at the first-past-the-post list a “cult” game usually emerges that received very few overall votes, but where an overwhelming percentage of those votes were #1 votes; this year there was no obvious leader in the “cult” category, although the jump in ranking for Demon’s Souls seems pretty significant, and Murasama (which jumps from #37 to #17) and Machinarium and Little King’s Story (which jump from #40 and #48 to a five-way tie for 19th place) seem worth mentioning.

I also did two more ways of sorting the rankings: an “approval” vote, where nothing is counted except the number of votes a game received (i.e. a first-place and a twentieth-place ranking count the same– all the matters is if the game was on someone’s list); and an instant runoff vote. Your eyes are probably starting to glaze over at this point, so I bolded the places where these two votes differ from the normal rankings:

Approval

  1. Batman: Arkham Asylum (438)
  2. Dragon Age: Origins (395)
  3. Borderlands (347)
  4. Call of Duty: Modern Warfare 2 (281)
  5. Left 4 Dead 2 (265)
  6. Torchlight (255)
  7. Assassin’s Creed II (247)
  8. Resident Evil 5 (215)
  9. New Super Mario Bros. Wii (213)
  10. Uncharted 2: Among Thieves (210)
  11. Shadow Complex (175)
  12. Street Fighter IV (172)
  13. Brütal Legend (148)
  14. Halo 3: ODST (146)
  15. Demon’s Souls (143)
  16. Scribblenauts (141)
  17. The Beatles: Rock Band (133)
  18. Prototype (131)
  19. Plants vs. Zombies (130)
  20. Infamous (126)

IRV

  1. Batman: Arkham Asylum (438)
  2. Dragon Age: Origins (395)
  3. Borderlands (347)
  4. Left 4 Dead 2 (265)
  5. Torchlight (255)
  6. Uncharted 2: Among Thieves (210)
  7. Assassin’s Creed II (247)
  8. Call of Duty: Modern Warfare 2 (281)
  9. New Super Mario Bros. Wii (213)
  10. Resident Evil 5 (215)
  11. Street Fighter IV (172)
  12. Shadow Complex (175)
  13. Demon’s Souls (143)
  14. Brütal Legend (148)
  15. Halo 3: ODST (146)
  16. Scribblenauts (141)
  17. Infamous (126)
  18. The Beatles: Rock Band (133)
  19. Prototype (131)
  20. Plants vs. Zombies (130)

FINALLY: PER-FORUM BREAKDOWNS

As mentioned before, this poll mostly exists for a handful of video game forums where some people I know post. Since a couple years ago when I started posting the results on this blog, I’ve tried to actually run some extra results, in each case counting only those voters who– as far as one could tell from looking at the logs– had come to the poll from one particular forum or other.

So, here you have it– these numbers aren’t totally accurate because my logging method is not entirely trustworthy, but here’s an approximate by-forum breakdown of these results. Links go to color-coded full listings.

Penny Arcade Forums (767 voters)

  1. Batman: Arkham Asylum
  2. Dragon Age: Origins
  3. Borderlands
  4. Call of Duty: Modern Warfare 2
  5. Left 4 Dead 2
  6. Assassin’s Creed II
  7. Uncharted 2: Among Thieves
  8. Torchlight
  9. New Super Mario Bros. Wii
  10. Resident Evil 5
  11. Street Fighter IV
  12. Shadow Complex
  13. Demon’s Souls
  14. The Beatles: Rock Band
  15. Halo 3: ODST
  16. Brütal Legend
  17. Infamous
  18. Prototype
  19. Scribblenauts
  20. Warhammer 40,000: Dawn of War II

Tigsource.com (48 voters)

  1. Machinarium
  2. Star Guard
  3. Scribblenauts
  4. Canabalt
  5. Borderlands
  6. Assassin’s Creed II
  7. Captain Forever / Successor
  8. Don’t Look Back
  9. Dragon Age: Origins
  10. Don’t **** Your Pants
  11. Au Sable
  12. Left 4 Dead 2
  13. Plants vs. Zombies
  14. Small Worlds
  15. Call of Duty: Modern Warfare 2
  16. Torchlight
  17. Blueberry Garden
  18. Glum Buster
  19. RunMan: Race Around the World
  20. Brütal Legend
Platformers.net (45 voters)

  1. Batman: Arkham Asylum
  2. Dragon Age: Origins
  3. New Super Mario Bros. Wii
  4. Torchlight
  5. Street Fighter IV
  6. Uncharted 2: Among Thieves
  7. Shadow Complex
  8. Borderlands
  9. Punch-Out!!
  10. Retro Game Challenge
  11. Professor Layton and the Diabolical Box
  12. Rhythm Heaven
  13. Left 4 Dead 2
  14. Brütal Legend
  15. Halo 3: ODST
  16. The Legend of Zelda: Spirit Tracks
  17. Red Faction: Guerrilla
  18. Infamous
  19. Demon’s Souls
  20. Mario & Luigi: Bowser’s Inside Story

Thearcadians.net (26 voters)

  1. Call of Duty: Modern Warfare 2
  2. Borderlands
  3. Batman: Arkham Asylum
  4. Forza Motorsport 3
  5. Dragon Age: Origins
  6. Torchlight
  7. Uncharted 2: Among Thieves
  8. Left 4 Dead 2
  9. Shadow Complex
  10. Assassin’s Creed II
  11. Halo 3: ODST
  12. Brütal Legend
  13. Trials HD
  14. Infamous
  15. Red Faction: Guerrilla
  16. Street Fighter IV
  17. Battlefield 1943
  18. 1 vs. 100
  19. Ghostbusters: The Video Game
  20. Resident Evil 5

Jumpcore: A starting point for SDL/OpenGL games

Wednesday, July 1st, 2009

NON-PROGRAMMERS READ THIS

Here, download this silly physics toy:

    “Typewriter”

Controls: Keyboard, mouse, F1, F4, ESC

PROGRAMMERS READ THIS

(UPDATE 4/11: Instead please see the page for Jumpcore 2.0.)

When I started writing Jumpman, something that frustrated me was that there are a couple of seemingly basic things that SDL/OpenGL doesn’t actually provide out of the box, and that I couldn’t seem to find a really good source for sample code for– things like drawing text, or creating a simple GUI, or building a crossplatform binary. So once the game was done I decided to clean up my code a little, strip out the “Jumpman” parts and release the basic skeleton as open source sample code. Below is that code, and a small tutorial on setting up Mac OS X such that it can build Windows and Linux executables. The hope is to make an overall package that would allow someone starting an SDL/OpenGL game to just sit down and start writing, rather than having to spend time downloading and fiddling with libraries.

The Jumpcore package comes in two versions. A minimal version that includes only:

  • The ability to draw text (provided by the Freetype and FTGL libraries).
  • A code snippet for managing “internal files” (which live in a directory named “Internal” on windows/linux, and inside the application package in OS X)
  • Alt-tab support for OS X (SDL does not do this out of the box for fullscreen apps)
  • Makefiles (and one .xcodeproj) for Windows, Mac and Linux

And a more fully featured version that also comes packaged with:

  • The Chipmunk 2D physics library
  • The LodePNG library (and a code snippet for loading PNGs into OpenGL textures)
  • The TinyXML library
  • Some color conversion routines
  • A minimal “ControlBase” GUI library (dependent on Chipmunk)
  • The “Typewriter” demo code linked at the top of this post.

The included libraries were picked in an attempt to include all the basic stuff a game needs, while still making the package as easy as possible to port and reuse in weird situations: all the libraries are self-contained and except for SDL itself can be built from the package as source where necessary; nothing depends on anything more complicated than the STL– I avoided heavyweight dependencies like Ogre or libpng; and everything is under a BSD-like license. The biggest limitation of the package at the moment is that it’s a bit mac-centric (I have not tested it with Visual Studio or Dev-C++).

Basically, here’s a box full of Legos and half a robot. Have fun.

DOWNLOAD

HOW TO BUILD

Included is a Jumpcore.xcodeproj for compiling on mac, which can be compiled with XCode; windows makefile and support files are in a folder named win/, and can be compiled with mingw; Linux makefile and support files are in a folder named lin/, and can be compiled with gcc. More detailed instructions for all three platforms follow:

    If you’re on a mac:

To build a mac executable, from a mac: Included is a Jumpcore.xcodeproj for use with XCode; just build that in Release mode and it should produce a 10.3.9-compatible universal binary (though note, I’ve not specifically tested it with 10.3.9).

    If you’re on a mac and you want to build a Windows executable:

Here’s the best way I’ve found to do this:

  1. There is a “Cross Compilers for Mac OS X” page here that actually has OS X installers for mingw. PPC and Intel versions are included; I installed 4.3.0 for Intel. The only problem with these particular installers is they install into strange places, so whichever installer from that page you pick, write down the “Installation directory” listed to the right of it.
  2. Once you’ve installed an installer from that page, you need to install SDL headers. In order to do this, go to the SDL download page and look under “Development Libraries” -> “Win32″ -> “Mingw32″. Download that tarball. Once you’ve downloaded it ignore the “INSTALL” file, which is full of lies, and do this: Edit the “Makefile” in the directory so that the “CROSS_PATH” on line 4 is the “Installation directory” you wrote down in step 1. Like in my case this would be:
      CROSS_PATH := /usr/local/i386-mingw32-4.3.0

    Once you’ve done this, run “sudo make cross” and it will install the SDL headers into your mingw directory.

  3. Go into the “win/” directory. Run “make” with the argument MINGW=[Installation Directory], where [Installation Directory] is again the directory from step 1– in my case this would be
      make MINGW=/usr/local/i386-mingw32-4.3.0

A directory named “Jumpcore” will be created with a Jumpcore.exe and all the support files necessary.

    If you’re on a mac and you want to build a Linux executable:

Just distribute source. No, really. Building Linux binaries for distribution is tricky, and binaries aren’t what people want anyway. However if you want to do what I did and chicken out, what I recommend is installing Virtual Box or Q (probably Virtual Box, though Q is what I used) and loading up an Ubuntu install CD. This is quicker and easier than trying to set up a cross compile. Then go into the “lin/” directory and type “make”.

    If you’re on Windows:

I was able to successfully compile Jumpcore on Windows by doing the following:

  1. Download and install MinGW. (Make sure to install the C++ package.)
  2. Download and install MSYS (it’s part of MinGW, but a separate download)
  3. As described on the MinGW install HOWTO, add C:\MinGW\bin to your path: right-click “My Computer”, click “Advanced”, click “Environment Variables”, double-click the line that says “PATH”, and in the second line add the characters ;C:\MinGW\bin
  4. Go to the SDL download page and look under “Development Libraries” -> “Win32″ -> “Mingw32″. Download that tarball and open up its contents in MSYS. Type “make native” and it will install itself.
  5. A kind of odd step: right-click the file “README.txt”, open it in Wordpad, and immediately save it. (This will strip out my evil UNIX newlines.)
  6. Go into the directory win/ and run: make WINDOWS=1

This will create an install directory named “Jumpcore”. If you want to compile for debugging, in that last step type: make WINDOWS=1 DEBUG=1

    If you’re on Linux:

Install Freetype and SDL. Go into the directory lin/ and run make. This will create an install directory named “Jumpcore”. If you want to compile for debugging, instead type: make DEBUG=1

GETTING STARTED

Once you get the thing built, you’re going to want to start focusing on swapping out the Typewriter code for your own code. Jumpcore consists of a main.cpp that does basic bringup/teardown and event loop work hopefully good enough for most games, and makes callbacks as appropriate into a display.cpp (display logic) and a program.cpp (game logic) you provide. You’ll want to implement the following methods:

In display.cpp

    display_init() – This is called once each time the display surface is initialized. It’s a good place to do things like initialize fonts and textures. (Note it could be called more than once if the window size ever changes.)

    display() – This is called when it is time to draw a new frame.

    audio_callback() – This is set up as the SDL audio callback.

    drawButton (“full version” only) – This is a cpSpaceEach callback which the default display() calls on each interface item. If you want to change the appearance of the ControlBase controls this is a good place to do that.

In program.cpp

    program_init() – This is called once when the program begins.

    program_update() – The default display() calls this once per framedraw.

    program_eventkey() – This is called when SDL gets a key event.

    program_eventjoy() – This is called when SDL gets a joystick event.

    program_eventmouse() – This is called when SDL gets a mouse event.

    program_interface() – This is called after the event system finishes dispatching events to ControlBase controls, to give the interface a chance to redraw itself.

    BackOut() – Called when ESC is hit (quits).

    AboutToQuit() – Called right before the program quits.

Documentation for the individual libraries and functions included with Jumpcore can be found on these separate pages:

LIMITATIONS AND POSSIBLE FUTURE IMPROVEMENTS

I’m not really sure if this is ultimately going to be useful to anyone, and I don’t intend to maintain it unless there are people actually using it. However if there turns out to be any interest in this there are a few things I’d like to improve in a future release:

  • The package contains everything you need to build a Windows version from a Mac. It would be awesome if I could eventually reach the point where a Windows user could build a Mac version (is that even possible?).
  • Linux version is poorly tested in general. I have reports of issues on 64 bit systems, and the original Jumpman code seemed to have issues with switching to and from full screen mode.
  • The final executable size is pretty large– 2 or 3 MB compressed for the very minimal typewriter demo. I’m curious if this can be improved on. At least on the mac a large chunk of this is taken up by SDL, which gets bundled along with the executable. However, to someone who’s using OpenGL to draw, a lot of this is wasted space– because much of the complexity in SDL is taken up by the 2D drawing support. I’d like to try to swap out the SDL libraries for versions that lack 2D drawing.
  • iPhone compatibility? Now that I’m doing iPhone development I’m becoming pretty firmly convinced it does not make sense to create a single codebase that compiles on both PC and iPhone– the platforms are too different– but maybe it would make sense to rewrite some parts of the typewriter demo to make portability to something like iPhone easier (for example, rewriting the drawing code to be OpenGL ES-compatible).
  • I am not sure that every library included with this is the most recent version.
  • The one “every game needs this” feature that isn’t in this package is configurable joystick/gamepad support. I’m not sure whether it makes sense to try to add it or not.

Finally, there have actually been a number of interesting-looking SDL “game engines” released lately, so you should be aware of those in case one fits your needs better than Jumpcore does. One I’m aware of is 2D Boy’s Boy engine (though that one does not appear to come with build files for anything except Visual Studio); if you know of others feel free to share them in the comments below.

Jumpman

Thursday, February 19th, 2009

I made a video game.

DOWNLOAD (Version 1.0.2)

GAMEPLAY VIDEO

FEATURES

  • Old-school puzzle platforming with some twists
  • Low-definition graphics
  • Gamepad support
  • Full level editor

PLOT

  • Guide Jumpman to the exit.

 
————————————————————————————————————————
 
(OTHER STUFF)

  • There is a collection of user-created levels for Jumpman here.
  • In 2010 I released an iPhone/iPad version of Jumpman.
  • You can find the source code for this game on Bitbucket.

A Game of the Year 2008 Poll: Results

Friday, January 9th, 2009

CLICK HERE TO JUMP TO THE PRETTY COLOR-CODED FULL RESULTS

I’m just gonna copy and paste the explanation I gave last year:

For the last few years I’ve been hosting this Game of the Year poll for the users of some forums I read. There are a lot of GOTY polls out there, but this one I think is kind of special. Most polls, you’re given a list of four or five options and you’re asked to pick the one you liked best. This poll, people are given a list of a couple of hundred options, consisting of every new game released in the previous year– and asked to rate their top ten or twenty.

This does a few interesting things. First off, we get to see all the information about what people’s second, third etc choices are. Second off, because the second, third etc choices count, people are more likely to vote for the game they want to win, rather than the game they think is likely to win– they’re less likely to engage in “strategic voting”. Finally, because we have all this information, we’re actually able to provide somewhat reasonable rankings for something like the top hundred or so games of last year.

The full results– showing the exact number of voters who ranked each game first, second, third place etc– can be found here. In the meantime, the final results were:

  1. Fallout 3 (8780) *** GAME OF THE YEAR ***
  2. Left 4 Dead (6626)
  3. Grand Theft Auto 4 (5032)
  4. Super Smash Bros. Brawl (4321)
  5. Rock Band 2 (3290)
  6. Dead Space (3151)
  7. Gears of War 2 (2942)
  8. Fable 2 (2751)
  9. Braid (2729)
  10. Metal Gear Solid 4 (2666)
  11. Little Big Planet (2520)
  12. No More Heroes (2241)
  13. Audiosurf (2152)
  14. Castle Crashers (2083)
  15. Valkyria Chronicles (2027)
  16. Mario Kart Wii (2014)
  17. The World Ends with You (2000)
  18. World of Warcraft: Wrath of the Lich King (1914)
  19. Penny Arcade Adventures: On The Rain-Slick Precipice of Darkness Ep. 1 (1910)
  20. Sins of a Solar Empire (1850)

The numbers in parentheses are the final scores each game got under the poll’s ranking system. (The scores in general were a lot closer than last year–basically all the rankings 14-18 are within a couple votes of each other!) Thanks if you voted, and some more elaborate analysis of the results (plus an explanation of the scores) can be found below.

NOTEWORTHY WINNERS

  • GOTY 2008:

    #1, Fallout 3

  • Top-ranked Wii Exclusive:

    #4, Super Smash Bros. Brawl

  • Top-ranked 360 Exclusive:

    #7, Gears of War 2

  • Top-ranked PS3 Exclusive:

    #10, Metal Gear Solid 4

  • Top-ranked PC Exclusive:

    #13, Audiosurf

  • Top-ranked DS Exclusive:

    #17, The World Ends With You

  • Top-ranked PSP Exclusive:

    #39, Crisis Core: Final Fantasy VII

  • Best FPS:

    #2, Left 4 Dead

  • Best RPG:

    #1, Fallout 3

  • Best Sports Game:

    #27, Burnout Paradise

  • Best Game Only Available Through A Console Download Service:

    #8, Braid

  • Special “Cult” Award (see below):

    #26, Persona 4 & #15, Valkyria Chronicles (Tie)

NOTEWORTHY LOSERS

  • Best game of 2008 which somehow nobody considered to be their #1 pick: #33, Spore
  • Worst game of 2008 that at least one person considered their #1 pick: #179, Midnight Club: Los Angeles (Only two people voted for this)
  • Worst game of 2008: #203, Mystery Case Files: MillionHEIR (Only one person voted for this; it was their #20 pick)

There were also ten games which were listed, but which no one voted for at all.

ALTERNATE SCORING METHODS

The rankings listed above are based on what was intended to be an approximation of Condorcet voting, but which I’m told is actually closer to the Borda count. In my Borda-ish voting method, each vote cast for a game gives that game a certain number of points. If someone ranks a game #1, that game gets 20 points. If they rank it #2, the game gets 19 points. If they rank it #3 the game gets 18 points… and so on. I have a script that checks a couple of alternate ways of ranking the same data, though.

For example, if we rank games only by the number of first post votes they got, we get a wildly different list:

First Past the Post

  1. Fallout 3 (182 first-place votes)
  2. Left 4 Dead (109)
  3. Super Smash Bros. Brawl (42)
  4. Metal Gear Solid 4 (42)
  5. Valkyria Chronicles (39)
  6. Persona 4 (39)
  7. Grand Theft Auto 4 (35)
  8. Dead Space (31)
  9. Rock Band 2 (30)
  10. The World Ends with You (30)
  11. World of Warcraft: Wrath of the Lich King (30)
  12. Gears of War 2 (23)
  13. Little Big Planet (21)
  14. No More Heroes (19)
  15. Braid (15)
  16. World of Goo (14)
  17. Spelunky (12)
  18. Sins of a Solar Empire (11)
  19. Fable 2 (10)
  20. Prince of Persia (10)

Every year when I do this there’s some game which scores horribly low in the objective rankings but gets a really startling proportion of first-place votes; last year the standout game in the “cult” department was Persona 3; this year the standout was, interestingly enough, Persona 4, which only got 87 votes at all, placing it at #26 in the overall rankings– but nearly half of those votes, a full 39, ranked it in first place, putting it in sixth place in the First Past the Post ranking above. Tying Persona 4 in the First Past the Post ranking is Valkyria Chronicles, which did a little better in terms of how many people voted for it (117 votes) but which still gets a pretty great cult ranking since one in three of those voters considered it their #1 game. (Honorable mention in the cult category should probably go to “Spelunky“, a wildly obscure but kind of awesome freeware pixel art game released in the last two weeks of December, which came in way down at 51st place in the overall rankings but managed to come in 17th in first-pace votes– with again nearly one-third of the people who voted for Spelunky at all rating it #1.)

I also did two more ways of sorting the rankings: an “approval” vote, where nothing is counted except the number of votes a game received (i.e. a first-place and a twentieth-place ranking count the same– all the matters is if the game was on someone’s list); and an instant runoff vote. Most years I’ve done this the Instant Runoff and pseudo-Borda rankings have been almost the same, but this time there were some interesting differences (with the biggest one being, for some reason I don’t understand, World of Goo somehow jumping a good seven spots in the rankings?!). Your eyes are probably starting to glaze over at this point, so I bolded the places where these two votes differ from the normal rankings:

Approval

  1. Fallout 3 (488)
  2. Left 4 Dead (388)
  3. Grand Theft Auto 4 (325)
  4. Super Smash Bros. Brawl (266)
  5. Rock Band 2 (205)
  6. Dead Space (204)
  7. Braid (187)
  8. Gears of War 2 (185)
  9. Fable 2 (184)
  10. Audiosurf (161)
  11. Little Big Planet (161)
  12. Metal Gear Solid 4 (161)
  13. Castle Crashers (160)
  14. Penny Arcade Adventures ep.1  (176)
  15. No More Heroes (155)
  16. Mario Kart Wii (148)
  17. The World Ends with You (129)
  18. Professor Layton and the Curious Village (128)
  19. Mega Man 9 (124)
  20. Sins of a Solar Empire (122)

IRV

  1. Fallout 3
  2. Left 4 Dead
  3. Grand Theft Auto 4
  4. Super Smash Bros. Brawl
  5. Dead Space
  6. Rock Band 2
  7. Gears of War 2
  8. Fable 2
  9. Braid
  10. Metal Gear Solid 4
  11. Little Big Planet
  12. Castle Crashers
  13. Mario Kart Wii
  14. No More Heroes
  15. World of Goo
  16. AudioSurf
  17. The World Ends with You
  18. Valkyria Chronicles
  19. Penny Arcade Adventures ep.1
  20. Sins of a Solar Empire

FINALLY: PER-FORUM BREAKDOWNS

As mentioned before, this poll mostly exists for a handful of video game forums where some people I know post. Since last year when I started posting the results on this blog, I’ve tried to actually run some extra results, in each case counting only those voters who– as far as one could tell from looking at the logs– had come to the poll from one particular forum or other.

So, here you have it– these numbers aren’t totally accurate because my logging method is not entirely trustworthy, but here’s an approximate by-forum breakdown of these results. Links go to color-coded full listings.

Penny Arcade Forums (806 voters)

  1. Fallout 3
  2. Left 4 Dead
  3. Grand Theft Auto 4
  4. Super Smash Bros Brawl
  5. Rock Band 2
  6. Dead Space
  7. Braid
  8. Gears of War 2
  9. Fable 2
  10. Metal Gear Solid 4
  11. Little Big Planet
  12. AudioSurf
  13. Mario Kart Wii
  14. Castle Crashers
  15. No More Heroes
  16. Valkyria Chronicles
  17. World of Warcraft: Wrath of the Lich King
  18. Penny Arcade Adventures ep.1
  19. The World Ends with You
  20. Sins of a Solar Empire

Platformers.net (42 voters)

  1. Super Smash Bros. Brawl
  2. Fallout 3
  3. Left 4 Dead
  4. Apollo Justice: Ace Attorney
  5. No More Heroes
  6. Persona 4
  7. Mega Man 9
  8. Professor Layton and the Curious Village
  9. The World Ends with You
  10. AudioSurf
  11. Grand Theft Auto 4
  12. World of Goo
  13. Dead Space
  14. Castlevania: Order of Ecclesia
  15. Metal Gear Solid 4
  16. Advance Wars: Days of Ruin
  17. Little Big Planet
  18. Rock Band 2
  19. Tales of Vesperia
  20. Braid
360Arcadians.net (37 voters)

  1. Fallout 3
  2. Grand Theft Auto 4
  3. Left 4 Dead
  4. Gears of War 2
  5. Rock Band 2
  6. Metal Gear Solid 4
  7. Fable 2
  8. Geometry Wars: Retro Evolved 2
  9. Little Big Planet
  10. Dead Space
  11. Saints Row 2
  12. Sins of a Solar Empire
  13. Burnout Paradise
  14. Prince of Persia
  15. Valkyria Chronicles
  16. Castle Crashers
  17. NHL 09
  18. Lost Odyssey
  19. Penny Arcade Adventures ep.1
  20. Civilization Revolution

Mechanically Separated Meat (6 voters)

  1. Super Smash Bros Brawl
  2. Professor Layton and the Curious Villiage
  3. Super Street Fighter 2 HD Remix
  4. Mega Man 9
  5. World of Goo
  6. Trauma Center: Under the Knife
  7. The World Ends with You
  8. Iji
  9. Barkley, Shut Up and Jam: Gaiden Hourglass
  10. Fallout 3

Super Mario World vs. the Many-Worlds Interpretation of Quantum Physics

Sunday, February 3rd, 2008

Short version: Just watch this video.

Okay, now what was that?

So a few months back some of my friends were passing around these videos of something called “Kaizo Mario World“, which I was told, at first, translated to “Asshole Mario World”. This turned out to have actually been a misunderstanding of something in the youtube posting of the original creator’s videos:

[Asshole Mario] is not the real name for this series of videos, but it is my personal name for it.
The literal translated name for 自作の改造マリオ(スーパーマリオワールド)を友人にプレイさせる is “Making my friend play through my own Mario(Super Mario World) hack”, hence Kaizo(hack) Mario to the USA.

…but, the name is pretty appropriate. Kaizo Mario World is one of a series of rom hacks people create in special level editors that let you take Super Mario World and rearrange all the blocks; the point of Kaizo appears to have been to create the most evil Super Mario World hack ever.

I started watching these videos, but after seeing how the player got past the first gap stopped, went wait, this actually doesn’t look so bad, and started playing it instead. It’s actually not that bad! I was expecting it to be like Super Mario Frustration, Kaizo Mario World’s equivalent in Super Mario Bros. 1 hacks– all ridiculous jumps that require pixel-perfect timing, memorizing the location of a bunch of hidden blocks that exist only to foil a jump and, occasionally, actually exploiting glitches in the game engine.

Kaizo Mario World actually turns out though really to be kind of more like a puzzle game– giving you a series of seemingly impossible situations and then leaving you to figure out how to get past them. It only uses the sadistic-invisible-block trick sparingly (and, hey, even SMB2JP did that a couple times). And it actually turns out to be kind of fun.

It’s still sadistically hard, though, so if you want to play it you have to use what are called “save states”. Most emulators let you do this kind of save-and-rewind thing, where if you screw up you can back up just a few seconds to the last time you were standing in a safe place. So if you’re playing Kaizo Mario world you find yourself playing the same four-second section over and over and over until you get the jump just right, listening to the same two seconds of the soundtrack looping Steve Reich style

Anyway, the idea for the video up top was inspired by an offhanded comment in the “original” Kaizo Mario World youtube post I linked above:

The original videos were in god awful codecs that were a bitch to convert, so unfortunately the Tool Assisted Speedruns came first to most youtube watchers.
This is rather unfortunate, as I feel you lose a lot of the “appeal” by watching those.

This refers to the way that most emulators, if you are recording a video of yourself playing a game and you do the save-state rewind thing, they’ll rewind the video too, such that the video shows only your final attempt, not any of your messups. People use this to make “speedruns” showing a best-of-all-possible-worlds recording of them playing through some game or other, with all the errors scrubbed out. The guy’s point was that watching Kaizo Mario World this way kind of ruins it, since most of what makes Kaizo great is watching someone fail over and over and over again until they finally get it right.

On the other hand, Kaizo Mario World involves SO much failing that this means all the “real” videos are, like, twenty minutes long just to get through what in a tool-assisted run would have been a two-minute level. So I was thinking, what if you had a special tool that instead of erasing all the screwups, it saved all of them and made a video of all the screwups plus the one successful path superimposed? I kept thinking about this and eventually I just sat down and hacked SNES9X to work exactly like that. The result was the video up top, showing the 134 attempts it took me to successfully get through level 1 of Kaizo Mario World.

I think I’m going to make some more videos in this style of different Kaizo Mario World levels and post them back here, but in the meanwhile, if you want to make your own many-worlds speedrun videos, here’s my custom version of SNES9X 1.43 with the multi-record function:

  1. For the Mac OS X version, click here.

  2. For a Windows version, click here. (Many thanks to Syndalis of 360Arcadians for compiling this for me.)
  3. If you want a Linux version, you’ll have to compile that yourself, but you can do this by finding a copy of the 1.43 source and replacing movie.cpp with this.
  4. And for the full Mac OS X source, click here.


[Update 2/9/08: The Mac version now correctly processes movies recorded in the Windows version.]
[Update 2/10/08: Mac version updated to fix a problem where certain kinds of corrupt recording files could cause the program to loop endlessly; window titlebar now contains status information.]

Note that this is a quickly-tossed-together hack all done to make a single video, and I make NO promises as to the quality, ease-of-use, correctness, or safety of these links. Also, I think the video feature should work with any SNES game, but I’ve only tested it with Kaizo. If anyone attempts to try this yourself, I’d be curious to hear about your results.

To make a video: First, use SNES9X’s “record movie” function to record yourself playing some game; while the game is running, use the save and restore feature at least once. When you’re done, you’ll find that SNES9X has created a yournamehere.smv file and also a series of files with names like yournamehere.smv.1, yournamehere.smv.2, etc. These .number files are all the different “mistake” playthroughs, so keep all these files together in one directory.

To turn this into an actual movie you can watch, you will need to use the OS X version of the emulator. Unfortunately, the Windows and Linux versions can only record multiple-run SMVs– they can’t do the export-to-quicktime thing. The quicktime-export code is based on alterations to the mac-specific parts of 1.43 (although considering that I hear the Quicktime API is mostly identical between Mac and Windows, it might be pretty easy to port that code to Windows at least…).

Anyway, in the OS X version, open up the appropriate ROM and choose “Export to Quicktime Movie” from the Option menu. Before leaving the export dialogue, make sure to click the “Compression…” button. You *MUST* choose either the “None” or “Planar RGB” codecs, and under the “Compressor” pane you *MUST* choose a depth of “Millions of Colors+”. The “+” is important. Once you’ve saved the movie location, go to “Play Movie” in the Option menu and choose the .smv you want to play. The emulator will play through each of the playbacks one by one; when it’s done (you’ll know because the background turns back on) your movie will appear in the location you chose. Note that there’s one more step! You won’t be able to actually play this movie, at least not very well, because the export feature works by creating a different movie track for each playthrough and the file will be huge and bloated. Open your video in Quicktime Player, then choose “export” and export to some video codec with actual compression (like H.264). This will flatten all the different layers of the movie into one. Okay, NOW you’re done.

…So what’s this about quantum physics? Oh, right. Well, I kind of identify the branching-paths effect in the video with the Everett-Wheeler “Many Worlds Interpretation” of quantum physics. Quantum physics does this weird thing where instead of things being in one knowable place or one knowable state, something that is quantum (like, say, an electron) exists in sort of this cloud of potentials, where there’s this mathematical object called a wavefunction that describes the probabilities of the places the electron might be at a given moment. Quantum physics is really all about the way this wavefunction behaves. There’s this thing that happens though where when a quantum thing interacts with something else, the wavefunction “collapses” to a single state vector and the (say) electron suddenly goes from being this potential cloud to being one single thing in a single place, with that one single thing randomly selected from the different probabilities in the wavefunction. Then the wavefunction takes back over and the cloud of potentials starts spreading out again from that randomly selected point.

A lot of scientists really don’t like this “collapse” thing, because they’re uncomfortable with the idea of nature doing something “at random”. Physics was used to dealing with randomness before quantum physics came along– the physics of gases are all about the statistics of randomly moving gas particles, for example– but those kinds of randomness aren’t assumed to be actually random, just “effectively random” because the interactions of air molecules are so chaotic and complicated that they’re too unpredictable for humans to track. Think about what happens when you roll a die: the number that comes up when the die lands isn’t strictly speaking “random”, it’s absolutely determined by the physics of motion and the velocity at which you let go of the die and so forth. The “randomness” of a die roll isn’t about actual indeterminacy, but rather just a way of talking about your ignorance of how the deterministic processes that control the die operate. Quantum physics, on the other hand, has things that as far as anyone can tell are really, objectively random, with no mechanism producing that randomness and nowhere apparent to stick one.

Since this makes some physicists uncomfortable, they came up with a sort of a philosophical trick: they interpret quantum physics in such a way that they say when there’s more than one possible random outcome of some quantum process, then the different possibilities all happen, in alternate universes. They can’t prove or disprove that this idea is true– from the perspective of someone inside one of these universes, everything behaves exactly the same as if the “wavefunction collapse” really was just picking a random option. But it’s one way of looking at the equations of quantum mechanics, and as far as the mathematics cares it’s as valid as any other. Looking at things this way, if there’s a 3/4 chance of a quantum process doing one thing and a 1/4 chance of it doing the other, then we get three universes where the one thing happens and one universe where the other one does. This does mean that there’s some universe where two seconds ago all of the atoms in your heart spontaneously decided to quantum-tunnel two feet to the left, but in almost every universe this doesn’t happen so we don’t worry about that.

Science fiction authors love this. There’s a bunch of stories out there exploring this idea of a multiverse of infinite possibilities all occurring side by side (the best of these I’ve ever read being Robert Anton Wilson’s Schrödinger’s Cat). Most of these stories get things totally wrong. Science fiction authors like to look at many-worlds like, this morning you could either take the bus to work or walk, so the universe splits in two and there’s one universe where you decided to walk and one universe where you decided to take the bus. This is great for purposes of telling a story, but it doesn’t really work like that. The many-worlds interpretation is all about the behavior of quantum things– like, when does this atom decay, or what angle is this photon emitted at. Whereas human brains are big wet sloppy macroscopic things whose behavior is mostly governed by lots of non-quantum processes like neurotransmitters releasing chemicals.

This said, tiny quantum events can create ripples that have big effects on non-quantum systems. One good example of this is the Quantum Suicide “experiment” that some proponents of the Many-Worlds Interpretation claim (I think jokingly) could actually be used to test the MWI. The way it works is, you basically run the Schrödinger’s Cat thought experiment on yourself– you set up an apparatus whereby an atom has a 50% chance of decaying each second, and there’s a detector which waits for the atom to decay. When the detector goes off, it triggers a gun, which shoots you in the head and kills you. So all you have to do is set up this experiment, and sit in front of it for awhile. If after sixty seconds you find you are still alive, then the many-worlds interpretation is true, because there is only about a one in 1018 chance of surviving in front of the Quantum Suicide machine for a full minute, so the only plausible explanation for your survival is that the MWI is true and you just happen to be the one universe where the atom’s 50% chance of decay turned up “no” sixty times in a row. Now, given, in order to do this, you had to create about 1018 universes where the Quantum Suicide machine did kill you, or copies of you, and your one surviving consciousness doesn’t have any way of telling the people in the other 1018 universes that you survived and MWI is true. This is, of course, roughly as silly as the thing about there being a universe where all the atoms in your heart randomly decided to tunnel out of your body.

But, we can kind of think of the multi-playthrough Kaizo Mario World video as a silly, sci-fi style demonstration of the Quantum Suicide experiment. At each moment of the playthrough there’s a lot of different things Mario could have done, and almost all of them lead to horrible death. The anthropic principle, in the form of the emulator’s save/restore feature, postselects for the possibilities where Mario actually survives and ensures that although a lot of possible paths have to get discarded, the camera remains fixed on the one path where after one minute and fifty-six seconds some observer still exists.

Note: Please do not use the comments section of this post to discuss ROMs or where to get them. IPSes are okay. Thanks.