The First Early-Access Beta Invite Is Away

A 11:47:53 pm, February 15th, 2012, the first SpyParty Early-Access Beta invitation was sent across the internet.  I was typing into a laptop at my dining room table in Oakland, California.  I typed the necessary commands into an ssh window, which was connected to a server in Texas.  A perl script generated an invitation email which landed in Sunnyvale, Calfornia, in search of Jonathan Blow.  Finally, Jonathan checked his email by clicking a button on his laptop, which was sitting on my dining room table, right next to mine.

He registered, and my PayPal account went from $0.00 to $14.26 and he was able to login to the private beta website!

Success!

And then the bug reports started.  The login page didn’t restrict the case of the username.  There was no link to the beta homepage page in the email.  I forgot to upload a working build of the game before sending the invite.  The server’s auto-detection of new builds was broken.  And then, to cap it all off, PayPal decided to reverse the charge and put the payment on hold.  I didn’t even have my $14.26 anymore!

Oh well, that’s what shipping software is all about, and I expected at least this many problems.  The important thing is that I can now say The SpyParty Beta Has Started!

I live tweeted the whole thing from the @spyparty account:

Okay, I am switching my php from the paypal sandbox to the live paypal servers…
Feb 15, 10:58pm

PayPal balance: $0.00 USD
Feb 15, 11:03pm

This first invite is going to @Jonathan_Blow, who (hopefully) won’t mind if my paypal script accidentally charges him $15000 instead of $15.
Feb 15, 11:22pm

I said I’d try to start invites before 11111 beta signups, and I’m at 11101, so I’m going to make it. Also, @spyparty is at 3995 followers!
Feb 15, 11:29pm

I am sending the invite to @Jonathan_Blow…hopefully it will work…
Feb 15, 11:47pm

Invite away…he is sitting right next to me, so hopefully the email can make it that far…
Feb 15, 11:48pm

He’s in. Forgot to upload the latest build, oops. Plus a login bug…
Feb 15, 11:53pm

PayPal balance: $14.26 USD
Feb 15, 11:56pm

And, PayPal reversed the charges and has them under investigation. LOL Give me my $14.26 back!
Feb 16, 12:07am

Status: Being Reviewed By PayPal … they are really earning their $0.74 on this one…
Feb 16, 12:25am

Why the hell isn’t the lobbyserver finding the updated build on s3?!? That code used to work…sigh. Current new bug count: 8
Feb 16, 12:38am

I guess I need to handle reversed charges with a temp ban…currently @Jonathan_Blow has a valid beta account and I don’t have his $14.26…
Feb 16, 12:39am

I can understand Minecraft's $600k setting off some flags, but $15?!

The Remaining Early-Access Beta Todo List

Sorry I haven’t updated in a while, but the good news is I’ve been totally cranking on the Early-Access Beta!  I really appreciate everybody’s patience, especially since I’m so behind schedule on inviting people,1 but it’s getting close, it really is!

I have a zillion blog posts queued up in draft or idea form, but I don’t want to take any time away from working on the beta to finish any of them, so I came up with this (probably ill-advised) idea:  I will post the remaining items left to do before I can invite the first players to join the beta.  Then, instead of taking time to write new posts, I’ll just edit this post and strikethrough the items as I do them.  Sadly, as with most software development task lists, the items below are at vastly different time and difficulty scales, so they won’t all get checked off at the same rate, and they have an annoying tendency to spawn unforseen subtasks as one digs into them, so the list will grow occasionally too.  But, at least this way you can see my progress towards the finish line at a finer granularity than my intermittent tweets.

Even though I’m stupendously late, I’m pretty excited about SpyParty’s development right now, because almost all of the big tasks have been finished.  Stuff like auto-updating, crash dump reporting, the installer, and the security system are done, or at least beta quality.  Most of the rest of the stuff to do is the myriad loose ends that come along with getting anything ready for public consumption.  The two big remaining things are the invite-a-friend feature that I originally wasn’t planning to do for launch, but after your comments here on the blog, on twitter, and on facebook, I decided I simply had to add it, and the text chat feature, which is sort of stubbed in but needs to be improved, since communication is going to be an important part of the experience.  It’s going to be really rough to start with, but hopefully it will be good enough to get things started.

I’ve broken up the todo list into three sections:  the Website, which means anything you talk to through your browser, including payments and the private beta foums and homepage; the Server, which is the lobby, player and game database, and that sort of thing; and the Game, which is the thing that runs on your machine.

