I have a lot of bigger posts queued up, but since this is time-sensitive, I wanted to quickly post that SpyParty beta tester insight‘s New Years Cup is starting tonight, with a match between darwin and drawnonward, and will be streamed live at 1am US PST (GMT-8) at http://twitch.tv/drawnonward. You can also sign up for the SpyParty Streams Notifier to get timely notifications of streams when they go live (one of the queued up posts is about that)! Here are the brackets:
I hope players do lots more tournaments in the future, and I’m thinking spectation will really help with that when I get it in. Live commentated SpyParty tournaments, so awesome!
Match Schedule
I’ll post these here as they become available, and update it with archives after the games are played:
tytalus has put together some stats for the players based on the leaderboard information. Eventually I’d like to make all the stats available via an API so people can do cool stuff with them.
The Tournament Rules
This is from insight‘s post on the beta forums introducing the tournament and calling for players.
All are welcome! This is in no way serious competition and players of all skill levels are encouraged to join.
The Format: The tournament will be organized into a random single elimination style bracket. I’m going to do single elimination in order to make sure this tournament gets finished in a timely fashion. Assuming this runs smoothly I think double elimination would be ideal.
Competitors will be responsible for contacting each other to arrange a mutually agreeable time to play your match. Each group of matches will be played over a period of 3 days. Please do not sign up if there will be periods of three days where you will not be somewhat flexible to find an hour to play.
The Games: Matches will be played as 6 rounds total. Players can decide to either alternate between spy and sniper, or one player can play 3 rounds as spy in a row, then switch. The player with the least games played plays first as either spy or sniper.
* Players will decide which map format they would like to play. * * If players cannot decide on a format, they will default to format #1*
Format 1: All rounds are played on Ballroom. Any 3 of 4 missions.
Format 2: Each set is a different map. – 1st Set: Ballroom. Any 3 of 4 missions. – 2nd Set: Balcony. Any 2 of 3 missions. – 3rd Set: Courtyard 2. Any 4 of 5 missions.
If players are tied at the end of the 6 rounds, they go into sudden death. The players play sets of games until one player loses both.
The Schedule: Each group of matches will be three days in which time all matches must be completed and reported by 12:00am EST ( UTC -5 ). There will be one day in between each round for updating the brackets.
Semantics: Round: A single game between two players on a single map. Set: A pair of rounds between two players on a single map, alternating roles. Match: A collection of sets.
I have a lot of stuff queued up to post about, but the other day, tytalus was playing theinfamousnolan and they were streaming both sides,1 and this game happened, and I simply had to write about it.
First, since Nolan’s the Sniper in this game, you can sort of play along with him, so watch this first:
Now, here’s Tytalus’ side, where he’s playing Spy:
Now, on first viewing, you might not be that impressed. “He got lucky”, “Nolan made a mistake and shot too early”, end of story, right?
I don’t think so. I think this is a perfect game of SpyParty, and I’m going to analyze it fairly closely to explain why.
It’s important to point out the title of this post is A Perfect Game of SpyParty, not The Perfect Game of SpyParty. I don’t want to imply this is the only or the best way to play. Any deep competitive game—which is what I’m striving to create here—needs to make multiple overlapping strategies available to the players at any one time, and the players need to constantly react to the current situation to choose the best one, or the least-worst one. However, this particular game exemplifies the pinacle of a certain style of SpyParty play, and I want to talk about why.
The whole thing’s a set up. A scam, a frame job.
One of the advanced ways to play SpyParty as the Spy is to try to “frame” an NPC, and get him or her shot by the Sniper. This is quite distinct from the Sniper choosing to shoot the wrong person even though you were trying to complete your missions; that happens all the time, even in elite games. Framing somebody is a step beyond that, where the Spy spends precious time doing certain actions in a certain way to try to implicate another partygoer, to “help” the Sniper shoot the wrong person. There’s a halfway strategy of just trying to get a lowlight for yourself, or getting a highlight for somebody else, and then using that as cover for doing missions as well.
It’s a risky gambit, because you can waste a lot of valuable time trying to frame somebody, and it’s very hard to recover when you’re running low on time, so you have to be careful if you’re going to choose this path. Also, you have to have a fairly high level of micro skill so you can be pretty confident of being able to act like the NPCs convincingly while you’re framing another one, and to hit green Action Tests on missions, both of which which are important to effectively frame someone.
I think Tytalus’ play here exhibits incredible observation, strategy, patience, and yes, luck, or more correctly, being able to take advantage of luck when it comes your way. I would have screwed this game up at multiple different points as Spy, and I’ll try to note those below as I talk about the game.
Observation
Tytalus’ observational skill was in play long before he started talking in this game. He almost ran into “the Red Dress” (Cybil Disobedience) at the statues immediately on spawn (0:11), but since this is the Time of Chaos™ you can get away with a lot of jerky movement and direction changes during this beginning phase, so he just bails from the statue and goes to hang out in a conversation to see where things settle out. This is the first place I would have screwed up. Since the Spy spawned near the statues, I almost certainly would have at least done an Inspect Statues, and probably would have earned a highlight for my troubles, which also would have made Cybil bail from the statue and go do something else. I’m too focused on completing missions as the Spy to observe subtle details about the party flow.
At this point, Tytalus is watching Nolan’s laser (which you can see if you set the video to HD with the little gear icon) to see what he’s looking at. He also checks his twitch.tv chats and answers one about contacting the Double Agent. He notices that Cybil goes straight from one statue to another, which while not exactly rare, is certainly a reason to be suspicious of somebody and probably got Cybil highlit if she wasn’t already from her “statue rush”. This is the second place I would have screwed up, because I wouldn’t have noticed that Cybil was the object of the Sniper’s attention for the back-to-back statue visits.
Tytalus moves to the conversation group containing the Double Agent at 0:37.
Strategy
At this point I think Tytalus has formulated a plan for framing Cybil and getting her shot. At 0:45, from the safety of a conversation, he says, “Now he’s watching the Red Dress pretty heavily, so what I don’t want to do is scare him off right now.” This means that if Tytalus had gone and done the Contact Double Agent action right then, the audible tell of “banana bread” would have immediately eliminated Cybil as a suspect because she was still at a statue. This would have made her impossible to frame, so it would have gotten a mission done but flushed the opportunity to frame down the toilet. I probably would have done that, making three mistakes.
Tytalus says he wants Cybil to go into a conversation and talk, so then he can hit a green Action Test on the Contact, making it look like he’s not talking but she is, and probably increasing Nolan’s suspicion of her. Tytalus doesn’t know for sure he can hit a green Action Test, because it’s hard,2 but it’s worth a shot, and if he waits for her to talk, even if he hits a white action test and talks himself, she’ll still be talking and be more suspicious than he is due to the statue visits.
Patience
“Red Dress should chat…c’mon Red Dress, chat! Chat, damn you!”
Although frustrated that Cybil isn’t talking, Tytalus is incredibly patient here. He’s in a conversation with the Ambassador (who is in range for the bug!) and the Double Agent, and he still plays it cool. He knows Nolan is not seeing any real tells, so is stewing in his own juices, manufacturing suspicion and starting to panic that he’s missing something. He knows this because this is what Snipers do—this is what human brains do—they see patterns even if there aren’t any. Similarly, Nolan knows Tytalus is higher ranked than he is, so he’s panicking even more that Tytalus is just invisible due to their skill gap, but is still accomplishing missions, and Tytalus knows Nolan is thinking this.
The Ambassador and the Double Agent leave the conversation, and he still plays it cool: “I don’t even care, I don’t care if there’s no…” (1:03)
I would have chased one of the two of them, or gone and done a seduce, or a statue mission. I would have been sweating the clock, since I’d wasted so much time trying to frame Cybil.
Luck
But, Tytalus is patient, and stands there as the clock ticks down. He knows Cybil has to go talk at some point, and at 1:21 his ship comes in. Cybil chases the Double Agent and the Ambassador, and then sidles right up to the Ambassador, as if she wants to cuddle (or bug) him.
Boom, headshot.
“YES!”
Poker versus Go
Now, you might say luck was a huge part of this, that it was the thing that won the game, but I don’t think so. Luck played a major supporting role to be sure, but it was Tytalus’ read on the situation, and his steadfast refusal to screw up an opportunity for a good thing to happen that won him this round. I bet, even if Cybil hadn’t landed right next to the Ambassador, or had gone to a different conversation circle, that Tytalus would have still gotten her shot. He’d played brilliantly up to this point, dealing with bad luck (like Cybil not talking for 30 entire seconds, an eternity in this game), and so I don’t see why he wouldn’t have responded to whatever else happened with the same virtuosity unless things had gone completely unpredictably pear-shaped.3
In poker terms, he was dealt a good hand, he turned it into a great hand with consistently excellent play, and he got dealt the perfect card on the river to take him unambiguously over the top.
I am a strong believer in luck and I find the harder I work the more I have of it.
Benjamin Franklin
Go has always been my favorite game, what I would consider the most beautiful game designed by humankind. When I first started designing SpyParty, my goal was to aim for Go, with its crystaline precision, its complete lack of randomness that would—I believed at the time—dilute the player-skill aspects of a game.
Over the years, I learned more about the very different beauties of Poker, and I began to realize regardless of where I wanted to aim design-wise or what my own preconcieved aesthetics were, when I allowed the game to lead the design naturally, when I listened to the game, SpyParty was actually heading towards Poker, with its beauty coming from probabilities and expected values and seizing the opportunity as it’s presented.
I certainly don’t expect SpyParty will ever be as well-designed as Go or Poker, but I am happy that it’s inching in the direction of allowing play at the level exhibited in the game above, and I plan to encourage this and take it even deeper.
If you’re interested in this topic from a game design standpoint, you really must watch two lectures:
Or, check out all the people who stream SpyParty here in my Following section,4 there’s usually at least one or two a night and lots of good games to watch: http://www.twitch.tv/spyparty/videos
After a too-long PAX-and-New Character Art-based build hiatus, I’ve updated the Early-Access Beta build 4 times in the last week or so! It feels good to be updating the game for the beta testers again! There are a lot of small fixes and features in these builds, but the two big ones are the addition of chat rooms and a brand new map, Courtyard.
Courtyard
In the old days, we walked to the only map, the Ballroom, uphill, both ways, and we liked it. Eventually, after a couple years of playtesting on that single map, I decided to test my working theory that making new and interesting maps for SpyParty wouldn’t be too terribly hard, at least relative to something like doing the AI and animations for a new mission. In other words, I was working under the assumption that because most of the gameplay in SpyParty is based on the character behaviors and the perception and deception mechanics, doing new maps would be a relatively easy way to add new gameplay. The maps would obviously be important and add a lot of variety to the game, but their layouts would not be as crucial to the feel of the game as they are in a shooter or a platformer. I mean, Ballroom itself is just a box and everybody seemed to like it!
So, I tested this theory by adding the Balcony and Veranda maps, and I’d say the theory was proven to be true, since both of those maps worked well and people like playing them. The Ballroom is still the go-to map for serious play because it’s the most tuned and balanced, but the other maps add some spice and hint at how the game will feel with lots of different settings and map topologies.
On the runup to PAX, I had an idea for a new map where the statues would be centrally located, but the Sniper couldn’t see them all at the same time. I was wondering how that would change the Inspect Statue and Swap Statue missions, which have turned out to be two of the riskiest missions for Spies to attempt. My original thought for this level was a single statue right in the center, but I decided that would be too hard, so I settled on three statues embedded in a central pillar, where the Sniper can only see one at a time.
I hacked this map together one night at PAX, and we playtested it the next day. The initial tuning was way too hard for the Sniper, not to mention how hard it was to get your bearings. After some tuning, and Wessel’s suggestion of using a statue of Alan Turing to give the Sniper an orientation reference point, the Courtyard seems to be working out well. I think I overcorrected a bit and the statue missions are now a bit hard for the Spy again, and it needs more playtesting and tuning, but it’s definitely already interesting and fun to play for both roles.
Current stats for Courtyard look like this:
Game Type
Total Games
Spy Wins
all
420
172 (41%)
Known 3
14
10 (71%)
Known 4
32
14 (44%)
Known 5
18
6 (33%)
Pick 3 of 4
63
27 (43%)
Pick 3 of 5
14
8 (57%)
Pick 4 of 5
90
28 (31%)
Any ? of 4
15
4 (27%)
Any ? of 5
174
75 (43%)
You’ll recall there there are currently three game types in SpyParty, “Known n” where the Sniper knows the n missions the Spy will try to accomplish, “Pick n of m”, where the Sniper knows the m missions available, but not which n ones the Spy picked, and “Any n of m”, where the Spy can choose which n to accomplish opportunistically during play, rather than having to pick them ahead of time. We’ve started abbreviating these k4, p4/5, a3/4, and so on in the beta chat and forums.
As you can see from this table, the different modes have different levels of handicapping between the players. I’ve just gathered these numbers from all the games on the Courtyard map, so this is totally ignoring skill differences, early games where players were just testing out the map, and the like. But, it’s still interesting to see the balance.
Unfortunately, as you can see, the Any game types are missing their n parameter. As I started gathering this data, I realized I’d screwed up and left that number out of the database for Any game types, so I can’t tell if the a?/5 games are a3/5 or a4/5, which is a bummer, because it makes a big difference in difficulty for the Spy and Sniper. I’ll probably have to ignore old Any games when I do real ranking with this data. I’ve since fixed it,1 and although there aren’t enough games with the new correct data yet to be statistically significant, here they are:
Game Type
Total Games
Spy Wins
all
46
16 (34%)
Known 4
9
0 (0%)
Pick 3 of 4
15
9 (60%)
Pick 4 of 5
1
1 (100%)
Any 3 of 4
1
0 (0%)
Any 3 of 5
1
0 (0%)
Any 4 of 5
19
6 (31%)
Chat Rooms
Soon I will be opening up the beta, and this (hopefully) means a lot of people will be playing SpyParty simultaneously, at least towards the end of the closed beta when I send out the rest of the invitations and into the beginning of the open beta when anybody can sign up and play immediately. The old lobby had a single room, and when 10 or 12 people were in there chatting, it got a bit hard to keep track of who was talking to who and what they were saying.
So, I did the simplest chat room design possible, with the goal of load-balancing the lobby if there were 30 or 100 simultaneous users chatting. I basically decided to put all the room creation and multiple-join/leave commands on the chat console, and have the GUI only allow you to select a single existing chat room at a time. This way advanced users can hang out in multiple chat rooms and make new rooms, but newbies can just join one and chat and play a match without thinking too hard about it.
The jury is still out on whether the current chat rooms work very well, and we’ll have to wait until I invite more people in to see if they solve the load balancing problem, but they’re certainly slightly confusing at the current density. I tried to make sure joining “Headquarters” (the default room that’s always there) was easy enough that you didn’t have to think about it and it acts just like a single room lobby if there aren’t many people online, but I didn’t want to dump people automatically into a chat room for fear of causing problems when the game was scaled. We’ll see how it works out. I foresee a lot of changes in this code and UI as the number of simultaneous users goes up.
One change I made shortly after releasing the feature was adding a “Created by <username>” line in the chat room description. Since users can create any rooms they like, this will at least keep people honest, or at least culpable! Before I added this players were creating rooms that sounded official, which was funny but probably fraught with peril. I also don’t support hidden rooms or password protected rooms or anything yet. I’d like to keep the community from segregating as much as possible for the time being.
On the subject of chat, I really need to do something soon about my text rendering code, it is incredibly slow right now:
checker: /fps SpyParty version v0.1.2202.0 19.869 ms/frame (fps: 50.33) sort self - current frame zone self hier count checkerlib::simple_font::DrawStringOrthoPixels 18.6377 18.6377 54.78 +chat_display 0.3964 16.6585 1.00 SwapBuffers 0.2445 0.2445 1.00 +IdleFinal 0.2400 0.4846 1.00 +_global 0.0582 19.8692 0.00
Logging Performance, etc.
There were a bunch of other smaller fixes, one of which other programmers might find interesting: I use the spypartyhelper.exe to write the log files now, rather than having the main spyparty.exe write them out. The helper has always done the crash dump management (using a modified version of Google’s Breakpad) and the auto-updating privilege escalation, but now I also have it handle logging, using a named pipe from spyparty.exe. The reason I made this change was some machines (like my main development machine) would happily write out the logs in the main process without affecting performance at all, even though I had commit mode turned on for the log file. I used commit mode so if the game crashed, the log file would contain the most up-to-date log entries, so when the helper grabbed it and put it in the crash dump report and uploaded it to my server I could use it for debugging. However, on some machines, the commit mode logging would take hundreds of times longer, and I couldn’t figure out what the difference was between fast and slow machines. What’s worse, it became clear that a lot of beta testers were assuming the game just loaded slowly, which subtly (or not-so-subtly) affects how you feel about the game, even though all the time was being spent writing log statements. Once I realized people were suffering with slow load times, I knew I had to fix it.
The weirdest bug I fixed involved the Spy playing the cough animation as soon as control was taken from the AI. The cough animation is supposed to be played when the Spy bails out of a conversation too soon after saying “banana bread” to contact the Double Agent. I added the cough because some people were cheesing out and running away from the circle before the contact animation had finished, and it was too hard for the Sniper to spot this glitch. So, the cheesers got a big surprise a few builds back! But, it shouldn’t be happening in a new game if you haven’t even done anything yet, and beta testers couldn’t get a good repro. Well, after a bunch of debugging, it turned out I wasn’t clearing a timer in the Contact Double Agent situation on new game, so if somebody was shot within 2 seconds of a “banana bread”, then since they were moving at the start of the next game but the timer hadn’t expired, the situation decided they’d cheesed out of the conversation and made them cough. Yay for cross-game bugs! I guess it was the ghost of the previous victim making the Spy cough!
Mail Deliverability
Man, sending mail reliably on the internet today is fraught with peril. I’ve been trying to figure out how often a beta invitation or confirmation mail simply doesn’t get delivered, or gets dumped in a spam folder. So far, I’ve struggled with and been victorious getting SenderID and SPF working, and I’m still wrestling with DKIM, but I am confident I’ll prevail…eventually. Of course, all the major mail clients use different standards. I guess I could just pay a mail sending service to handle this for me, but it just seems crazy if I’m forced to do that to get mail delivered. Then again, I’ve wasted a ton of time dealing with this, so maybe it would have been worth it. I tend to think the learning and understanding I get from working through these problems myself is worth the time investment, but that could easily be rationalization, who knows?!
Update: I think I have prevailed in the email war. I’ve got all the major email providers2 verifying my DKIM and SPF records. I had to battle php messing up newlines which confused the hash, SELinux disallowing postfix from talking to opendkim, and whole bunch of other randomness. My only problem now is with AOL, and their postmaster just admitted the problem was on their side and they’re fixing it. Hopefully that is the end of any spyparty.com email going into the spam folder, woohoo! I sent out 500 invites tonight to celebrate, which brings us to 2011-05-11 06:35:21 US Central Time on the in-order invites.3
I’ve tested the results with beta member “tytalus”, who was very patient! [↩]
Out of 20k beta signups: gmail 56%, hotmail+uk+live 14%, yahoo 7% aol 1% [↩]
I do 60% in-order and 40% random in each batch. [↩]
I believe I have survived PAX West 2012.1 I also know I would not have survived without the absolutely incredible volunteer help from some of the absolutely incredible SpyParty beta testers: Kamil Chocimski (hunter4hire), David Olsen (canadianbacon), Roger Hanna (ardonite), Dennis Clark (dbfclark), and Kate Welch (kate), not to mention John Cimino and Alice Lee! One of the downsides of doing the depth-first, accessibility-later development style is that you have to explain your game to everybody who comes to play, even after we’ve made them read the four-page manual. Booth duty for this game is incredibly tiring, and is basically impossible without lots of help, so I can’t thank them enough!
hunter4hire, dbfclark, and canadianbacon decompress after a long first day of training PAX attendees to play SpyParty!
This year’s Guest Indie, Storyteller by Daniel Benmergui, showed incredibly well both Saturday and Sunday mornings, and players were lined up to play it. You can see some of the great reactions to Storyteller in the pics below! Daniel also was on booth duty and did a great job as a SpyParty tutor! I think I may have him do the tutorial voice; the Argentinian accent lends the directions a certain gravitas.
So, have a ton of pictures! If you were at PAX and came by the booth, see if you can spot yourself or your friends! Oh, and check out Jeff and the other awesome enforcers who helped out throughout, but especially at booth breakdown…the PAX enforcers are incredibly helpful!
I have no idea what is going to happen next year, when they’re supposedly extending it to 4 days; it’s already life-threateningly brutal to stand in a booth talking for 3 days! [↩]
SpyParty is a spy game about human behavior, performance, perception, and deception. While most espionage games have you spend your time shooting stuff, blowing stuff up, and driving fast, SpyParty has you hide in plain sight, deceive your opponent, and detect subtle behavioral tells to achieve your objectives. Unlike the suave and confident spies you might find in films or books, most spies in spy games are more like super powered commandos--more Rambo than James Bond. By contrast, SpyParty is a new and quite different game about the more interesting and deeper aspects of being a spy.
Can I play it?
Yes, at least in beta form! Head over to the Early-Access Beta Page for details!
SpyParty is currently in active development, but there is no ship date yet, and there won't be for a while, because I want to make it perfect! All of the art you see on this website is placeholder art for the gameplay prototype! This blog documents the game's progress. Feel free to leave questions and comments, and I'll try to reply.
Also please tell your friends about the game, and follow the game on Twitter or Facebook. Indie games like SpyParty depend on fans to spread the word. Thanks!