Deductive Depth Jamming, Beta Balance, and Megabuild Todo List

I was killed.

Wow, I have been busy, and the Early-Access Beta todo items are piling up! I will just get right to talking about stuff, no introduction necessary!

The Depth Jam and Deduction

Recently, a small group of us did an intensive game design retreat we called the Depth Jam, during which I dug into the deductivity of the Sniper gameplay.  I want there to be some deductivity on the Sniper side, so the player has some method or process he or she can step through to eliminate suspects and not just completely drown in information, but I don’t want you to be able to completely grind out who the Spy is by a series of rote operations, like in a game of Clue.  Since one of the aesthetic themes for SpyParty is about “making consequential decisions with partial information”, it’s very important that the Sniper not be able be 100% sure of the Spy’s identity, unless the Spy screws up and the Sniper sees a hard tell.  There are a lot of places where deductivity comes into play for the Sniper, but an important one is the highlight/lowlight mechanic.

If you’ve read the documentation, you know that the Sniper can highlight and lowlight people at the party to manage levels of suspicion.  This is purely a Sniper-side mechanic: the Spy doesn’t know for sure which characters are being tagged in this way or how, except that the Sniper’s laser has to hit the character to tag them, and this is visible to the Spy.  The current version of this mechanic has two levels of highlight above neutral, and two levels of lowlight below neutral.  The original intent was that you’d want to vary the amount of suspicion or lack thereof based on how the party is progressing, and for the most part, this worked.  However, gamers are very good at optimizing things, and soon one of the elite players realized he could use these five levels as a 5-counter, using both the highlights and lowlights to count total number of visits to the statues and bookcases.  Depending on the missions selected for the game, this Sniper would have a pretty good idea of who had to be the Spy.

From a game design standoint, this kind of player behavior is a delicate thing to direct in a player-skill game.  Should the game help the Sniper do this bookkeeping because the player is going to want to do it anyway?  Or, does the existence of multiple levels actually encourage this kind of bookkeeping?  Should I nerf the mechanic, or just make the NPCs go to the statues more often so the bookkeeping is less relevant?  It’s very hard to know the answers to these questions, but after thinking about it for a while, and talking to the elite players, I decided I needed to deal with this in a few different ways, and it will be an ongoing iterative design challenge:

  • I proposed nerfing the Sniper’s mechanic to a single level of highlight and a single level of lowlight.  Snipers could still use this as a 3-counter, but that’s less valuable, and each individual highlight or lowlight becomes more consequential.  On the flip side, it removes the cognitive load associated with trying to figure out if you’re going to single- or double-highlight, which is subtle but significant.  It’s also a lot cleaner controls-wise.  This was the first real nerf, and the beta community responded well to the idea.  There was some grumbling, but players posted thoughtful critiques and analyses of how they thought they’d be affected.  I realized I was going to have to test this thoroughly, but it was easy to isolate and I chose it as my question for the Depth Jam.
  • I decided against changing the NPC behavior in the short term, but in the long term, instead of simply increasing the probability that NPCs will visit the statues (for example), I might make it so some NPCs end up going to the statues a minimum number of times.  However, either of these is a very complex change, because if an NPC is at a statue, it means they’re not at a bookshelf or in a conversation, so the entire flow of the party will change.   This is a very nonlinear change, and it’s hard to predict what will happen.
  • I can also change the missions that require the Spy to be in “deductivity-susceptible situations”.  Keeping with the statue example, at the Depth Jam we ended up modifying the Inspect Statues mission so that instead of requiring three visits to the statues, the Spy could also inspect the neighboring statues if they’re not being held by and NPC.  This allows the Spy to trade off duration and number of visits, and requires Snipers to have a feeling for both these quantities.  There’s also a discount on the amount of time it takes to inspect each additional statue in a single visit, so you’re encouraged to inspect more than one.  Finally, it makes the middle pedestal the most valuable statue to visit, because it allows the Spy to inspect either side, so characters going to the middle statue are a bit more suspicious.  I love these tradeoffs, and these changes felt great when we tested them.

To give you an idea of how we went about testing this stuff at the Depth Jam, here is a screenshot of a special build we played.  In it, I had the computer automatically increment two counters over the characters’s heads, one for statue visits, and one for bookcase visits, so the Sniper didn’t even need to click.  This was never something I’d release to players, but I wanted to see how the game felt if the deductivity was “turned to 11”.  Especially before the Inspect Statues changes, you could definitely just shoot (or at least watch) the person with the highest numbers.

Shoot Danger P. Johnson, he's got the highest numbers! Except he's the Ambassador.

I’m very happy with both the single level of highlight/lowlight and the Inspect Statues changes, and they’re going to roll out in the next build.

Beta Balance

I haven’t run detailed metrics yet, since I’m scrambling just to keep things humming along for players, but I did get curious about whether the game is even roughly balanced right now.  Qualitively, I’ve been surprised by the seeming consensus in the private beta forums that the Sniper is the harder side to play.  In the private testing I did with Ian and Paul, it seemed like at elite levels the Sniper had the advantage, but I wasn’t seeing people complaining about this, which I found interesting.  Even more surprising was that players had settled on Pick 4 of 5 Missions on Ballroom as the balanced game mode.  Back in the day, Pick 3 of 4 Missions on Ballroom was considered balanced, and even then we were worried about a Sniper advantage at elite levels. 

