SpyParty at Evo 2012 pics!

I’m back from Evo, and finally mostly rested.  It was a lot of fun!  I had no idea what to expect and so I went in with no expectations, and that’s good, because it turned out to be quite different from previous playtests. The show floor was a small part of the overall event, and the main focus was obviously on the competition, so attendees were able to enjoy the Indie Showcase titles without the long lines that always happen at PAX. For SpyParty, this meant people could play for longer, come back more often, and explore more of the game’s depth. I had the same booth setup as PAX West 2011, with the three stations, and it worked out pretty well. People seemed to enjoy the game and the stations were almost always full, and as our voices gave out,1 we had attendees train other attendees, which I particularly like because it starts to get to some of my future goals for mentoring modes.

I have to admit, I was slightly worried we’d get beat up or something, but actually my first experience with the Fighting Game Community was really positive, and they really seemed to appreciate the depth of the game and what I’m going for.

I want to thank Tom and Tony Cannon, and Seth Killian for making this possible, it was a really great time.

Below are a ton of pics. Continue reading ‘SpyParty at Evo 2012 pics!’ »

  1. The show floor hours were 8am to 12am!!! Holy cow that’s exhausting…PAX hours are like 10am to 6pm! []

Competitive Gaming: Come Play SpyParty at Evo in Vegas, July 6th & 7th

I give a lot of lectures on games.  In these lectures, I often talk about games as an art form, and how games are different from the other popular and important art and entertainment forms.  Even though we often get compared to film, I think when games finally fulfill their potential, they will be as deeply different from film in the ways they affect people emotionally as film is from music or painting.1

I don’t think anyone knows exactly what these differences will feel like in 50 or 100 years, but I think we can get whiffs of them in current games, and for me, the scent is especially strong in competitive player-skill games.  There is something about a competitive player-skill game that gets to the essence of interactivity, the thing that makes games different from the other art and entertainment forms.  The players, interacting with the game systems and each other, using their physical and mental skills to achieve a clearly defined win-state…it can be magic.  Although there are many different-yet-amazing competitive player-skill games, like my old flame Counter-Strike, but also obviously Starcraft, and DOTA/League of Legends,2 I think the magic I’m talking about is most clearly captured in this famous clip of a Street Fighter tournament:

There have been articles written about these seconds of gameplay, it has become internet-famous, and I have used it in several of the aforementioned lectures.

This magical thing happened at a fighting game tournament called The Evolution Championship Series, or more commonly, Evo.

It’s always been one of my design goals for SpyParty to be regarded as a competition-worthy player-skill game, to try to attain the depth of a game like Counter-Strike or Street Fighter, but by emphasizing a very different set of player-skills from the current crop of competition games.  However, to be included in that pantheon your game has to be able to stand up to thousands of hours of play, and designing a game like that turns out to be very hard.  Luckily, I’m patient, but I’m expecting it to take years for SpyParty to get to that level, if it ever does. Eventually, once the game was balanced and tuned and deep enough, I hoped people would start running tournaments, and maybe those tournaments would grow, and then, who knows.  But I’m getting way ahead of myself…

The Email

This is all by way of saying I’ve been fascinated by Evo for a while, but hadn’t spent much time thinking about how it relates to me and my game right here and now.  And then my friend Seth Killian emailed me, “Would you be interested to bring SpyParty to Evo this summer?”

Whoa.

He went on, “Obviously your game isn’t a fighter, but what’s interesting about these guys is that they aren’t just good at fighters–they’re good at games, and breaking down systems, period. They like games that involve psychology, competition, or are just insanely difficult.”

Now you’re talking.

The Show

So, after I said “YES” as fast as I could, Seth introduced me to Tom Cannon, and it’s happening, and I’m nervous but very excited!  Did I mention the nervous part?  The fighting game community is well-known for their, um, honest feedback, and I’m hoping they like SpyParty, but if they don’t, I’m hoping they’ll tell me why, and not just beat me up or something.

In fact, to this end, I offered to invite a bunch of Evo attendees into the beta before the show, so they could read the manual, practice, and play some games online with the current beta testers to increase the level of play once we get there.  Tom put a signup form on the announcement and got over twice as many signups from registered Evo attendees as we planned, so he had to shut it down.  I was originally going to invite 50, but I may try to invite even more of them this week.  I expect some of them will be pretty good by the time the show starts if they practice.  I’m going to do a similar setup to last year’s PAX booth, so three 1v1 stations, but this time I’m also going to try to get two of them on the internet so people in the beta lobby can play people at Evo.  I hope some of the expert players will hang around the lobby to give hands-on demonstrations of SpyParty‘s current player-skill depth!

