The Snap, development log: Day 4

January 22nd, 2011

Mac build (r36)
Windows build (r36)

Status: Gamepad support is now complete and controls are now configurable. To set the controls for a player, click “Set p#1 Controls” or “Set p#2 Controls” at the main screen and follow the instructions. Controls are not saved when you quit the program yet. I recommend using a gamepad’s dual analog sticks to move and fire if you can.

So far I’ve tested the controller code with: Keyboard; a Sony Dual Shock 3 (on a mac, using the tattieboogie driver); and a vintage “Gravis Gamepad Pro”. But I haven’t yet tested anything on Windows, and also different brands of gamepads behave very different in SDL so the fact that I know these two gamepads work doesn’t say much about whether other gamepads work.

So I’d be extremely curious, if anyone out there has a gamepad, if you could test and see (1) could you configure your controls without incident (2) could you then play the game (…to the extent it can be played right now) and have it work. I am particularly curious whether this code works with the XBox 360 gamepad, and in particular, I’m curious whether the 360 d-pad works. The 360 gamepad does its d-pad in a weird way that requires an entire code path to itself to handle, but I don’t have one to test with.

A little amusing thing: I don’t impose any rule that different players each have to have their own gamepad, so I realized it was possible to set player 1 to control with the analog sticks on the Dual Shock and set player 2 to control with the d-pad and face buttons on the same controller. Despite my jokes about Twister before, I’m actually sort of considering encouraging people to play this way with two people! I attempted the 2 players, 1 controller thing with my spouse and it was actually weirdly workable and fun in a silly way (the configuration we settled on was player 1 had d-pad to move and right analog to fire, and player 2 had left analog to move and face buttons to fire).

Update: I found someone with a 360 gamepad. It works, but the d-pad does nothing. Oh well. Another thing I’m noticing is when you’re setting controls it’s way too sensitive about when it goes ahead and sets an analog stick axis, so it’s really easy to accidentally set your controls “sideways” if you accidentally push up a little and then left a little when you first touch the stick. I’ll fix this tomorrow.

The Snap, development log: Day 3

January 21st, 2011

Mac build (r23)
Windows build (r23)

Status: Same as yesterday but now there is rudimentary gamepad support. Player one is still controlled with WASD+IJKL. Player two is controlled using the dual analog sticks of the first HID gamepad found. In my tests I used a Sony Dual Shock 3 using the tattiebogle driver and it worked; I wouldn’t especially expect it to work on anyone else’s system until I’ve added the ability to actually configure controls.

There are buttons in the main menu for setting the controls. They don’t work yet.

Doing the geometry wars thing and controlling my little square shooting its little bullets using the dual analog sticks was actually startlingly fun considering the game doesn’t actually do anything yet. I’m feeling better about the whole top-down shooter plan than I was yesterday.

The Snap, development log: Day 2

January 19th, 2011

Mac build (r21)
Windows build (r21)

Status: Option of 1 or 2 players; in 2 player mode there is a blue and a green player. Each player can now fire bullets (the small squares). Player 1 moves with WASD and fires with IJKL; player 2 moves with FXCV and fires with HBNM.

But there’s no collision logic on the bullets yet, so they just bounce around and accumulate in the corners of the screen.