Because SpyParty is so intensely player-skill oriented, I’ve implemented a number of game types so players can handicap matches to make up for skill differences.  You can tune the Spy’s difficulty by choosing modes with more or less missions to accomplish, and giving the Sniper more or less information about which missions will be enabled.  Some modes allow the Spy to complete any small subset of the missions chosen opportunistically while playing.  Other modes require the Spy to divulge exactly which missions he or she will attempt.  A large skill gap in favor of the Spy can be handicapped by choosing “6 Known Missions”, where choosing “Any 3 of 6” makes up for a lot of skill on the Sniper side. 

Pick 4 of 5 is significantly harder for the Spy than Pick 3 of 4,1 yet people were playing it as the default mode once they graduated from Beginner Ballroom, so I decided to run some quick numbers.

The first thing I did was looked at the results of all games ever played in the beta.  There are four possible outcomes of a game of SpyParty:  the Spy can accomplish the missions, the Spy can run out of time, the Sniper can shoot the Spy, or the Sniper can shoot a civilian.  We call the first and the last a Spy Win, and the middle two a Sniper Win.  The results were even more balanced than I thought they’d be!

Total Games: 13238, SpyWins: 6494 (49.1%), SniperWins: 6744 (50.9%)

Whoa.

Okay, so this is great, but it’s pretty silly, since this includes every newbie game, every game where somebody said “shoot me because I’m stuck on the briefcase”, and the like.  So, next I decided to look just at the elite games.  I defined “elite game” as one played between the people on the leaderboard with more than 20 hours of game time.2  That part of the leaderboard looks like this:

The top 8 players on the leaderboard by time.

I did a few different queries here.  First, all games these guys played in the last three weeks:

Total Games: 1794, SpyWins: 826 (46%), SniperWins: 968 (54%)

This includes teaching games, which these guys do a lot because they’re awesome, and everything else, so then I narrowed it to all games they played versus each other in the last three weeks, so these are the most advanced games going on in SpyParty right now…and these guys are very good…I know this because they beat me routinely:

Total Games: 266, SpyWins: 128 (48.1%), SniperWins: 138 (51.9%)

Wow, again, that’s just incredibly balanced!?  I couldn’t believe it when I ran these numbers, but I’m super happy with them, and it goes a long way towards explaining why buxx said this to me in chat:

checker: "so, you've played 43 hours or whatever, do you feel like there's a
ceiling for you yet, or still going strong?"

buxx: "Skillwise, not even close, I still feel like I have a ton of room
for improvement"

I just feel incredibly lucky to have a game this deep, this early in its development.  I’m so excited to take it even farther…people in competitive game design talk about “300 hour” games, and games like Go and Poker can be played for a lifetime.  I hope to take SpyParty to those levels, or as close to them as I can get.

Finally, I looked at these players versus each other at a finer grain.  I’ll just post some rough numbers for buxx and ardonite, because they’re an interesting contrast:

      As Spy     As Sniper
  Total Games Wins Win% Total Games Wins Win%
buxx 32 23 71.88% 34 20 58.82%
ardonite 24 12 50.00% 22 14 63.64%

buxx is the top player right now, and he wins most of the time even against the other elite players, but especially as Spy.  ardonite also wins over half the time against the elites, but moreso as Sniper.

I can’t wait to delve into the metrics more in the future.

Todo