Without further ado, here is the list.  You can ask questions in the comments, but do keep in mind that time I spend explaining these things is time I’m not spending checking them off!  Also, these are just the tasks to get the first beta invites out, I have infinitely longer and less well defined task lists for later in the beta and beyond.  But let’s not think about those right now…

Website

  • invite friend to join beta, one invite per person
  • mail and homepage needs notes about whether you can talk about game during beta
    • please do, indie games need your help to spread the word
    • if you have criticisms, I just hope you’ll also tell me (post in forums or email) so I can fix them
  • invites
    • invite.pl
      • need to update the intInviteStatus, uncomment the execute line
      • do initial invites with email
      • change invite.pl to not need any email, and just take a count and invite the next group
    • cheating
      • many ways right now, please just don’t, will make me deal with cheaters now instead of making game
        • spectating
        • listening for control clicks?
        • even multiple people watching sniper side monitor
  • switch to CentOS 6
    • get backups in order, good test for this!
  • audit all the code
  • add user to announce mailing list
  • block test ipns from doing real work
  • leaderboard
  • test newline in display name? need to escape it
  • style cosign pages
    • login, login error
    • logout
  • change password
    • only want while logged in for now? yes
    • style
  • test cosign logout
    • definitely does not work in firefox the first time? wtf? look at the cookies?
  • beta homepage
    • style
    • stats
    • link change password
    • style rss
    • display nicer date
  • forums
    • edit account settings – disable change password & email address
    • update phpbb to 3.0.9
    • welcome message, introduction to beta
    • stats on profile page
    • phpbb how to report bugs
    • phpbb faq – update faq.php to add styles/<active>/faq/more_faq.php to the array
  • error_log in all php code
  • paypal note about anonymous payments, credit cards, etc.
  • retry-registration needs to display a page before going to paypal
  • mail with details of which cancellation on paypal error?
  • test paypal flow with non-sandbox
    • enable IPN, redirect back to page, etc.
    • what does cc bill show as outside of sandbox?
  • start downloading logs
    • forward mail? probably better than running pop
    • or upload to s3?

Server

  • when shutting down, don’t allow new connections, just reply with failure message
  • why doesn’t the stunserver work when resolving addresses?
  • test relay server, at OAK?
  • kerberize stun and relay servers
  • initially just show spy/sniper games played, so user name is displayed as checker (45/67) everywhere
  • upgrade krb to 1.9.2
    • client
    • server
  • write lobbyclient stress tester app that spews data at server
    • log in first sometimes
    • use known packet types
    • make this the lobbyclient app, and have it be console control as well
    • send message to all connections
    • don’t make this too general for now, fine to recompile for different stress tests
  • need to fix pointer output in log for connect/disconnect
  • send client state info to server for debugging?
    • yes, at game menu, playing, etc.
  • server database
    • async_db clear semantics for db return codes, reg/unreg
    • store game/match data to db
    • users records
      • ranking info
      • date stamp for login
        • last login, logout
      • $inc login count
      • $inc failed count?
      • cumulative time logged in! login/match/game times & counts
  • add usernames to journal filenames (urlescape!)
    • checker/test for testing
  • turn verifies in the lobby ctor into logs so can debug
  • clients only allowed one game journal per game id
    • don’t need the random number anymore, given session id in filename
      • overwrite file on multiple submissions
  • async_krb5 and async_db error log…have a varargs Log and pass it, also for game
  • finish updating to new protocol
    • client<->server
    • client<->client
  • hmm, track memory usage and make sure we’re not leaking
    • output to log file occasionally?
    • info mallinfo – dev/test/mallinfo.cpp will work on linux
    • GetProcessMemoryInfo
  • async_krb5
    • clean up code
    • disable all the built-in accounts? or leave them randkey?