Thoughts:

  • I cannot help but think. What if I just stopped here? Like, maybe added damage from bullets and said, okay, here’s my 2p arena shooter. How on earth would anyone play this? The WASD/FXCV scheme would require the players to configure themselves in extremely odd ways to reach the keys; Player 2 would basically have to be sitting in Player 1’s lap. Perhaps we can think of this as an activity for couples.
  • These controls can’t stay even if the Twister problem is fixed. Firing diagonally is really difficult with the IJKL aiming.
  • Maybe I’ll have to rethink my position on physics. The more I start moving toward actually implementing the time/replay mechanic, the more it starts to seem like implementing physics would be really, really easy. (In fact it may be easier to implement full physics than not implement it– the current build has some really weird behavior due to the fact I’m using Chipmunk for collision detection but then in my first-pass way of doing movement I’m treating it in ways a physics engine does not expect to be treated.) The big problem with physics though is that the world I present– 1 black screen, 2 autonomous squares, bullets that are destroyed on impact, unmoving walls– gives very little opportunity for a physics engine to show off its presence. Of course I chose this gameplay idiom specifically because it imposed simple physics and made the mockup easy to finish, but it means if I try to think of “what are cool flourishes a physics engine could add?” I don’t have a lot of room to maneuver.

    I’m increasingly starting to wonder what this game would be like if instead of a top-down/Combat! sort of thing it were a vs. 2D platformer where the players had free-shooting guns (like in All Of Our Friends Are Dead, or something) and were free to run around and jump and fire at each other. That would give the physics engine a lot of neat stuff to do and might simplify things like how to present the controls. I have doubts I could get this done for the competition deadline though so maybe that will have to be something to consider later.

The Snap, development log: Day 1

January 19th, 2011

So Tigsource is running a 1-month game competition with the theme of “versus” play. I think I’m going to use this as an excuse to quickly knock out a prototype on an idea I had a long time ago, and while I do so I am going to try a Thing. Every day I work on this project, I am going to come back here at the end of the day and post my current build and a screenshot, so that you can see a record of the project developing day by day (the first build can be found at the end of this post). I will also be posting these logs in my project thread at Tigsource.

The project is this:

The Snap
(A first person shooter)

This is an idea that sprung out of two conversations: One years ago with my friend Chris about how you could make a game with four-dimensional gameplay; and an argument a bit more recently with some people I know about my opinion that first person shooters all feel the same to me, because they seem to me to just provide the same gameplay from game to game while changing only superficial tweaks to mechanics. After this argument I started trying to think about whether I could come up with a mechanic you could introduce into an FPS that would alter gameplay fundamentally rather than just presenting a more refined version of that same gameplay mode.

Here’s the basic idea:

  • Deathmatch FPS. Machine guns. Scattered ammo packs. Health canisters.
  • Gameplay takes place in a room or building where time is occurring in a loop, say 60 seconds long. All players materialize in places throughout the building at time 0. At time 60 copies of the players rematerialize in their starting positions and the game “replays” their actions from that point.
  • In addition to their weapons, each player has the ability at any time to perform a “Snap”. When they do this, they jump back 10 seconds in time. (If you jump back before time 0 you loop back around to time 50-something.)
  • A multi-track timeline at the top of the screen shows where each player is “now”. Because the snaps only move you a fixed amount, at any one moment in “real time” there will only be (say) six points in the in-game timeline each player could be at.
  • Changes to the timeline propagate. So if you shoot someone 10 seconds in the past, they lose 10 health throughout the timeline after that. If someone grabs an ammo pack, and then you jump back in time and grab it before they do, then they lose 10 bullets throughout the timeline after that. If you fire a bullet, and kill someone, and then someone goes back and retroactively steals all your ammo so that you did not in fact have any bullets at the time you killed the other player, then your bullet fire is undone and the player springs back to life.
  • The hope is that the game will thus be about strategically managing the timeline and trying to cause, or retroactively prevent, certain events, rather than just about shooting and cover.

The plan I had originally was:

  • 4 players, on 2 teams. This allows for the interesting “resurrection” mechanic of trying to bring your teammates back to life by preventing their deaths.
  • Actually a first person shooter
  • Some sort of networked multiplayer
  • Physics of some sort– you can push people’s “past selves” out of the way as you run past them, for example, and physics would “rubberband” so that the past selves simply run a little faster around you to get to the point they were supposed to be at for the next “event” (like getting hit by or firing a bullet). The game would attempt to present an illusion that small changes to the timeline (like shoving people two feet) correct themselves but large changes (like killing someone) alter the timeline and propagate.