Even better, it turns out Tom and Seth wanted to have a bunch of player-skill competitive indie games at the show, so they’ve got a great lineup for their Indie Showcase, including AztezBaraBariBall, DIVEKICK, Nidhogg, Super Comboman, and Super Time Force!

But, the coolest thing of all is that I found out the Evo expo is open to the public and free on July 6th and 7th!  So, if you’re in the Las Vegas area, or within driving distance, come by and play SpyParty and all these indie games!  Oh, and I’m sure there’ll be a couple fighting games around somewhere to play if you look hard enough.

Postscript

I have my work cut out for me trying to make SpyParty deep enough to be a competitive gaming title, of course.  There have been a few different articles about the game’s upcoming appearance at Evo, with comments ranging from “awesome!” to “wtf?!”, but my favorite comment was on the Kotaku piece:

LuppyLuptonium Tue 26 Jun 2012 8:26 PM
This is like Bingo being played at an NBA basketball game…. Nothing necessarily wrong with it but strange.
  1. This is why I wish people would stop wasting their time making big movie-wannabe games with big movie-wannabe linear stories the player has to fight/shoot/drive/fly their way through, and instead play our unique strengths. []
  2. or non-digitally, Go and Poker, or even sports like basketball []

Release notes v0.1.2056.0 – THE MEGABUILD

A dispatch from the private beta forums regarding the “megabuild”

Author Message
checker
Post subject: Release notes v0.1.2056.0 – THE MEGABUILD
Posted: 2012/06/22 23:25 
Online
Joined: 2011/06/22 17:00
Posts: 724

I didn’t get to everything I wanted to before I start spectation, so there will be a Daughter of Megabuild at some point soon.

  • add crlf to whole chat log ctrl-c copy so notepad.exe works
  • strip x says: or x whispers: if it’s at the beginning of a single line ctrl-c copy, yay urls!
  • add gameid confirm message to avoid junking game bug due to canceled starts
  • swap statue bad test – wait until action test is over, flicker longer
  • swap statue good test – don’t timeout during pending, go to OT, closest available npc comes over, statue swaps instantly when they bring it to looking idle
  • swap statue preview modes for these changes
  • prevent npcs and spy from picking up ghost statues
  • in practice: ctrl-m resets missions, shift-m adds time, ctrl-shift-m does both
  • fix multiple characters picking up statues at the same time
  • stop keyboard beep on alt keys
  • change add time to 45 seconds
  • treat book holding as one handed when not reading
  • handle case where ambassador/scientist picks something up while handing briefcase over
  • retry briefcase putdown on path failure as well
  • don’t crash on non-text data in clipboard
  • try to get unstuck if we’re failing to path because our start point is blocked
  • don’t read a book you’re not holding if you’re failing to get to the bookshelf
  • don’t freeze if you can’t put the briefcase down, just move a bit to a new spot
  • wait before picking up the statue
  • add /win x y w h maximized borderless command
  • oh man, actually tick situations in scored order, yikes! will this change things?
  • display highlit and lowlit characters on results screen
  • display waiting text on waiting for results screen
  • separate y invert setting for mouse and gamepad
  • handle case where sniper shoots too late given the time sync
  • write game result to log
  • don’t show mouse cursor when waiting for results
  • don’t sample keyboard when chat is up in results screen
  • don’t let mouse down state affect spy camera movement
  • /ping command for testing peer-to-peer network connection – hopefully will help with “greeting” and “sniper accept” bugs
  • more handling of briefcase put down and then started moving
  • sample spy keys async instead of doing up/down processing to avoid losing ups on focus change
  • more explicit duplicate login prompt
  • allow briefcase pickup with just right hand
  • fixing spy walking away with briefcase while putting down
  • better phrasing of game results everywhere
  • disable attachment lerp on detach so statues don’t erroneously end up on the floor
  • prevent focus changing mouse presses from interacting with game
  • fix drinks.cpp crash, animation was getting freed out from under the events
  • more play id checking to avoid issues with old packets coming in when starting games
  • don’t pick up briefcase for a while if you’ve given up
  • initialize the statues before game start
  • use ConnectTime to register player since LoginTime not available yet, fixing beta homepage display
  • listen pauses
  • don’t prompt to escape from practice menu
  • fix problem with shift key not working after sniping somebody with gamepad
  • tells for bailing on banana bread okay and bad action test
  • fake banana bread available when mission selected but not enabled
  • add escape confirmation to results screen
  • remove escape confirmation from practice screen
  • don’t hide mouse cursor on sniper game start waiting screens so you can adjust your window
  • wait a bit after disposing of book as well
  • log some more connection info
  • pause at bookshelf before picking up book…enough time to seduce?
  • add CancelInteraction everwhere there’s an action test and it’s bailed on
  • be clear that the first whisper was delivered
  • better newline handling in lobbyclient assert logs
  • verify overtime on sniper machine before beeping
  • flash window when in background and beeps happen
  • fix spy missions in practice sniper
  • think I fixed the levitating characters by the briefcase bug
  • add SpyWatchID to holding_right to block animations (especially bug) while checking watch
  • expiring actions to avoid accidental banana bread triggers
  • ctrl/shoulder slam all the way to highlight/lowlight
  • single level highlight and lowlight
  • new inspect statues with inspecting neighboring statues
  • pedestal works with disposable holding, drinks, briefcase, like bookshelves
  • play clank sound when teleporting statue back
  • add layer attribute for hittest ignore and don’t hittest muntin bars with laser
  • hittest columns with laser on both spy and sniper view
  • wait a bit after putting book away
  • make briefcase non-infinite and fix spiral search to deal with max open value
  • make pathTestOpen take rectangle for anisotropic queries and fix bookcase pileup
  • don’t crash or delete krb5 files on duplicate login
  • gl and cpuid info to log and journal
  • sometimes interrupted people finish talking completely