Due to the Depth Jam and other distractions, the todo list has been building for weeks.  I’m finally cranking through it, but I’ve dubbed this next build the “megabuild” because of all the stuff I’m shoving into it.  This is not the right way to develop software.  You should do more small releases, so you can test and isolate bugs, but I’m kind of on a roll and don’t want to slow down to make a build until I get some more stuff fixed.  I won’t do this entire giant list before releasing, but I will do a couple more days worth of work.  I’m afraid there are going to be bugs due to the number of changes, so it’s really the build after the megabuild that is going to be totally awesome!

  • misc
    • added matches and total match time to leaderboards
    • alpha punchthrough for binocs and timed text…draw after
    • kill “sleep too long” log message
    • put graphics and cpuid info in log, at least glext
      • pack cpuid into string in journal too
    • don’t make duplicate logins delete cache and crash, stupid and annoying
    • hittest laser to world for marking, except for window muntin bars
    • mission text in practice sniper mode buggy
    • terrible lowercase in username entry on login page
    • s/affordance/action/g in code
    • highlight/lowlight nerf
      • ctrl/shoulder slam all the way to highlight/lowlight
    • hysteresis on actions
      • if it’s present in the current batch, set the index (unless it’s been manually set)
      • if it’s not present, grey it out and fade it away
      • this needs a lot of testing, it was a complex change
    • clean up timeouts, wins, blah text everywhere in game
    • remove debug_state_transitions
    • check for pdf file association in setup program
    • need network test during greeting
    • invite beep in practice mode?
    • don’t hide mouse during sniper menus
    • put stats on match menu
    • mouse sensitivity config prop and readme.txt
    • do in-game update with a popup window instead of modal!
    • sell subliminal advertising in the crowd walla
  • endgame and results
    • not top suspects, just high/lowlights, filtering down cast
    • escape confirmation on results screen with settings
      • can take out the eat stuff and timer
      • make Last Results on the match menu? possible?
      • test invite cancel
    • OT confirmation, OT happens on sniper machine for a second
    • output game result into log
    • shoot after timer runout still records shot person
      • Shot person on sniper screen but not on Spy screen
    • escape from invite to game needs confirmation?
    • if sniper escapes while spy is waiting for results, game doesn’t end
    • need to record actions for spy when ai before control
  • briefcase
    • make briefcase a heavy pathing weight, not infinite
    • briefcase making characters float off ground
    • moving while putting down briefcase
    • stuck in COURIER_WAITING_FOR_SCIENTIST_HOLDING when ambassador has a book…not moving
      • need to put down the briefcase when the timer runs out!
      • dispose is broken, courier won’t put it down!
    • add pauses
  • conversations
    • fix interruption stuff to occasionally finish talk animation
    • people in convo circles by themselves can read book until somebody else comes
      • hmm, one frame of Read Book action, and immune to pause?
        • ahh, the listen stomps it, need some kind of “interruptable” flag on anim, or priority
    • can interrupt while taking drink…need to block
    • people need to leave during listen idles?
    • people going through middle of convo circles?
  • double agent
    • fake bbread not available when selected but not enabled
    • banana bread double agent signal…if da leaves while action testing converts to fake
      • need to have DA check to see if spy is action testing, and not leave convo if so
      • how to do override in double_agent.cpp?
    • double agent won’t go into circle during last minute – guarantee in last 30 seconds?
    • fake banana bread is default option over flirt
      • drink over conversation
    • need to have cancel behavior on bbread
      • okay – what to do here? person starting to talk is enough? short cough?
      • bad – cough as walk away
  • statue
    • new inspect statues design, can inspect statues next to you if not held
    • finish drink at or take briefcase to pedestal like bookcases
    • play sound when teleporting statue back, sorry ardonite!
    • swap wrong statue when between pedestals – /tmp/fraps
    • two people pick up same statue
    • bad statue action test is fastest, make it delay, or flicker longer
    • statue swap cancel makes it disappear
    • statue swap bad action test needs timer before swap happens
      • maybe bad swap doesn’t actually swap, it toggles it and back?
      • or, statue swap is too hard already so don’t make it worse?
    • good swap statue action test
      • need to prevent run out of time between good action test and swap?
      • its obvious to elite snipers, worse than hiding body…
        • make it swap when somebody else picks it up? too powerful?
        • make it instantly warp, not alpha
        • more than 5 seconds? cheesy way of buying time then…
  • bug ambassador
    • while watch check is happening, walking bug amb is not blocked
    • ability to bug holding book in one hand
  • bookcase
    • fix bookcase pileup – do vertical expanded shape
    • AIs wait a bit more randomly before leaving bookshelves
    • marking book on shelf doesn’t record character because not attached yet
      • do I want to support this even? have all books be grey on sniper?
    • change put book and get book to have start/end events too
    • idles in book watch animations, mix it up a bit
    • second book page turn? or just use the idle for a time?
    • make cycling books unified, right – blue, left – green, add red as double click, then grey
      • bookcases vary in color per map…need to standardize and make maya prop type
  • seduction at paintings
  • chat
    • window size, pos, borderless, maximized through chat commands
    • add @ with username completion in chat
    • color code names in chat
    • kill “bogger says:” in single line chat copy
    • history when typing chat line
    • add crlf to chat copy so notepad works
    • crash on non-text data in clipboard
    • hitting escape kills the chat message you’re typing
    • make it clear the first whisper went through even if got the away message
    • packet loss test on console
    • can’t run /fps command even without connection…but can do practice in lobby
  • manual & readme
    • put the latest manual images up, readme, etc
    • s/noob/newb/ in manual…ugh
    • documentation change to security agent
    • remove y button
    • inspect statues
    • highlight/lowlight levels and controls
    • add note about SpyPartyHelper.exe to the readme
    • note lag is only on sniper side
  • buxx feels watch check is underutilized…
    • add more time?
    • at paintings? in conversations while by yourself?
    • watch check with book
    • cancelling watch check needs failure or is animation tell enough?
  • zerotka list of helpful things for research
    • unlimited game time endless practice mode
    • ability to see all floor pads in sniper view
    • books come out same color as shelf
    • Seduction Target in sniper view
    • inability to complete missions or way to clear them
    • no back walls in Ballroom as sniper ( or transparent if that’s easier?) ( aka, i want to be able to see in from all angles)
    • camera track be a complete circle all the way around the ballroom.
  • bugs
    • intel problems
      • lobby message box bad z
      • key and mouse button drops due to shit framerate
    • fix the rare junked game bug
    • put more debugging code into the drinks.cpp coreanim crash
      • store things to locals to see, do memory readable check on coreanimation
    • phatjax crash in stun code, assert in log first
      • 0.1.1983.0-phatjax-7cs4v-e9SBihV1znwyvuFw.7z
    • lobbyserver leak – use backtrace
    • inviting phatjax after cancelled invite gives assert
    • assert !”what do to here?”, File: .\examples\lobby\lobbyclient.cpp, Line: 1798
    • fix DTScale behaviors, briefcase, waiter, have game clock
  1. Pick modes require the Spy to choose which missions to accomplish before the game starts, while Any modes let the Spy opportunistically choose during play. []
  2. Important note: this is actual game playing time, not time spent in the matches overall, or time in the lobby, both of which are way higher than this.  A lot of people like to hang out and chat in the lobby! []