But I didn’t think I’d ever actually find the time to do this, so at some point I mapped out a simpler, “mockup” version I thought I could do in a month. This is what I’m doing for the compo:

  • Overhead Robotron 2084 style shooter, Apple // graphics, maps like Atari “Combat”. All players are colored squares. The game will still be prominently labeled “a first person shooter” as a joke and/or commentary along the lines that “FPS” is a type of gameplay rather than a camera angle. The game will make as few acknowledgements as possible it is anything other than a 1990s cliche FPS. For example the blue square will be “Biff, the grizzled space marine” and the red square will be “Sophia, the beautiful and brilliant scientist”
  • No physics, no networking. In order to make multiplayer still possible, maps are probably no bigger than one screen and players probably need to use gamepads.
  • Also to accommodate the above, probably only 2 players.
  • Z axis and jumping [i]might[/i] be included.

The mockup should be enough to at least try to identify where the “exploits” in this type of gameplay are (i.e.: do players just repeatedly jump back to time 0 and try to pump bullets into the helpless past selves? And if someone tries to play this way, are there countermeasures the other player(s) can take?) or determine if the game concept is workable at all. I intend to write the mockup in a way I can move it forward to the “full” concept if the opportunity ever presents itself while maximizing code reuse.

Pitfalls:

  • It’s been a long time since I’ve actually played any FPS type games, so I may wind up reinventing some gameplay wheels
  • The “mockup” version seems like just an arena shooter. I think there have been a lot of these in indie-world lately; I haven’t really been playing them. I may wind up again reinventing some wheels or producing something not terribly different from existing arena shooters
  • Will continually having to re-adjust the “timeline” be excessively computationally expensive? I think I know how to do it such that the answer is “no”, but I’ll have to watch out for this.

I started coding this morning, and as promised here’s my progress so far:

Day One

Mac build (r19)
Windows build (r19)

Status: It draws a black screen with a green square. If you use the WASD keys the green square moves around.

A follow-up on “Quantum Mario” (also comments are fixed now)

January 18th, 2011

So a random little thing that I ran across and had me sort of floating on air… if you’ve played the amazing indie platformer Super Meat Boy, you’ll have seen an interesting feature they have where once you beat a level, they play back all the (many) attempts it will have taken you to complete it, simultaneously and superimposed. An example, via IGN:

Super Meat Boy

If you’ve been reading my posts here, you’ll have probably figured out by now that I really like punishment platformers. So I’d been playing Super Meat Boy more or less nonstop for several weeks when someone forwarded me this Game Informer interview with Team Meat, wherein it turns out that the replay feature was actually inspired by the “Many-Worlds Mario” video I made and posted here way back in 2008:

How did you come up with the multi-death replay system?

Refenes: Basically, there’s a video that’s been floating around on the Internet for awhile. It’s a modded Super NES emulator that’s rigged to play custom-made Super Mario World levels. They rigged the emulator so it would record every attempt and then overlay them and play them at the same time. So this one video, it’s called Quantum Mario, it’s just one Mario jumping from platform to platform and he’ll fall off on the left, fall off on the right, or get hit with a bullet, or jump off of the bullet. It’s just every one of his attempts. It starts through this incredibly difficult level and just goes all the way through until it’s just one guy remaining. I love that video and I was like “We should do that with Meat Boy and I can do it in real time.” I just kind of coded it in over a weekend or something and perfected it as we were going through the development. It was an on-the-whim kind of thing. And it worked out as a great reward for f—ing up.

So that’s a kind of a weird and encouraging feeling. I spend a month and a half making a bizarre youtube video, and three years later, it turns out the world is slightly different as a result… ^_^

A little housekeeping note: I discovered this weekend that for a really long time– probably six months or more– commenting on this blog has been broken. Apparently one day reCAPTCHA broke and started marking every single comment as spam, then deleting them after two weeks. So I’ve lost literally everything anyone’s posted here for I’m not even certain exactly how long. I am really sorry about this. I’d been thinking, wow, it’s a little odd how comments on the blog seem to have dried up…