I really should not have shoved so much stuff into a single build, but it feels pretty good. I’m sure there are some bugs, as well, but I think this build is a subtle but significant step forward in continuing to increase the depth of the game.

Chris

The First 999 Beta Tester Usernames

There are now 999 people registered in the Early-Access Beta.1 Here are their usernames:

aaboyles aaerox abettega ablemonkey aca15 acbgardner aces acron actionpotential adam adman aerox2 aethyr agent agentmidnight agradula ahalay ahnimal aisugirl akuda alessandro ali alkapwn almostpeaceful74 amagineer amar amassingham amonjura ancillas andrew andy angellion01 angryamish angryjaffa angrywombat ankhwatcher annoyedguy anotheruselesspwn antoine antonio applemint apreche arbaard arbiter ardonite aresbece arthol ashenke astroblack astrognat attackslug atticusfinch austin authoralden avian avianflame awakewise awayman awesome awesomex awkwardhero azazoth azeltir bambu85 bassguitarbill bater bbrocker bc5389 bclose bdgolfer81 beanopolis beavens beckett007 beffy belak beljerd ben benny bepedos berbank beric berndie90 berryalice bespectacledgent betabetamax billiechar binarychimp biodork bishop bizzkaj bjorngylling bkyoops bl00dw0lf blabber blackheart blacklamb blaine blargnblarg blimeycow blind blindcicero blindprophet blinkity bluenator bluewins bnetter12 bobbesmcgee bobo bogger bom351 boner bracken brackhar brawnyfanta braytek brettbot bronn browncoat768 bslinger bubonulus bucksexington bukit1 bull bungeeman bunnyfoofoo bureaucromancer burgly burguois buxx cafebagels caincc calitar callguinness camgoeswild camperbob canadianbacon candafilm caphector capnlee captainduh captainquincy captgadianton carrington casey castor cathlin causeofdeath15 caustic cba123 chan charliechan charliehuge checker chris chris2c2 chrisbell chrisfranklin christianwins chuckgriff chvyvele cian cigumo ciminator ckarinja clarkson101 click cliff cloversquirrel clovest clownbaby clownzilla clubley2 codarl codyme1 cogbyrn cokelogic colemip coleopteran coleslawesome colinnorthway collinc colourmeindigo commandercup commandersven communistbloc compositeredfox congodave cornpalace corvon coubs38 cpsabotage crackilator cramill creasy cru31ty cskilbeck cube cukydoh curieous cyberpirate cyclpsrock d1a2r3k d4rkfr4g dacool561 daddykingkong daeke daenrr daethwing188 dagstur daheadhunter dak722 damatman dan danblanchard dandyshlonglegs danger dangerskew danicia danielben danigold dariusk darkcephas darkernukes darkswordmaster darktrooper darrentorpey darthbutternutz dash daveycraney david2crazy dbfclark dbltnk dead deadbolt deadjoe deep9x defendership deftmunky dekuplatformer desdewd develin devp dexan dfan diamondae dieffenbachj dienekes00 diffusion digikrynary dinozzo dios dippyt dirk dizzyduke dj2scoop dla26 doc docace doctorwhy docyahoo doddzy39 doenan domofizz doneval dookie dorkus1218 dotreptile doug drdos dredgman drmuncie drqqq dukrous dumbitdown duncank dungeonduck dutchsanta duwilli dvorak eddie edgeblend eggs eight einhandr eirabben eklyptz ekombokom elcarlito elendira eljenso ellbent elpicante emanon emil emmick4 emuspawn emwurst engagequadlaser enragedviol ento ephargy erariga escapecharacter esperento esuark06 etran1 etsd eversoslightly evolved exayden ezithau fain faithbleed falcon9xr falconred fancyfrog fapsauss faryn fatheroctopus favocado feenox fenir fetthesten finners fischl flamingarms flanjygo foo forspareparts fortninety foxblock fredthedeadhead french fringe frondo furay fuzzyspo0n fweez fyre gabriel gabrielsp gabumon2 gahd gamersdg garythellama geekgrrl geekynerd geibys geiko generalchaos gerardi getaway geveeso gimmefiction ging girricane gkyl gmandm goat6star6of6astaroth goblineat2 godfatherbrak godfire godzchozenson goinbananas golds golzernurf goodboy goofus gordon gordonfremen gouda graywolf greger grempkin griffinmcelroy grifta67 grimwtf grinspork gryphus1 grythean gummikana guncannon gunner1905 gunslingernz guylum haganehylian hajav halcyon hansoneg harrisonthefan harrylee hasmarth hatebobbarker havochq hawk haze hdfisise headbuddy hehateme henningdc hermituk hernismall herrdoctor hinges hobbes2424 hollygolightly holodoc homeless hop3less hothmonster hulkmaster hunter4hire hutty211 iamcarneiro iax ibis idrisguitar iiatlas ikubiakius ilzxc imaginarydinosaur immortalwombat imthedude ineffable ininja132 inker intero iocat iou1username ironhive isamu itsatrap itsmyyard itt0 j0be jacksonaces jake james1221 jaqenhghar jason jasonbourne jcmoore jedexodus jedimasta jeffatrad jeffnosanov jello jennylynn jentaro jeremiahbritt jetlizard jguzikowski jjb273 jleet82 joakim joeaverage joeprunz johnnemann johnnyr jonmm1776 jonoabbo jorispz joset305 jrmtz85 ju34u julian justin justinliew jvnane kai kalei50 kami kapit karabinerkarl karaidon karibou kate katya kb0m kbd keith kelemvor kellywallick kennyal kevin keysosaurus kidko kifil killercow kkriller klinefelter0 kmonarq7 kmuncie knifeninja kobolt kramff krow007 krpiper kujiun kunstbanause kwhiggs8 kyarourin kyoun lackey lagarathan lala lameduck lamzor lancelake larakin launchbay07 lavinashfield lawiin lawlercaust lazz leaveittoreaver leichelle lemming liamh101 lightishred linkz lioninacoma liquidindian liquience ln3000 loddy logomorph loki lopert lordking loshon lovick lrrr ltfragbox ludusvan lusomai m0r7if3r maarch macintoth mackinder maddragon maedas malbios malfunktionv2 maniacalv mantis marcham93 marciantobay marcnotmark markfnd markrestart markus marlowe mathewcrichton matt mattseligman maverick21xx maxemoe mazazon mbrewski mcc meanbrian megadestructo megapixel23 mehall merc mercuryn mercy metaregress metronome49 mevica michael michibuenkosai micole miggins mike mikecruz mikegbrown mikejmika mikella mikey minecraftboy3437 mistadad misterfix misterpanky mizzrie mmcdhoward mmorier mmustapic mogri moo moof moomanibe morfran morganic mosse motorcrash mrbanana519 mrcompletely mrhoten mrmember mrpants mrphatjared mrprice33 mrpropellerhead mrssaurbaum msarge mtb mukow murray mvandevander mylene namelesssniper nara nateventure nayon7 nayrev naysayer nazzerac nefiorim nelsormensch nemesiscw nemo nerdmancer neuman nexai nicemissmayonnaise nickmac863 nicktheflanders nicta nille niteowl noc noclip noethis nogon noise noisia noonan noonchild norskov northernlion nosferatastic notbengilbert notch nuhuhnoway nukednova nunix nyo odeyin odie ohsickkbro okibi olninyo omar omgmyface omnomonsouls onik onyxmoron opticalshadow or1g1nal1ty orahpajo ossy otakushi overlordror ozzyj88 paarre palm partario pastorpeej patrick patyrick pauzle pawng pax217 pbobzebuilder penumbra peter phaazoid phase phatjax pheranova phobon phokal pickard12 pigo pikes piratepwnsninja pixelfenix pixeltitan pixistick pnomoth pobblepop poison5htp pokeadot polycube popabawa porousnapkin postgoodism powerlanguage pparks76 prall prelone prios proverbialbones psponge psytog pubtongue puppet purplevanes pylons qq qualityjeverage quanimal queenkid1 quickfics quirken rachel rachet20 radchek rage ragegoblin rager ragtag21 rainault raphaelo rapscallion ravi ravie77 raypaik rebeleleven redbeardedowl redivy redrocket redrum remy remzo rennix resdog reusablebox revdancatt reverendanthony rex rick rift rinzai ripply rj rnw159 robinaire robotpants rockliao rocky rodomont roel1976 rogermoore rook rorrim ross rowdynun ruhmann rullerr rune ryan rym sabones sachiarias sagemichael samuel samuelcole sarahnorthway sardiax sarge sargonas sarrick saucepain saurbaum sawchuk1 sb00ya scnigey scopesofter scottish scotto6uk screwjack scud seansf seeking segolectrick seiromem senisan sentry sepherimorth sequel seregrail7 sgtfury shakewell shatter1313 sheepofheight shurp sigmatheta simon2776 simonbob sirblastalot sirlaitier sk82712 skapig skrymir skuchachii skuzeeii slack slats sleepyendymion slyvr smacktubby snakeaes sneakypeaky89 snoken snowmaneater soda solidplasma someguy sonicblastoise sonicboom soolseem spencerrohan spikerama spinnermaster spinyeti spliter splodeybaloney splodn spouwny spy spychao999 squirtle srjenkins starkiller2000 stdizzie steakeatsbabies stents sterling steve stockdogfactory storm stu stuart superdraw swenson sylver symlink syrinx t3kk taco taker talensis tam tantfarbror taquelli tautology teddydief telephis tembac tenebrous tenjouutena tenochtitlan terrytate testing texanfromin thealmightydan thebogdan thechicken thecze thedirt thedoctor52 thedoomsmith thegeckoj thegerf theharribokid theinfamousnolan thejoshfox thelaughingman themantis themightyyeti themosb thename thenew110 theotheralex ther thesocialsolipsist thief thirdordeal thornsten thoseposers thsandman tiefooz tigerseye85 tigershark tilton time5 tlabresh tobybot tokion tomeng1997 tomqbui toomuchpete tpwt tralan trauts travis treadd tree treythalomew trickery triplelex trouserdemon tubybuny tulse twie twinbolt twistamafoo twoflower tylerthedesigner undeadnub undisclosed uneddy vadid37 valir valuedrug vanlo varanas venom veturi vidvandre vincentdpc vinnyboombatz vorrik vortexmortinghan voxhumano vs vutdevuk wantedbob warlock watertower webjr weebee886 weeble wesley weteor whatthegeek whispous whitewolf whizkid wiggy wikzo willdude william wilson2k4 wiltwin wirapuru wish wkerslake woodensplint woof woomstick woseseltops wubang3r wubby wyrmling x13ucketheadx x1pyvr84 xav xemu xenoacid xlom3000 xspjigo xtreyu xzalander yanndos yazzflute yegg yobani yokelbloke yorudy yourdad zacaj zachwlewis zafo999 zaktilu zapdsl zen zerooneinfinity zerosyphon zerotka zerozshadow zgilly zhiwiller zoink2000 zoneghost zynux

  1. Updated numbers to be clear: There are 13788 people signed up as of right now, 1081 registered (I invited more in after this post), 2430 invites total sent, for a 44% registration rate…I’m still inviting people in slowly until I get the lobby scalable. []

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! []