SpyParty Beta Fan Fiction

So, uh, I have been a little busy lately.  I know it’s surprising, but the Early-Access Beta has lots of bugs, needs lots of tuning, and the (slowly) growing community needs lots of questions answered and lots of design decisions explained.1

I haven’t processed all the numbers yet, but some super simple database queries indicate I’ve sent something like 762 invitations, 357 people have registered,2 and 246 people have greater than zero seconds of game time.

These early-early-access people have managed to create a really wonderful community already.  As I’ve said before, the main reason I’m not just inviting all 13047 of you3 into the beta right now is the game’s lobby server and backend technology is not scalable yet, so everything would just melt.  However, there’s a secondary reason, and it may be even more important in the long run: growing a healthy community is a difficult and delicate thing to do, and a good community is incredibly important, especially for a game as different as SpyParty. Because there’s no in-game support yet for mentoring, or ranking, or cheat protection, or replays, or tutorials, or any of the important stuff that tries to keep player-skill game communities on the interenet from hating each other instantly, I’m counting on the beta testers themselves to be good people, help newbies, and teach each other to play better.  They are doing a fantastic job, exceeding even my very high expectations.  But, like growing a company, it’s important to introduce new people into the culture slowly so as not to overwhelm it. As the beta progresses, I will be posting lots of stuff from the private beta forums, including strategy guides, data analysis, opinions about tuning and balancing, and all that serious stuff.

This post is a little different.

Beta tester zerotka (otherwise known as Keith here on the blog and facebook) has been called the Jane Goodall of SpyParty, because he studies the NPCs4 and then writes about their behavior, sometimes uncovering serious bugs in my code in the process.  However, because he stares at the party so long…well, better to use his own words:

zerotka:  I had recently decided to go into practice mode and watch how the AI partied. I decided to start off with watching the waiter and how party members would react after getting a drink. I was hoping to find some tells so i spent quite a bit of time with it. I think after about the 10th or so game, i had to write a short-story-like-thingy. I had shared it with a couple other testers and they thought i should post it on the forums. I was hesitant at first, but alas, here i am.


Toby
The other day I had taken a few minutes and watched the waiter, Toby. 
I watched him from outside the ballroom.
He walked about, person to person, and offered drinks.
The guests had no respect for Toby in anyway.
The more i watched, the more overwhelmed with sadness i had become.

He would approach a guest and extend out his tray
And politely wait….
He received no form of acknowledgement. 
They all simply ignored him.

If they happened to be thirsty, they’d turn around,
grab a drink from the tray and immediately return to the conversation.
Not a “Thanks”, Not a, “How’s your day”,
Nothing. 

Sometimes, a guest would turn around to grab a drink
but when they saw it was Toby they would return to the conversation.
After i saw that, i..
..i lost control of myself.
“Don’t let them do that to you Toby!” I had screamed.
He was completely invisible to them.
They would even run into him!

Several minutes of constant disrespect had drained the life out him.
He began to believe what everyone was doing to him–He believed he was a robot, an AI.
If i had enough bullets, I’d shoot every one of those jerks for you Toby!
But i only had one bullet.
And even if i had enough to kill all of them, more would spawn to replace them.
A tear had formed in my eye.

I had grabbed my sniper and centered Toby in the sights.
He had walked toward the window and stared at me.
I could tell by his blank expression 
that his life had somehow spiraled out of control
And he knew there was only one way out of it.
I switched the safety off. 
I’m sorry Toby.

The tear had fallen down my cheek and onto the ground.
The glasses on the tray had crashed to the floor,
Guests had screamed and cowered in fear. 

Even though the spy had gotten away
I still felt like it was a small victory.

I hope in digital heaven, they serve you alcohol.


The real ending was actually me during the 11th game and shooting the first person who refused a drink from Toby.

 This thread, as you might expect, blossomed. 

sirlaitier: Here’s a haiku:

Security Guard
Can’t be bothered to squat down
Stands over the dead

zerotka:

I think Chris Hecker
Just forgot to put knee caps
On the character

 A few builds later, I snuck a little something into the game…it took a few days for people to notice.

Before and after fanfic inspiration!

The thread continued…

quirken:

♫Who’s the spy?
Oh sniper, don’t shoot me
Don’t shoot me no more
Oh, sniper don’t shoot me
Don’t shoot me no more

Who’s the spy?
Yeah

Oh, I don’t know why you shot me
I gave you no clue, but you didn’t care
So what is right and what is wrong
Gimme a sign♫

 

hunter4hire:

Memoirs of Virginia Vulpes
I’m not a rich person, and I don’t associate myself with them.
but when my best fried Girta, told me she has tickets to a grand opera, I couldn’t refuse.
When the day finally came, I put on my best. My orange Sunday dress.

We arrived at the theater late, and the opera was about to start!
how exciting, that it was, but not as exciting as the Intermission.
Guests flooded the veranda balcony for cocktails and cigars.
we walked through big french doors, and took a fresh breath in.
there were fine sculptures and a charming bartender, handing out 
cocktails and brandy.

Girta and I started chatting about the opera, and a few guests
have joined our conversation. That’s when I noticed something strange.
This young gentlemen seemed to have grabbed another gentleman’s high knee!
What was stranger, is that he didn’t react to it! Later I found he was an Ambassador of some foreign country.
Girta saw it too, and we just looked at each other puzzled, and we both knew, something odd was going on.