I think I can promise a little more traffic on this blog this year. I’ve got a few interesting things in the pipeline: a new game that’s maybe half done, a little iPad music toy that’s mostly done, and a new version of Jumpcore that comes with support for iOS and Android (an alpha of that last thing is here). Also, keep an eye out for a post tomorrow, I think I’ll have something interesting for you…

A Game of the Year 2010 Poll: Results

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)

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

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

Volunteer opportunities on LGBT rights

October 18th, 2009

This is a little off from the normal format of this blog, but what the heck.

I had a conversation last week with some people who were frustrated that they saw a lot of discussion about lack of progress on LGBT rights, but didn’t see the kind of practical, meat-and-potatoes organizing on LGBT issues as they did on things like health care– things like, call this congressperson and exert pressure on this legislation. I was surprised to hear this, because I could name several groups or bloggers doing such organizing right now. This conversation made me realize that maybe some of the less flashy but still quite practical activism on gay rights isn’t getting the attention it needs, and as a result may not be connecting with potential volunteers.

Let’s do something about that. Here below is a short list of projects in need of volunteers and phone calls now. My rules for putting a group or project on this list is that it should:

  • Have real volunteer activities that you can start doing right away– not just “sign up for this mailing list and we’ll ask you for money occasionally”.
  • Direct volunteer efforts toward a specific, immediate goal, preferably something where effort goes directly toward changing a law.

I hope someone out there will find this useful.

BIG THING #1: THE EMPLOYEE NONDISCRIMINATION ACT

At the beginning of the year, Nancy Pelosi laid out a plan for gay rights in Congress, which had each of the major legislative proposals being passed in a single file fashion: The Matthew Shepard / Hate Crimes Bill first, The Employment Nondiscrimination Act sometime before the end of 2009, a repeal of Don’t Ask Don’t Tell after that, and a repeal of DOMA after. Although there have been some new developments such as the introduction of the Domestic Partnership Benefits and Obligations Act, in general congress has stuck very strictly to this schedule all year, both in actions and in the public statements of the leadership: The Hate Crimes bill was voted on in June, ENDA was introduced in each house once Matthew Shepard had passed there, and work on ENDA is now underway as the final version of the Hate Crimes bill is set to be signed any day now. As of this week the word is still that Congress plans to address DADT at the beginning of next year.

So, if you want to make a difference in active legislation, right now ENDA is where the action is. (And if you want to repeal Don’t Ask Don’t Tell, then honestly at the moment the most effective way to get there is to get Congress to hurry up on ENDA so resources will be freed to work on DADT.)

In the House, passage of ENDA seems pretty much assured, and the only important thing is to get the committee to follow up on their recent hearings and pass a bill. In the Senate things are more complicated, and here work is needed to lock down 60 Senators willing to vote for cloture.

What you can do: The best resource on ENDA I’ve found is Dr. Jillian T. Weiss’s ENDA Diaries at bilerico.com. Dr. Weiss has been blogging every day for months with action items on ENDA, usually taking the form of “legislator of the day” posts singling out a particular House or Senate member to call to pressure to support ENDA. The information for these calls is used to maintain a running whip count. You can see a full list of Dr. Weiss’s ENDA diaries here, or a general introduction to the project (posted the day after the National Equality March), with a list of the top “problem legislators” on ENDA, here.

Also, I have received Dr. Weiss’s permission to start posting copies of her daily ENDA diaries over at DailyKos, so if you read that site then keep an eye out.

BIG THING #2: PHONEBANK FOR MAINE

