IGF Submission Submitted

I submitted SpyParty to the Independent Games Festival Monday night, 11 minutes before the midnight deadline!  I was originally planning on also submitting to the Indie Game Challenge, the deadline for which was October 1st, but I couldn’t get the game working over the internet in time.  However, even though I blew through that deadline, I’m really glad I tried for it, because it clued me in to how much work I still had to do to make the game “contest ready”, just from a logistics standpoint.  It set me up for entering IGF with something that actually worked.  Too bad about the $100,000 though!

The biggest part of becoming “contest ready” was getting the game working over the real live wild internet.  All the playtests so far have been on a local LAN, but the judges for these festivals and contests aren’t always in the same room.  I had to write a rudimentary lobby server and switch networking libraries to something that could do NAT traversal.  After talking to a bunch of people, friends at Valve pointed me at libjingle1, which is used by Google Talk and  Steamworks, and seems pretty robust.

Network code is a giant pain in the butt, and multithreaded network code is even worse, but I eventually got everything ported over, and a lobby server and client up and running.  I did a fair amount of testing with the new internet code, including over my crappy 2G/EDGE cell modem, and with a friend in Tokyo, and it worked pretty well.  I still have some problems behind really restrictive firewalls (the Oakland Airport free wifi and the Westin St. Francis lobby wifi are my current challenges), but it should work for most judges, I think.

Here’s the IGF page for SpyParty, and we even made it into the IGF press release, which is nice.  There are a lot of great games in the IGF this year, so who knows what’s going to happen.

Here’s the README.txt in the SpyParty IGF submission for your reading pleasure.  It builds on the Four Page Instruction Manual and assumes the judges will read that first.

SpyParty IGF Judges README
Chris Hecker

Hi, and thanks for playing SpyParty!  I'm pretty happy with the way
it's turning out so far, and I hope you'll find it deep and
interesting as well.  That is, if we can get you successfully
connected and actually playing a game, which is going to be a
challenge.  Take my advice and never try to make a networked game.

Also, there are bugs.  Hopefully you won't run into any, but chances
are you will, so there, I said it.  I'll document the worst ones

Have fun!


SpyParty is a player-skill espionage game about subtle human behavior.

Right next to this file on your hard drive should be
SpyParty-Manual.pdf.  Please read that first, and then come back.  It
has a lot of information about playing the game, and even explains why
you need to read a manual to play the game right at the beginning.

So, if you haven't read the PDF yet, go do that now, and then come
back to this file.

Table of Contents


You've read the PDF instruction manual, right?

You've hopefully unzipped the latest zip file to a directory on your
disk, and there should be a spyparty.exe, this README.txt, the
SpyParty-Manual.pdf, and the content directory in the top level

Run spyparty.exe.  If windows asks you whether to allow it to listen
on the network, say yes.

You should see the title screen, with the options Play and Quit.  You
can use the mouse and keyboard or Xbox 360 controller to play the
game, select the menus, etc.

"Escape" on the keyboard, or the "back" button on the 360 controller
are the main ways of getting out of the current menu back to a
previous one.

Select Play.  This will try to connect to the lobby server.  Hopefully
it will be able to do so.  SpyParty uses both TCP and UDP, but it goes
to a lot of effort to be robust about its networking, so let's hope it
works for you.  If not, consider reporting a bug to me so I can fix

If there is nobody else in the lobby, it will say "Waiting for
others..." until somebody else joins.  It will also say your lobby
name at the top of the screen, something like Player NNNN.  You are
going to need to tell your partner this number so they can find you if
there are multiple judges in the lobby.  All of this lobby stuff and
internet play is brand new and really rough, so please bear with me.

As an IGF judge, you need to arrange with other judges to play
together via the judging forums or lists and whatnot.  You should also
get on some kind of voice chat system with the person you're playing,
like Skype, Ventrilo, Mumble, Google Talk, or whatever.  At the very
least be on IM so you can exchange your player names.

Once your partner joins, you should see him or her pop up as another
player.  Figure out which one is which, and select the name.  This
will attempt to connect you to your partner, and then the two of you
will be in your own little espionage world.  You can decide whether
you'd like to be Spy or Sniper each match, and I'd suggest alternating
between the two to get a feel for both.  Plus, playing one mode makes
you better at the other, so even if you want to specialize as a Spy,
you should play Sniper so you know what you're facing off against and
what's noticable and what's not.

You can stay playing the same person as long as you want, or go back
to the lobby to pick another player.

IMPORTANT: As it says in the Instruction Manual, it is very important
to play against people of your same skill level, since the game is so
intensely tuned for player skill right now.  The game has a very steep
ramp, but it is fairly balanced the whole way.  Some of my hard core
playtesters have played for more than 10 hours, and it's still got
legs at that point.  Knock on wood.

It is probably a good idea for total newbs to do two practice rounds,
once as Spy and once as Sniper.  Walk around as Spy, doing the
missions one-by-one, telling the Sniper player over Skype which
partygoer you are, so you can practice the missions and the Sniper can
practice seeing and hearing the tells.  Once you've done the missions,
the Sniper should shoot you to practice that important action.  Then
switch roles and do another practice, and then play for real.  This
will let you figure out the controls without worrying about getting
shot while you're doing it.