Game

  • “game” -> “match” in ui
  • handle errors in client<->client authn
  • switch to — for command line parms?
  • windowed maximized borderless
  • network time sync?
    • it can lag by 5 seconds, which plays fine but seems terrible, better to run Zach’s simple net sync code
  • merge reliable packets
    • ooi in reliable packets
  • test motion in joy ps3 driver
  • make a list grid mode for the chooser, or just obey tabs?
    • then display other players in lobby and their ranks
  • want to display release notes during autoupdate?
    • have lobbyserver fetch them?
    • displayed while downloading, option in main menu
  • send gl versions and cpuid during login?
  • need to version check on clients
  • journal match id on client and server
  • net pause – pause is a nice thing, no?
  • test keys disable
  • figure out what stuff to collect in the journals, careful of machine name, etc.
    • no marketing, or sharing (might publish anonymous stats)
  • add the appropriate command line parms to the –help! window stuff, etc
  • fix chat
    • /me /e[mote] str – print “username str”
    • /played /age – print playtime stats
    • /? /h[elp] – print commands
    • /w[hisper] /t[ell] /m[sg] <username> str – private message to username
    • /r[eply] str – reply to last person who whispered me
    • /retell str – send to last person I whispered
    • /away /afk /dnd [str] – displays str to anyone who whispers me, /away to cancel
    • /time – lobbyserver time and local time
    • the chat text is totally unreadable with those colors!
    • /fps – basic net and video info
    • completion, cut & paste
  • support esdf, y invert, config screen
    • if not fully remappable keys, mention ablegamers list in readme and say will comply soon
  • logging
    • async_krb5 and async_db error log…have a varargs Log and pass it, also for game
    • log printf output to file instead of console
      • and gzip and send to server?
      • chat messages to console?
      • convert to use log function instead of stderr
    • disable logging by default
      • or, log to file always for now so crash dump can upload it instead of asserts log
      • log to pipe and store in spypartyhelper’s memory instead of file?
  • update docs/README.txt
  • put the character name in highlight text? try it.

2011-11-14 18:02:07 – Checked one off already, although I must admit I did the minimum necessary to get it working.

2011-11-17 18:25:17 – Grindy bug fixy day, but finally got the async server db thread semantics clear.

2011-11-30 13:09:31 – Okay, I think the server database stuff is all done, games are saved, results are saved, the player records are updated, etc.

2011-12-06 13:59:23 – The ugliest lobby ever?  Maybe.

A team of UI designers worked on this for 5 years.

2012-01-05 11:18:54 – I am calling it for the chat system.  I didn’t get to /ignore and /stats and whatnot, but /ignore is not relevant until there are annoying people playing, which I’m sure won’t be the case for a while, and /stats are all displayed in the lobby chooser, so it’s redundant for now.

2012-01-25 16:41:04 – More red strikethroughs!  Getting really close!

2012-01-26 15:08:46 – Getting the PS3 DualShock controller to work on Windows is so much more work than it should be.  Start by installing the totally unauthorized MotionInJoy drivers! Then mess around with configurations.  Don’t even think about getting it working over BlueTooth unless you have certain USB dongles.  What year is this?  Oh well, it works:

Well, at least now I can say I support 360, PS3, and mouse+keyboard.

2012-02-03 14:24:10 – Finally grinding through the website tasks, which should go pretty quick…*cough*.  Here is a screenshot of the saddest page on the blog:

A page you don't want to see in your browser.

2012-02-07 14:27:18 – It’s the worlds ugliest Personalized Early-Access Beta Homepage™ ever!

Well, at least it goes with the ugly lobby.

2012-02-13 14:37:57 – The loneliest leaderboard…

These guys have beta access already and they're not playing more than one game each?! What's wrong with them?

  1. Let’s just agree not to mention my original June 16th estimate, okay? []

PAX West 2011 Report & Pics

As you may remember, I planned to try to emphasize SpyParty‘s gameplay depth at PAX West 2011 by setting up the booth with three playtest stations (six computers total), each with a different rule for what kind of players could sit down and play.  My booth was a tiny 10×10, so I knew it was going to be jam packed…here’s the diagram I used to plan out all the placements and cables:

Welcome to professional tradeshow booth planning!

So, how did the experiment in depth-based-playtesting-at-a-tradeshow go?

I think it went pretty well, and as you can see from the pictures below, it seems like the attendees agreed.  We had people playing at the “unlimited playtest station” for well over an hour without getting up, and a small community of regulars—including a bunch from last year, see if you can spot them—camping the station and helping others learn the advanced game.

I think it really helped people get a feel for the deeper game that is hard to experience in that kind of environment, and I think I’ll do it again, maybe at PAX East.  The one problem I noticed has an online equivalent:  matchmaking is hard!  Often a single player would come up and want to play, but there wouldn’t be anybody else at their skill level available, so they had to wait a bit for another single to show up.  This problem lessened over the course of PAX as more players became experienced and started hanging around the unlimited station, but I think next time I’ll have announced times when players can come and make a date with somebody for later in the day.  So, maybe at 11am and 3pm unlimited players can come and make arrangements with other unlimited players, or something like that.  Manual matchmaking, indie style!