Proposition 8 basically gets a do-over in Maine this year. Maine’s gay marriage law is already a big deal in one way: Maine was the first state to legalize same-sex marriage purely through the legislature. If Question 1, which would overturn that law, fails, Maine will also be the first state where legal gay marriage withstands a public referendum vote. If Question 1 passes, on the other hand… well, that will do a lot to discourage legislatures in other parts of the country from even trying. Question 1 goes up for a vote in just two weeks, November 3, the same day as Washington’s Ref. 71 (which decides whether the state’s new Domestic Partnership law will stand).

What you can do: There are two groups organizing phone banks to persuade Maine voters on gay marriage. In both cases the phone bank works the same way: You call in at a certain time and are given a brief training session over the phone. After that you are given a script to read and a list of numbers to call. If you can just block off a few hours of time you can make a difference on Question 1 from your own home, regardless of where in America you are.

The first group doing this is Protect Maine Equality/No On 1. Their next training session is Tuesday at 6:30 PM Eastern time.

The second group is the Courage Campaign; they are actually using the same scripts and call lists as No on 1, but their training times (see link) may be more convenient for you, and if you are in California I believe they have infrastructure to allow you to call in without incurring long distance charges.

I also have an offer from Caitlin Maloney at the Courage campaign, who you can contact here:

[I]f someone went through that training and wanted to get a whole group of folks together and phonebank using their laptops and cells to make calls, I could arm that person with the additional knowledge necessary to train the group. The other option would be for me to send a group paper lists to call from. We would need a few days notice on about how many folks you expect and how long you plan to be calling, and of course we would send you all the docs you need to train folks and keep them motivated.

This would be the same work you’d be doing at home, however some people find it easier to stay motivated phonebanking with a group.

LOCAL VOLUNTEER OPPORTUNITIES

California:

Equality California (volunteer signup here) has groups across the state working now for a repeal of Proposition 8. The biggest focus here is on canvassing neighborhoods where equality fared poorly in the election last November, trying to reach voters who might have voted against us before and understand what arguments are effective in flipping them. In my area this meets most every sunday evenings and it’s simple, just show up and they’ll give you training and a map.

EQCA offices across the state are also doing evening phonebanks into Washington for the Referendum 71 campaign.

Courage Campaign, in addition to the phonebanking program described above, has been organizing Equality Teams with regular volunteer opportunities. Hope Wood, Northern California Field Manager for the Courage Campaign’s Equality Program, describes the program as:

The mission of our Equality Teams is as follows:
â–ª Establish an active and visible presence in the community for marriage equality.
â–ª Develop relationships with local elected officials and supportive organizations to create an opportunity for sharing resources and building local power.
â–ª Coordinate regular voter contact actions – including canvasses, phone-banks, tabling at community events, and registering new voters.
â–ª Represent your community in important state-wide actions, trainings, and conference calls focused on marriage equality.

Marriage Equality Silicon Valley (volunteer information here, although the best way to keep up to date is to follow the Facebook group) has been organizing weekly phonebanks into Maine using the Courage Campaign infrastructure. I’m told there are also groups running similar mass phonebanks in SF and Alameda.

Maine:

No On 1/Protect Maine Equality (volunteer opportunities here), in addition to the national phonebanking program mentioned above, also needs local volunteers for “making phone calls, knocking on doors, talking to voters at community events and helping out in the office”.

Washington:

Approve Referendum 71 (volunteer opportunities here) needs state-local volunteers for phonebanking and direct outreach to pass Referendum 71 and make the state’s Domestic Partner program law.

(If there are any resources in your state that ought to be on this list but aren’t, let me know.)

ONE LAST THING

While I was writing this post I learned about a site called ACT On Principles. It’s a collection of tools for coordinating and locating LGBT activism opportunities, and it includes wiki-style whip count pages, similar to the one I mentioned above for ENDA but for every gay rights bill currently under consideration. This is a fairly new site and it seems a little rough around the edges but it looks like it has a lot of promise. You may want to take a look and maybe make a few phone calls for the whip count.

Jumpcore: A starting point for SDL/OpenGL games

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.