There is a spelling error in the PDF manual.  Of course, you know that
already, because you read the manual.

More Spy Tips

- Camera management is the most important thing to learn.  You always
 need to be able to answer the question, "Where is the Sniper
 looking?"  Or, at least, pretending to look...which is to say,
 "Where is the laser?"  You can always see it, so if you can't find
 it at first, it probably means the Sniper is hiding it above or
 below the windows.  New players always try to make their screen look
 like normal 3rd person action games like Tomb Raider, where you're
 looking at the Spy's back, even if you're at the bookcase.  This is
 bad.  You should swing the camera around until you can find the
 laser at all times, so you know when and where you can do missions.

- If you're using the mouse+keyboard controls and are using voice chat
 with your opponent, be careful about audible mouse clicks going over
 the chat channel...they're a huge help for the Sniper and can get
 you shot really fast.

More Sniper Tips

- If you hear "banana bread", some people find it easier to look for
 and highlight all the people who are talking at the time, knowing
 the Spy will be one of them.  However, some Snipers think it's hard
 to tell who's talking, and to get around the room fast enough.  Some
 find it easier to instead simply lowlight everybody who isn't in a
 conversation at all, since you know they can't be it.  Either
 strategy is a good way to pare down the number of people you need to
 watch, which is crucial to catching the Spy.

Mouse and Keyboard Controls

Both - Escape to leave the current mode.  Shift-Y to invert the Y axis.

Sniper - These are fairly normal FPS sniper controls.  WASD or arrows
to move and zoom, and mouselook.  AD/LeftRight move you on a rail
around the level.  You can go around the corner, anywhere there are
windows.  WS/UpDown zoom in/out, as does mousewheel.  Mouse movement
controls your camera.  The cross hairs in the middle of the screen is
where your laser sight is pointing.  Left and Right button are
highlight and lowlight, for suspect management.  Hold the shift key
down to go into sniper scope mode, and Left click fires.

Spy - Mouse movement rotates the camera.  WASD moves you relative to
the current camera direction.  Left button is the "Normal" action, and
Right button is the "Spy" action.  If you see the + after the
affordance, that means there's a pie menu of other affordances
available, hold the appropriate button down and move the mouse towards
the affordance you want, and release the button.


- If you can't connect to the lobby, hit escape/back and try again.
 The internet sucks.  This should work unless you're in some really
 bizarre firewall environment, because it's just a normal TCP socket

- If you can't connect to another player, this may be an issue with
 blocking UDP packets.  I'm trying to get a TCP relay server up, but
 it's not there yet.  I use google's libjingle for NAT Traversal, and
 it's pretty robust and can usually get through.  Please tell me if
 you have issues and what your configuration is, and whether you'd be
 willing to test new code.

- The Spy and the Sniper are currently not absolutely clock synced.
 The game is incredibly latency tolerant, but when the Sniper takes
 the shot, sometimes there can be 2 of 3 _seconds_ of latency while
 the system works out what happened.  This will improve, but it
 should always get the right result even if it's slow and painful
 right now.


-- 2010/10/22 - ~r1177 --
Updated README Spy tips.  Intel GMA integrated graphics fix for
non-power-of-two textures and z LEQUAL bugs.  We just finished level
3, and need to tighten up the graphics a little bit.  Made the
affordance pie menu slightly less horrible with the mouse.

-- 2010/10/18 - ~r1169 --
Initial IGF build.  Version 2 wire protocol.
  1. Hmm, it looks like they finally released the new 0.5 version, I wonder if they fixed all the same threading bugs I had to fix… []


  1. jordy says:

    Seems all good and fine to me. 1 thing to bear in mind though, I read on another indie game forum that applied to IGF couple of years ago (node-def) that the jury had comments on the accessibility of the game and the learning curve. I was kinda surprised at that, cause the game was relatively easy to figure out, but apparently IGF, at least in that year, made a big point out of that, so if, by any chance, you don’t get main prize, which I would find surprising, it’s perhaps the accessibility thing.

    And well, you’ll pick up that 100k on indie game challenge next year I’m sure!

    • checker says:

      I don’t think I have a chance at the grand prize, it’s too early and rough.  But I think I have a shot at getting nominated for Design and for the “Nuovo” award, which is kind of for innovation.  Cross your fingers!

  2. Squishy says:

    Good luck on the challenge. So are you going to be judged on the version you submitted or will you be able to send updates before the final judging?

    • checker says:

      Weirdly, you can update the build any time.  They don’t promise to always use the latest, but that seems fair.

  3. Jonathan Fulton says:

    Good luck at IGF!

    When can we expect a downloadable demo?

    By the way, I lol’ed a little bit when i saw this Intsructable posted today: http://www.instructables.com/id/How-to-Host-a-Spy-Party/

    • checker says:

      It’s going to be a long time before a real “demo”, but I’ll do a big beta at some point for tuning, and I’ll post invites on the blog, Twitter, and Facebook.  Next year sometime probably.

    • jordy says:

      Next year… someone needs to invent that time-machine for me!

  4. joshrl says:

    That’s the message I hope to read alongside the actual spyparty.exe!

    This game’ll be fun when I get to L.A.N Test it! :D

I have temporarily disabled blog comments due to spammers, come join us on the SpyParty Discord if you have questions or comments!