I strolled over to one of the bookcases, while Girta was fraternizing with a young fellow. 
I could see she was already infatuated with the young man. 
I was surprised to the amazing book collection, but then I saw that gentleman from before!
he was a few not a foot away from me, as he was looking at a golden statue of some sort of bird.
I tried not to stare, when he gave me a wink! and pulled out a similar looking statue from beneath his coat!
he quickly swapped the two, and whispered to me, “If you tell anyone, I will kill you.”
I stood there in shock clutching “Sun Tsu’s Art of War” in my hand.
my heart started to beat fast.
I took a deep breath and turned around. I saw Girta coming towards me, I couldn’t wait to tell her what happened, when suddenly a sharp quick sound of a muffled gun fired! 

I could swear the following few seconds lasted many minutes.

Girta… she took one step forward, and fell to her knees.
as she fell to the floor, her blood has started to spill..

Dear God…

My friend..

My best friend..

Who would hurt such an innocent woman!?
People started to scream as I saw that nasty man who has stolen the statue, flee inside.

The next day, I packed a few baggs.
I swore to myself and to Girta.. may she rest in peace.. that I would find that man.
and kill him, for I am certain it was him.

It was my fault…

He was aiming for me…

If I hadn’t gone to the opera, I would have never spot that man, doing his dirty deed.
oh Girta… I’m so… so… sorry.

I’m off to find your killer. I don’t know how I will find him.

But I must.

This is my last entry.

Then it started bleeding into other threads, like the one where people were discussing whether the Sniper should have a personification in the world outside the window, instead of just being a disembodied laser.

quirken: The sniper should be the silhouette of the banana suit guy that dances to the PB&J Time song. A bit of a quick mock-up for you all to enjoy. Obviously, the banana is not to scale.

And the inevitable response…

moomanibe:  ….The artist in me would not let me ignore this.

I’m sorry.

And a subtle reference back in the original thread…

zerotka: My quick rendition of what families feel like when the darn sniper misses the spy.

Make sure you click to read the article.

Okay, back to trying to figure out why the lobbyserver is leaking 130kb when it times out dead clients.

  1. or irrationally defended []
  2. which is 47%, and is very close to my most optimistic estimates of 50%, and I haven’t even sent retries for these mails yet! []
  3. as of this post []
  4. buxx immediately said “NPCs in the Mist” when this idea went around the lobby []

A Beta Chat Log and The Current Leaderboard

One of the best things about finally having regular players in your game’s beta is you get to watch the server logs for bugs, or just snoop on your players chatting with each other before and after games.  In fact, this is so addictive, and you learn so much about how your game really works with players by doing this, that I had to basically stop myself because I was sitting there all day watching the logs scroll by rather than, you know, fixing bugs.

That said, I thought you’d like a taste of this server voyeurism yourself, so I asked arbaard and dbfclark if I could repost their chats from a series of games a few nights ago.  These chats are great, because they show two very good players (both were at PAX 2010 when I first showed the game, arbaard was in the tournament, and dbfclark is the person who noticed that the line watching the games was getting implicit Sniper practice).  You can see them helping each other after each round, discussing what went right and what went wrong, changing the game types as they handicap the games, and sharing information so they both can improve.  Plus, they’re funny.