Here were the three signs I made for the different stations:

One other flaw with the depth based testing was I didn’t have any way for players to log in and use a persistent username, so I couldn’t track metrics for each player.  I’ll post the metrics from all the PAX games soon, but they’re just going to be a jumble of every game played, which is fine when everybody just gets to play two matches, but I really wanted to track longer term data on the unlimited station.  I thought about a lot of different ways to do this, but they were all clumsy and error prone.  Then Matt Gilgenbach from 24 Caret Games stopped by to chat and told me about what they did for their Retro/Grade leader boards:  card readers!  Hardcore players were given a magnetic strip card like a credit card, and they could swipe this to log in before they played.  So quick and easy and tradeshow-floor-compatible!  Matt said they got the card readers for cheap on ebay.  I’m totally stealing this idea for next time.

Before I go any farther, I have to thank all the folks who helped me with the booth this year, they were amazing!  First off, Sean Willoughby, the PAX Enforcer assigned to the SpyParty booth, went way above and beyond the call of duty in helping me set up.  You can see him in the pics below helping me make signs!  He was an incredible help.  GDC volunteer Roger Hanna returned and did an awesome job of saving my bacon yet again.  He was joined by some game industry friends from the Spore days, Thomas Vu, Steven Lim, and their friend Tony Lee (who I’d never even met before he showed up out of the blue with Thomas and Slim and then proceeded to rock booth duty like a seasoned pro!) .  Paul Sottosanti, who you may recognize as one of my elite playtesters, and who has recently gone indie himself, also helped a bunch, as did Marc ten Bosch, creator of Miegakure.

Speaking of other indie games and helping each other out, I had planned on having Carbon Games show off their new game AirMech, and Marc show off Miegakure, but the Carbon guys ended up getting a fulltime booth at the last minute through some friends, so we had Miegakure set up both weekend mornings.  You can see it mixed in with the pictures below.  People had a great time playing it for an hour, and I let some real hardcores play until well past lunch since they were having such a great time!  I really want to thank the Carbon folks, and especially James Green and Ken Klopp, for being so cool…they lent me a big screen tv and stand even though they ended up not showing at my booth.  I owe them bigtime.  Indies rock!

Okay, on to the pictures, and thanks a ton to all the people who came and played!

SpyParty’s Indie Friends at PAX West 2011

As I mentioned previously, the SpyParty booth at PAX West 2011 (lucky number 3002) is going to be home to some wacky shenanigans involving various experiments on you, the PAX attendees.  The first is the depth-based-gameplay experiment of having an unlimited time playtest station…will it end in tears?

I hinted at the second experiment at the bottom of the post…we indies have to stick together, and much like the awesome Firehose Games did for SpyParty last PAX East, this year I’m inviting two other indie games to demo at the booth so fans and press alike can check them out. 

For an hour each weekend day morning, a different indie game will take over all 6 playtest stations…

The Unannounced New Hotness from Carbon Games, Saturday, 10am-11am

I can’t say anything yet about what the folks at Carbon Games are going to show on Saturday morning, but they’re the same people who did the PS3’s Fat Princess, so you can be pretty confident it will be a unique and polished experience.  They’re going to announce the game sometime early next week, so watch their twitter feed for more information.

This is not the game they're showing at PAX.

 

Miegakure, Marc ten Bosch’s Brain Bending 4D Puzzle Platformer, Sunday, 10am-11am

Sunday morning, Marc ten Bosch is going to set up the latest build of Miegakure at the booth.  My advice is to grab a coffee and get there as soon as you can so you can camp a playtest station, because you will want as much time as possible to try to take your slow and lumbering morning brain from its sleepy 3D existence to its enlightened 4D state.

How to get to the other side? Like, duh.

I’ve blogged about working with Marc before, so maybe you can spot the similarities in this shot I took of him last week…

Every picture I take of Marc looks like this...

SpyParty at PAX West 2011 – Going for Depth

Beta, what beta?  Let’s talk about PAX West 2011,1 which is now only slightly more than one week away.  Yikes!

Once again, SpyParty has a booth, but as evidenced by my previous two PAXes, apparently I have to do it differently each time.  So, here’s the deal this time around…

SpyParty has its own booth this year, #3002.  It’s an awesome booth, and I’m really excited I was able to nab it during the crazy-sold-out-PAX-booth-registration-period.  I know it is awesome because it was the booth next door to ours last year, and it’s just perfectly positioned and sized for a single indie game.  I admit to ogling it on occasion during PAX last year, and fantasizing about it during those long, cold winter months.

Here’s a detail of the floorplan of 3002 and the surrounding booths.  You can see The Behemoth, Twisted Pixel, and Uber Entertainment are SpyParty’s next door neighbors.2

PAX West 2011 Floorplan Detail

Uber is in the booth Monaco and I were in last year, so my playtest table was set up just about where the number “3004” is on that image.  You might recall Dust-Off was in 3002 last year, and if not, here’s a picture I took the first day of PAX West 2010 looking in that direction.

No, I will not have a tent. Sadly.

Booth #3002 is so awesome because it’s a 10′ x 10′ island, which means it only has a wall behind it, and no immediate neighbors.  This means people can gather around three sides, and I can fit more stuff in the booth without it feeling too cramped.3  It’s also right next to the entrance.

Enough about the location, what about the contents of the booth?

The goal for this year’s booth is to give people a better taste of SpyParty’s depth and subtlety.  I’ve been incredibly fortunate to always have a long line whenever I set up at a convention, but the downside to having a line is I have to kick people off the game after they’ve played one game each of Spy and Sniper.  Your first game of SpyParty bears almost no resemblance to your 10th game of SpyParty, so I set about trying to figure out how to give people a taste of the real gameplay.  Some dedicated fans would get back in line multiple times, but when the line is an hour or more long, this is really asking a lot of people when there’s so much other cool stuff to see at PAX.  I think I’ve come up with a solution.

I’m going to set up three 1v1 SpyParty stations in #3002, so a total of 6 computers and monitors.  These three stations will be allocated as follows:

  1. The first station will be exactly like previous playtests at GDC and PAX East, where you can sit down, play a quick tutorial, and then play once as both Spy and Sniper on the Beginner Ballroom map.  That’s if there’s a line.  If there’s no line, feel free to play as long as you want, but if there is a line, you get one game as each role and then you have to get up so the next two people can play.
  2. The second station is for people who have played at least once before.  When you sit down at this station, you don’t have to play the tutorial if you don’t want to, and you and your partner can jump straight into playing.  You can play any map you want, and any missions.4  On this station, you can play two matches, so two Spy and two Sniper games each.  Now we’re starting to get past the initial “Why am I walking into a wall?” and into the “I’d better cool it in this conversation for 12 seconds before bugging the Ambassador”.  Still, once you’ve played a couple matches, you get the boot and you have to get back in line if you need another fix.
  3. The third station is where I’m conducting a bit of an experiment on the PAX attendees…this station has no time limit for players.  This means that if you show up right at the show floor opening, and are first in line, you can play all day and no one is allowed to bother you.  If you get in line for this station, you might not get to play at all; the line might not move.  Sorry, but that’s how it goes when you’re trying to make a deep game and let people experience it.  There are some rules:  only one of the two players can’t stay, both have to get up or stay.  I’ll probably let small groups alternate amongst themselves, so three or four people can rotate in and out, but I’ll have to see how that goes.  My goal with this station is not to get lots of people through it, it’s to get a few people to experience the advanced game.

It’s going to look something like this:

Cramped? Nah, let's use the word 'cozy'.

I have no idea if the third station is going to work, or cause fist fights.  Like last year, I’m going to have an HDTV up on a stand, and I’m thinking I’m going to mirror one of the third station monitors, because those are going to be the most interesting games in terms of advanced play.  Will there be peer pressure to get up and give others a turn?  Will there be ad hoc player organized tournaments?  Will somebody play long enough to start beating Ian and Paul?  I can’t wait to find out.

Secret Guest Games

The other wacky thing I’m doing this year is I’m going to have two guest indie games that will take over the booth for the first hour of the day on Saturday and Sunday mornings.  I’ll announce those games in another post very soon.

See you at booth #3002 in 7 days!

  1. Yes, I know they call it PAX Prime, but that’s silly, it should be PAX West to complement PAX East, and so that’s what I’ll call it. []
  2. The official maps are here and here. []
  3. …he declares, optimistically. []
  4. You might want to play the tutorial for the new missions if you haven’t played them yet. []