dbfclark hey
arbaard hia
arbaard *hiya
dbfclark what would you like to play?
arbaard anything’s fine
arbaard have you played much?
dbfclark yeah; you?
arbaard yeah a bunch
dbfclark should be interesting
Saved Game Results.
arbaard saw the tell
dbfclark alas
Saved Game Results.
arbaard got me!
arbaard what tipped you off? time dilation?
dbfclark I was pretty sure when you time dialated
arbaard haha
arbaard 5/6 is really, really hard!
arbaard feeling lucky?
dbfclark sorry, what did you do? gotta make it fair
dbfclark 5 of 6, right?
arbaard yeah I did any 5/6. I was just playing around though
arbaard I don’t think it’s very balanced for even skill levels
dbfclark ok, off we go
arbaard I was playing that with my friend who just started playing.
arbaard alrighty
Saved Game Results.
arbaard heh
dbfclark sigh
dbfclark what tipped you?
arbaard you were very interested in sculpture.
dbfclark yeah
dbfclark it was either that or seduction.
arbaard 5/6 is a little too hard for spy, methinks
Saved Game Results.
dbfclark well done
arbaard thought you had me when I bugged the amabassador
dbfclark you were definitely a top suspect, but I didn’t have my eye on
dbfclark you enough
arbaard not nearly as sneaky as I should have been.
Saved Game Results.
dbfclark damn it
arbaard I thought it was that black guy
dbfclark thought I was doing so well there
arbaard were you purposely trying to get me to shoot him?
dbfclark no
arbaard you got real close, making me think the AI glitched out on him and was just
arbaard invading his space
arbaard so I thought he was the guy
dbfclark banana bread just killed me? was it two double agents in convo?
arbaard because both you and him walked away from the window after I noticed we were at 4:00
dbfclark ah
dbfclark greed
dbfclark that’ll do it
arbaard no you were talking to the only double agent in a convo
dbfclark ah
arbaard plus, you were marked high suspicion
Saved Game Results.
arbaard god I love being fat.
dbfclark argh
arbaard being fat and a spy
dbfclark thought I saw a bug go down, didn’t
arbaard huge plus
arbaard hides those animations so well!
arbaard what did the yellow guy do?
dbfclark ok, something wonky is happening; my sound is gone
arbaard uh oh
dbfclark gonna restart
arbaard restart?
arbaard have you joined the steam group by the way?
dbfclark not really
arbaard It’s better than waiting around in the lobby
dbfclark well, I’m in the steam group, but I don’t have the overlay set up
arbaard oh
arbaard well that’s fine
arbaard that was only like a side-not
arbaard e
arbaard nope
Saved Game Results.
arbaard that was super unfortunate
dbfclark caught the tell?
arbaard she ducked while you bugged
dbfclark oh, crap
arbaard and your hand went in the wrong direction
Saved Game Results.
arbaard EVERYBODY
arbaard WAS IN MY WAY
arbaard I must have bumped into 5 people
arbaard and that damn waiter…
dbfclark yeah, but that was the second funny walk twitch I caught
arbaard that was me cancelling a failed banana bread
arbaard twice.
Saved Game Results.
arbaard nicely done.
dbfclark hah!
Saved Game Results.
arbaard oh darn
dbfclark sorry
arbaard that wasa supposed to be a perfect banana bread
dbfclark it actually was a pretty good one, I just had my eye on you
dbfclark you ran away
arbaard haha!
arbaard nobody picked up on that until now
arbaard I usually banana and run
Saved Game Results.
arbaard oh no!
dbfclark no idea where that came from
dbfclark why’d you shoot him?
arbaard hunch
dbfclark fair, happens
arbaard he was marked
dbfclark ah
arbaard then went blue, statues green
Saved Game Results.
arbaard haha
dbfclark crap
arbaard that was intentional.
dbfclark ?
arbaard perfect banana
arbaard when he came in.
dbfclark ah
dbfclark wasn’t why I shot him
arbaard oh really?
dbfclark though it helped
arbaard what did he do?
dbfclark drank too fast, I thought
arbaard oh, weird!
dbfclark sigh
Saved Game Results.
arbaard nope
arbaard changin it up high?
dbfclark fair
Saved Game Results.
arbaard ugh, so close
arbaard I should have played it cool for a min
dbfclark that’s why I shot you ;-)
dbfclark probably
arbaard yeah but did you see my awesome ambassador bug?
arbaard that was cool
arbaard gave him the briefcase and a bug.
arbaard hahaha
Saved Game Results.
arbaard nice try
arbaard that was sneaky
dbfclark cheaty cheaty — it’s usually a good opening move
dbfclark I was nervous about it — good to see my ners were justified
arbaard you just happened to beeline across the empty room.\
Saved Game Results.
arbaard heh
dbfclark sigh
arbaard check out how I transferred the microfilm
dbfclark never trusy my instincts
arbaard you see how I transferred the microfilm?
arbaard as the general?
arbaard it was pretty cool.
dbfclark I’m not sure I get it
arbaard (I did the book swap as your char model)
dbfclark oh, I see
arbaard :)
Saved Game Results.
arbaard f!
dbfclark jow
dbfclark joy
arbaard \
Saved Game Results.
arbaard WHY?
arbaard I WAS JUST SIPPING MY MARTINI!
dbfclark yep. sipping and watch checking
dbfclark sorry
arbaard that’s funny, I didn’t even add time
dbfclark yeah
arbaard I was just chillin
dbfclark I know
arbaard the statue mission bugged and I couldn’t complete it
dbfclark you were chillin’ nervously ;-)
arbaard I was gonna play it cool
dbfclark ah
dbfclark I also saw the woman with the briefcase go stationary
dbfclark sorry, I gota go do household things
arbaard alrighty
arbaard nice playing with you!
dbfclark thanks for the games! I learned a lot
dbfclark another time

I’ll do more posts from the beta soon!  I’m slowly inviting folks from the beta sign-up in now, and it’s working out great so far.  Lots of bugs reported, lots of bugs fixed, and people are playing a ton and seem to be having a great time!  Here’s the leaderboard as of right now, look at some of the play times and remember a lot of these people have only been in there a few days!

Seventeen and a half hours played in four days!? So. Awesome.

The Welcome Post and Tutorial Video From the Beta Forums

This is the Welcome post for the SpyParty Early-Access Beta forums, including the tutorial video I recorded last night, which will hopefully help the complete newbs I’m about to invite in from getting frustrated (and shot).

Welcome to the SpyParty Early-Access Beta!

This welcome post is going to be a living document, which is to say I’m probably going to accidentally leave out 97% of the information that should be in here. I’m going to edit it constantly, hopefully trending eventually towards leaving out only 95% of the information that should be in here!

When you figure out something I should have put in this post, you should reply to it and I’ll slowly merge the additional information into the post itself.

Getting Started

If you’re reading this, then you registered and logged into the beta website correctly, so the next thing you should do is download and install SpyParty! On your beta homepage you should find a Download Latest SpyParty Setup link. If you click that, you will get a download for the latest version of the SpyParty installer. Sadly, some newer versions of Google’s Chrome browser are claiming the file is malicious, which I really don’t appreciate, but I’m trying to work it out with them.

After you run this installer, you should have your copy of SpyParty installed, along with the PDF of the manual and the README.txt file. You should read those first before playing. Yes, I know, reading about games is boring and playing games is more fun, but SpyParty is a very different kind of game—so your previous game experience will not carry over very well—and it’s very early in development. It has a lot of rough edges and very little online help. So, please read those documents and this post before trying to play, or else I’m worried you’ll get really frustrated and not have a very good time, and that would make me sad. Trust me, you’ll have a much better time if you read the documentation!

After you’ve read the available docs, you should launch the game and go into Practice mode, and then Practice Spy. This mode has no opponent, and you’re not playing online, so you can take your time and figure out how to accomplish all the missions.

Here is a tutorial video I recorded going through Practice Spy, Practice Sniper, and Preview Spy Missions. It’s 15 minutes of me babbling, as if I’m giving you an in-person tutorial at a conference or playtest, and it assumes you’ve read the manual and README.txt. If you want to see the Sniper laser, you probably have to englarge it up to see the full 720p resolution, but even then it’s hard to see with the video compression artifacts.

You should make sure you can complete each mission in Practice Spy mode, including the variants on the missions (like Bugging the Ambassador while in a conversation and while walking, or Transferring the Microfilm both inside and outside the book), and do them within the time limit for the map. If you can do this, you have a good chance of winning your first game playing as Spy (against another newbie, of course!).

You should also do a round of Practice Sniper, getting comfortable with the controls, including how to shoot when the time comes. If you’re new to the game, I would not bother learning highlighting and lowlighting suspects yet, but just concentrate on being aware of who is doing what, looking for suspicious behavior, remembering which statues are in place, and the like.

You can also check out the Preview Missions option in the Practice Menu. This mode will allow you to see all the Spy tells looping forever, so you know what to look for as the Sniper.

Playing Online

When you finally do go on line to play, you should try to play people at your same skill level. There is no matchmaking or ranking yet, so you’ll have to look at the number of games played in the lobby stats to know who to play. If you have to play somebody way more experienced than you, make sure you ask them to mentor you during play, let you know what you’re doing wrong, and what you should be looking for. There are also a lot of ways of handicapping different skill levels, which I can talk about in a different thread.

Also, since the beta is still in its early days, there are not a lot of people with active accounts yet, so the lobby is most likely going to be empty if you just randomly log in. You should use the forums to make dates to play with others if you can’t get a pick-up game going, or use the newly created Steam group to find other matches.

You can also leave SpyParty running in the background in the lobby if you want. The default is to beep when a chat comes in and the game is running in the background, so this will notify you if somebody shows up while you’re waiting. Some of the other early beta testers use this technique!

At some point soon, we’ll start regular playtests at regular times. I need to figure out the best time for this, and I’ll probably run a poll here in the forums.

Learning to Play

Beginners should play the Beginner Ballroom map, with its 4 pre-selected missions (Bug Ambassador, Transfer Microfilm, Steal Statue, and Contact Double Agent). You should alternate between Spy and Sniper roles while playing this map. 

After 20 games or more of Beginner Ballroom, the Sniper should start winning more than half the games. When this starts happening, the Spy should feel like it’s becoming impossible to get all the missions done with the Sniper’s laser on you constantly. You’re now ready to switch from the Beginner Ballroom to the Ballroom. This is the same room and number of partygoers, but the missions are opened up for selection, and you can start playing the “subset” game types. The Spy should choose “Pick 3 of 4 Missions” in the Choose Game Type menu, and then make the same 4 missions available as you played in the Beginner Ballroom (meaning, uncheck Inspect Statues and Seduce Target), but then only choose 3 of them on the Choose 3 Missions menu. 

The Sniper knows which 4 missions are available, but not which 3 are active for the Spy. This subsetting means the Sniper can no longer camp one of the missions, knowing the Spy will eventually have to attempt it, and instead has to weigh the risks in devoting too much attention to a mission the Spy might not even have picked! Now things are starting to get interesting! Of course the Spy wouldn’t have picked the Transfer Microfilm mission, it’s really hard! But, wait, maybe the Spy knows the Sniper will think that, so it becomes the right mission to pick?! This is known as yomi in game design, and it’s awesome.

Once you’ve played the subset game types a bunch, you can feel free to move on to the other maps and the other missions. By now, you’re ready to help other new beta testers learn how to play!

Talking about SpyParty

You are welcome to talk about SpyParty as much as you want in public. You can record videos and post them to youtube, post on your blog, or twitter, or facebook about it, comment about it on gaming blogs, or mention it and your beta testing experiences where ever you like. 

I’m even totally comfortable with you talking about it if you don’t like it, but at least post a link here or send it to support at spyparty.com so I can take a look at your criticisms and learn from them.

These beta forums are private right now so there’s a place where all the beta testers can hang out with each other, report bugs, and know that everybody else they’re talking to has access to the game, but they don’t mean you can’t talk about the game and your experiences on the internet at large (of course, don’t repost anything from the private beta forum without the permission of the author, that’s just good netiquette!). 

Indie games need all the help they can get with word-of-mouth, so feel free to talk it up everywhere!

Thanks for joining,
Chris

How to Report Bugs the SpyParty Way

I just wrote this post for the Bugs subforum on the Early-Access Beta site.  I figured you all would be interested in reading it, since you’re all going to be invited into the beta soon.1

"he probably would"

Finding and reporting bugs is a learnable skill, and you don’t have to be a programmer or even a particularly technical person to do it right, you just have to be methodical and thoughtful. Reporting bugs the Right Way means I can spend more time making SpyParty awesome and less time trying to get a bug to “repro” locally.

What is a “Repro”?

The goal of a bug report is to describe the steps to reproduce the buggy behavior (whether it’s a crash that deletes your entire hard disk or it’s a word that’s not pluralized correctly in the user interface somewhere) well enough that I can step through them on my machine and see the behavior first-hand. A bug that doesn’t repro is very hard to fix, whereas a bug with a “good repro” is usually pretty trivial to fix. It can be the difference between 10 minutes to fix and 10 days to fix, literally. So, when posting a bug report, the key is to do some work on your end to be methodical and give steps to repro the bug as simply and as clearly as you can. It’s basically a recipe to make the buggy behavior happen for you (and me!).

This does not mean you shouldn’t report bugs that don’t always happen the same way or happen infrequently, or that you can’t get a good repro for, but it does mean those bugs will be much harder for me to fix. In other words, it’s more important to report the bug poorly than it is to not report it at all, but a good repro makes a huge difference.

Bug Reporting Steps

I’ll be updating these steps as the beta proceeds, and eventually I’ll switch this part of the forum over to a real bug database, but for now, threads in this forum will have to do. The basic rule is one thread per distinct bug.

  1. Try to reproduce the buggy behavior on your machine. If you crashed, write down what you were doing right before the crash before you forget it, and then relaunch the game and try to get it to crash again. If you can’t repro the bug, you should still report it with as much description as you can, but as I say above, it’s way easier to fix bugs with good solid repros. The shorter the recipe for the repro, the better. As Einstein said, you want the simplest possible repro, but no simpler. A bug that repros in Practice Mode is easier to debug than one where I have to connect over the network, for example.
  2. If screenshots look like they’ll help to repro or describe the bug, feel free to take them (you can do it by hitting F5 when the game is running, or use FRAPS or your favorite screenshot tool). If you hit F5, the screenshot is put in your AppData/Local/SpyParty/screenshots directory, which you can get to by going to the Start menu and typing “%LOCALAPPDATA%\SpyParty\screenshots” into the little edit box, and hitting return. I’ve enabled attachments in the forums, so please attach the images to your bug report (as opposed to using a 3rd party image service, which might delete the images after a while).
  3. Make sure you have the latest SpyParty build. The easiest way to do this is to launch the game and hit “Play” on the main menu, which will try to take you to the lobby. The lobby will update your build if you’re out-of-date. If you update, try your repro steps again to make sure they still work.
  4. Search this subforum for similar bugs. If you find the same bug, then read the thread on that bug, and see if there is a workaround, or if I think I’ve fixed it in an update, etc. If I think I’ve fixed it in that thread I will mark the subject with ” – FIXED”, and I really want to know if you have the same bug again! This is called a “regression” and it means I’m a bad programmer!
  5. If you find the exact bug, feel free to add more information at the end of the thread. I will try to add a “vote for posts” feature so you can simply say “me too”, but until then, feel free to add a post if there aren’t already a bunch of others doing the same, or if you have additional information or slight modifications or a simpler repro that might help debug the problem.
  6. If you don’t find an exact match in the current bugs, but do find bugs that seem related, keep the links to those threads so you can insert them into your bug report. A real bug database allows you to reference other bugs, so this is our ghetto version of that feature.
  7. Create a new thread in the bugs forum if your bug is a new one. Use a descriptive thread title. “Game buggy” is a bad one. “Main Menu text disappears after window maximized” is a good one. I might change the title after we’ve discussed the bug a bit, but starting off with something descriptive will help.
  8. At the top of the post, describe the end state of the bug, meaning what’s wrong, like “the game crashes”, “the statues are floating in mid-air”, or whatever. Describe what you expected to happen, and what happened instead. Attach an image showing the bug, if appropriate.
  9. Then put your repro recipe in the post, written as clearly and as simply as possible. You can use the bbcode list tags, or just write it out, either works. Attach any more images you have to show how to repro the bug, but you don’t have to go crazy (saying “hit Play on the main menu” is fine, you don’t need to screenshot the main menu, take it into Photoshop and add an arrow with “click here” text unless the exact place to click matters to repro the bug, for example).
  10. SpyParty writes out a log file every time it runs. You can find these log files in the “logs” directory (“%LOCALAPPDATA%\SpyParty\logs”). The file name for the log files has the date and time of the playtest session start (e.g. SpyParty-20120412-11-54-49.log). Attach the log file that goes with you reproing the bug with the steps you’ve posted. Similarly, if your game crashed but said it could not upload the crash dump, then attach the correctly dated dmp file from the logs directory. Otherwise, SpyPartyHelper uploaded the dmp file to my server so I can access it, but mention this in the bug report.
  11. If there’s private information you need to send with the bug report, mention this in the report itself, and then send mail to support at spyparty.com.
  12. If you want to attach a really big file, say over 2MB, please mention this and I’ll figure out a place for you to put it, please don’t mail giant files to support at spyparty.com.

That’s it for now! Feel free to reply to this post with suggestions of how to improve the bug reporting process and I’ll edit this post.

Eventually I will add a way to report bugs from inside the game that will take a screenshot and everything automatically. Won’t that be nice?

  1. for a suitable definition of “soon” []