m |
m |
||
Line 295: | Line 295: | ||
</ul> | </ul> | ||
<p>In the middle of all this, Gus’ Wired piece <a onclick="javascript:pageTracker._trackPageview('/downloads/wp-content/uploads/2010/04/reddit-frontpage-20100323.png');" href="http://spyparty.com/wp-content/uploads/2010/04/reddit-frontpage-20100323.png">hit the front page of reddit</a>, and Anthony’s Destructoid story <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.stumbleupon.com/url/www.destructoid.com/why-you-need-to-be-excited-about-spyparty-167171.phtml');" href="http://www.stumbleupon.com/url/www.destructoid.com/why-you-need-to-be-excited-about-spyparty-167171.phtml">hit the front page of the games section of stumbleupon</a>, both of which generated a ton more traffic to the articles and the <strong>SpyParty</strong> blog. Stephen’s piece generated 300 comments on Kotaku and Gizmodo, <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.fark.com/cgi/comments.pl?IDLink=5140312');" href="http://www.fark.com/cgi/comments.pl?IDLink=5140312">a Fark comment thread</a>, and as of this writing it’s on <a onclick="javascript:pageTracker._trackPageview('/downloads/wp-content/uploads/2010/04/stumbleupon-20100403.png');" href="http://spyparty.com/wp-content/uploads/2010/04/stumbleupon-20100403.png">the top of the stubleupon games section with Anthony’s piece on the same page</a>!</p> | <p>In the middle of all this, Gus’ Wired piece <a onclick="javascript:pageTracker._trackPageview('/downloads/wp-content/uploads/2010/04/reddit-frontpage-20100323.png');" href="http://spyparty.com/wp-content/uploads/2010/04/reddit-frontpage-20100323.png">hit the front page of reddit</a>, and Anthony’s Destructoid story <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.stumbleupon.com/url/www.destructoid.com/why-you-need-to-be-excited-about-spyparty-167171.phtml');" href="http://www.stumbleupon.com/url/www.destructoid.com/why-you-need-to-be-excited-about-spyparty-167171.phtml">hit the front page of the games section of stumbleupon</a>, both of which generated a ton more traffic to the articles and the <strong>SpyParty</strong> blog. Stephen’s piece generated 300 comments on Kotaku and Gizmodo, <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.fark.com/cgi/comments.pl?IDLink=5140312');" href="http://www.fark.com/cgi/comments.pl?IDLink=5140312">a Fark comment thread</a>, and as of this writing it’s on <a onclick="javascript:pageTracker._trackPageview('/downloads/wp-content/uploads/2010/04/stumbleupon-20100403.png');" href="http://spyparty.com/wp-content/uploads/2010/04/stumbleupon-20100403.png">the top of the stubleupon games section with Anthony’s piece on the same page</a>!</p> | ||
<p>Then a bunch of other people started writing articles about the game, with titles like <a onclick="javascript:pageTracker._trackPageview('/outgoing/johnwhancock.com/games/finally-a-true-spy-game/');" href="http://johnwhancock.com/games/finally-a-true-spy-game/"><em>Finally, a TRUE Spy Game!</em></a>, and commenting about the game <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.g-shack.com/forum2/showthread.php?t=2368');" href="http://www.g-shack.com/forum2/showthread.php?t=2368">o</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/gamegossip.com/forums/pc-gaming/106890-spyparty.html');" href="http://gamegossip.com/forums/pc-gaming/106890-spyparty.html">n</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/old.idlethumbs.net/forums/showthread.php?t=7138');" href="http://old.idlethumbs.net/forums/showthread.php?t=7138"> f</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/forums.narutocentral.com/showthread.php?p=1798666');" href="http://forums.narutocentral.com/showthread.php?p=1798666">o</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/forums.sarcasticgamer.com/showthread.php?t=29376');" href="http://forums.sarcasticgamer.com/showthread.php?t=29376">r</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.fohguild.org/forums/other-games/41951-spy-party.html');" href="http://www.fohguild.org/forums/other-games/41951-spy-party.html">u</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.quartertothree.com/game-talk/showthread.php?t=58428');" href="http://www.quartertothree.com/game-talk/showthread.php?t=58428">m</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.sherdog.net/forums/f88/spyparty-1170377/');" href="http://www.sherdog.net/forums/f88/spyparty-1170377/">s</a> and <a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com/goaltaylor33/statuses/11437445435');" href="http://twitter.com/goaltaylor33/statuses/11437445435">o</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com/sp4c31nv4d3r/statuses/11377110956');" href="http://twitter.com/sp4c31nv4d3r/statuses/11377110956">n</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com/Skegg/statuses/11298110229');" href="http://twitter.com/Skegg/statuses/11298110229"> </a><a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com/ChuckJager/statuses/11216621525');" href="http://twitter.com/ChuckJager/statuses/11216621525">T</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com/Pat_NZ/statuses/11182984552');" href="http://twitter.com/Pat_NZ/statuses/11182984552">w</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com/CedricKiefer/statuses/11179076289');" href="http://twitter.com/CedricKiefer/statuses/11179076289">i</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com | <p>Then a bunch of other people started writing articles about the game, with titles like <a onclick="javascript:pageTracker._trackPageview('/outgoing/johnwhancock.com/games/finally-a-true-spy-game/');" href="http://johnwhancock.com/games/finally-a-true-spy-game/"><em>Finally, a TRUE Spy Game!</em></a>, and commenting about the game <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.g-shack.com/forum2/showthread.php?t=2368');" href="http://www.g-shack.com/forum2/showthread.php?t=2368">o</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/gamegossip.com/forums/pc-gaming/106890-spyparty.html');" href="http://gamegossip.com/forums/pc-gaming/106890-spyparty.html">n</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/old.idlethumbs.net/forums/showthread.php?t=7138');" href="http://old.idlethumbs.net/forums/showthread.php?t=7138"> f</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/forums.narutocentral.com/showthread.php?p=1798666');" href="http://forums.narutocentral.com/showthread.php?p=1798666">o</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/forums.sarcasticgamer.com/showthread.php?t=29376');" href="http://forums.sarcasticgamer.com/showthread.php?t=29376">r</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.fohguild.org/forums/other-games/41951-spy-party.html');" href="http://www.fohguild.org/forums/other-games/41951-spy-party.html">u</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.quartertothree.com/game-talk/showthread.php?t=58428');" href="http://www.quartertothree.com/game-talk/showthread.php?t=58428">m</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.sherdog.net/forums/f88/spyparty-1170377/');" href="http://www.sherdog.net/forums/f88/spyparty-1170377/">s</a> and <a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com/goaltaylor33/statuses/11437445435');" href="http://twitter.com/goaltaylor33/statuses/11437445435">o</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com/sp4c31nv4d3r/statuses/11377110956');" href="http://twitter.com/sp4c31nv4d3r/statuses/11377110956">n</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com/Skegg/statuses/11298110229');" href="http://twitter.com/Skegg/statuses/11298110229"> </a><a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com/ChuckJager/statuses/11216621525');" href="http://twitter.com/ChuckJager/statuses/11216621525">T</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com/Pat_NZ/statuses/11182984552');" href="http://twitter.com/Pat_NZ/statuses/11182984552">w</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com/CedricKiefer/statuses/11179076289');" href="http://twitter.com/CedricKiefer/statuses/11179076289">i</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com | ||
</pre> | </pre> |
Revision as of 23:44, 9 July 2010
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US"> <head profile="http://gmpg.org/xfn/11"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>SpyParty – An Espionage Game </title> <link rel="stylesheet" href="http://spyparty.com/wp-content/themes/spyparty/style.css" type="text/css" media="screen" /> <link rel="stylesheet" href="http://spyparty.com/wp-content/themes/spyparty/print.css" type="text/css" media="print" /> <link rel="alternate" type="application/rss+xml" title="SpyParty – An Espionage Game RSS Feed" href="http://spyparty.com/feed/" /> <link rel="pingback" href="http://spyparty.com/xmlrpc.php" /> <link rel='stylesheet' id='NextGEN-css' href='http://spyparty.com/wp-content/plugins/nextgen-gallery/css/nggallery.css?ver=1.0.0' type='text/css' media='screen' /> <link rel='stylesheet' id='shutter-css' href='http://spyparty.com/wp-content/plugins/nextgen-gallery/shutter/shutter-reloaded.css?ver=1.3.0' type='text/css' media='screen' /> <script type='text/javascript'> /* <![CDATA[ */ var shutterSettings = { msgLoading: "L O A D I N G", msgClose: "Click to Close", imageCount: "1" }; /* ]]> */ </script> <script type='text/javascript' src='http://spyparty.com/wp-content/plugins/nextgen-gallery/shutter/shutter-reloaded.js?ver=1.3.0'></script> <link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://spyparty.com/xmlrpc.php?rsd" /> <link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://spyparty.com/wp-includes/wlwmanifest.xml" /> <link rel='index' title='SpyParty - An Espionage Game' href='http://spyparty.com' /> <meta name="generator" content="WordPress 2.9.2" /> <style type="text/css"> ol.footnotes li {list-style-type:decimal;} ol.footnotes{font-size:0.8em; color:#666666;} </style> <link rel="stylesheet" type="text/css" href="http://spyparty.com/wp-content/plugins/wp-recaptcha/recaptcha.css" /> <meta name='NextGEN' content='1.5.3' /> <style type="text/css">.recentcomments a{display:inline !important;padding:0 !important;margin:0 !important;}</style> </head> <body> <div id="page"> <div id="header"> <div id="headertitle"> <h1><a href="http://spyparty.com" title="SpyParty – An Espionage Game: Chris Hecker's new spy game about subtle behavior, deception, performance, and perception."><img src="http://spyparty.com/wp-content/themes/spyparty/title.png"/></a></h1> <p>Chris Hecker's new spy game about subtle behavior, deception, performance, and perception.</p> </div> <!-- Search box (If you prefer having search form as a sidebar widget, remove this block) --> <!-- <div class="search"> <form method="get" id="searchform" action="http://spyparty.com/"> <input type="text" size="20" name="s" id="s" value="Search..." onblur="if(this.value=='') this.value='Search...';" onfocus="if(this.value=='Search...') this.value='';"/> </form> </div> --> <!-- Search ends here--> </div> <div id="navbar"> <ul id="nav"> <li><a href="http://spyparty.com">Home</a></li> <li class="page_item page-item-2"><a href="http://spyparty.com/about/" title="About">About</a></li> <li class="page_item page-item-270"><a href="http://spyparty.com/images/" title="Images">Images</a></li> </ul> </div> <div id="wrapper"> <div id="content"> <div class="post" id="post-509"> <h2 class="posttitle"><a href="http://spyparty.com/2010/07/09/test-post/" rel="bookmark" title="Permanent Link to Test Post">Test Post</a></h2> <div class="postmetadata">2010/07/09, 18:59 by checker</div> <div class="postentry"> <p>This is a test post. I’m installing some server stuff and want to make sure things are working. I think comments might be broken.</p> <p>I’ll delete this soon.</p> <p>Some edits to see if that works.</p> <p>Trying again.</p> <p>And again.</p> <p>Once more.</p> <p>hi. there.</p> </div> <div class="postmetadata"> Category: <a href="http://spyparty.com/category/miscellaneous/" title="View all posts in miscellaneous" rel="category tag">miscellaneous</a> | <a href="http://spyparty.com/2010/07/09/test-post/#comments" title="Comment on Test Post">6 Comments</a> </div> </div> <div class="post" id="post-459"> <h2 class="posttitle"><a href="http://spyparty.com/2010/06/08/full-body-ik-solver-in-a-day/" rel="bookmark" title="Permanent Link to Full Body IK Solver in a Day">Full Body IK Solver in a Day</a></h2> <div class="postmetadata">2010/06/08, 19:49 by checker</div> <div class="postentry"> <p>I am finally nearing the end of <a href="http://spyparty.com/2010/04/17/game-development-is-tedious/">the list I made almost two months ago</a> to get picking up and interacting with objects working in <strong>SpyParty</strong>. Here is is again:</p> <ol> <li><span style="text-decoration: line-through;">Add an event track to the animation system so the animations can tell the AI when the object should be attached.</span></li> <li><span style="text-decoration: line-through;">Make an animation for picking up the object and have it fire an attachment event.</span></li> <li><span style="text-decoration: line-through;">Add non-character dynamic items as a concept to the code.</span></li> <li><span style="text-decoration: line-through;">Add a simple attachment system to the character AI and rendering code.</span></li> <li>Write a quick full body IK system so the character doesn’t have to align with the item exactly.</li> <li>Hook it all up.</li> </ol> <p>Steps 3 and 4 were discussed in <a href="http://spyparty.com/2010/05/20/object-h-is-dead-long-live-object-h/">this post</a>.</p> <p>In the original post, Step 5 had this footnote:</p> <blockquote><p>“This is a step that might give some people pause, but I’ve written <a onclick="javascript:pageTracker._trackPageview('/outgoing/chrishecker.com/Inverse_Kinematics');" href="http://chrishecker.com/Inverse_Kinematics">so many IK solvers</a> over the years that I figure I can whip this out in a day or so. Famous last words.”</p></blockquote> <p>Well, I managed to get a full body IK solver mostly working on Sunday. Admittedly, it was a 12 hour day, but still, not bad if I do say so myself.</p> <p>Briefly, IK stands for Inverse Kinematics. Kinematics is the study of how things move through time and space. Taking the simple example of your arm, Forward Kinematics is about how your hand moves when you change the <em>joint angles</em> at your shoulder and your elbow. You might rotate your elbow by 30 degrees, and figuring out where your hand ends up is a Forward Kinematics problem. As you might imagine, it’s somewhat difficult to pick up objects if you have to manually specify the shoulder and elbow angles to move the hand towards the object. Worse, if you change the shoulder angle, obviously the elbow angle has to change to keep the hand in the same place, since your arm is <em>hierarchical.</em></p> <p>Inverse Kinematics is the solution to this problem. Where FK says, “given the joint angles, where is the hand?”, IK inverts that and says, “given the desired hand position and orientation, what are the joint angles to get there?” There is some more math involved in solving IK problems compared to FK problems, but it allows you to control the arm from the hand and the shoulder and elbow joints figure themselves out.</p> <p>One interesting point is that the FK problem always has a solution: for any joint angles at your shoulder and elbow, your hand will end up somewhere. By contrast, the IK problem doesn’t always have a solution: if I ask the IK solver what joint angles will put your hand on the moon, it had better give back either “none” or something reasonable like angles that point your hand towards the moon.</p> <p>So, that’s the Kinematics lesson for today, let’s get to the examples. <strong><span style="color: #ff0000;">Remember, all of this art is temporary prototype placeholder artwork!</span></strong></p> <p>First, here’s a video of a character interacting with a statue in <strong>SpyParty</strong>, where the character is aligned with the statue in the same way the animation was created, so it all lines up nicely:</p> <p style="text-align: center;"><span class="youtube"> <object width="640" height="505"> <param name="movie" value="http://www.youtube.com/v/RADi1Guci7s&rel=0&color1=d6d6d6&color2=f0f0f0&border=0&fs=1&hl=en&autoplay=0&showinfo=0&iv_load_policy=3&showsearch=0" /> <param name="allowFullScreen" value="true" /> <embed wmode="transparent" src="http://www.youtube.com/v/RADi1Guci7s&rel=0&color1=d6d6d6&color2=f0f0f0&border=0&fs=1&hl=en&autoplay=0&showinfo=0&iv_load_policy=3&showsearch=0" type="application/x-shockwave-flash" allowfullscreen="true" width="640" height="505"></embed> <param name="wmode" value="transparent" /> </object> </span></p> <p>Now, since there’s no IK in the game yet, here’s what happens if you don’t align exactly right:</p> <p style="text-align: center;"><span class="youtube"> <object width="640" height="505"> <param name="movie" value="http://www.youtube.com/v/2tRVjXwKtrU&rel=0&color1=d6d6d6&color2=f0f0f0&border=0&fs=1&hl=en&autoplay=0&showinfo=0&iv_load_policy=3&showsearch=0" /> <param name="allowFullScreen" value="true" /> <embed wmode="transparent" src="http://www.youtube.com/v/2tRVjXwKtrU&rel=0&color1=d6d6d6&color2=f0f0f0&border=0&fs=1&hl=en&autoplay=0&showinfo=0&iv_load_policy=3&showsearch=0" type="application/x-shockwave-flash" allowfullscreen="true" width="640" height="505"></embed> <param name="wmode" value="transparent" /> </object> </span></p> <p>The statue still attaches to the character’s hand, due to Step 4 above, it’s just that the hand isn’t aligned with the statue correctly. So, when the attachment event fires in the animation, the code detaches the statue from the pedestal and attaches it to the hand in the wrong place<sup><a href="http://spyparty.com/2010/06/08/full-body-ik-solver-in-a-day/#footnote_0_459" id="identifier_0_459" class="footnote-link footnote-identifier-link" title="When you’re making a video game, you really do have to create the basic laws of the universe, and then implement them; it’s kind of mind boggling that anything actually works. :) ">1</a></sup>.</p> <p>And finally, after Sunday, here’s a video of the IK working in the <strong>SpyParty</strong> <em>contentviewer</em>, which is a simple little application for testing animations and models and whatnot. It’s way easier to make changes in the contentviewer and then move the code into the game than it is to make changes in the game with AI running and all that other stuff.</p> <p style="text-align: center;"><span class="youtube"> <object width="640" height="505"> <param name="movie" value="http://www.youtube.com/v/Q1_XPNAaBHU&rel=0&color1=d6d6d6&color2=f0f0f0&border=0&fs=1&hl=en&autoplay=0&showinfo=0&iv_load_policy=3&showsearch=0" /> <param name="allowFullScreen" value="true" /> <embed wmode="transparent" src="http://www.youtube.com/v/Q1_XPNAaBHU&rel=0&color1=d6d6d6&color2=f0f0f0&border=0&fs=1&hl=en&autoplay=0&showinfo=0&iv_load_policy=3&showsearch=0" type="application/x-shockwave-flash" allowfullscreen="true" width="640" height="505"></embed> <param name="wmode" value="transparent" /> </object> </span></p> <p>As you can see, the new IK system still needs a ton of tuning, but that was the result after the 12 hours and it felt pretty good. I think I’ll spend another day on the core math to tune it a bit, and then I need to put the IK code into the game and do Step 6 to hook it all up.</p> <p>I’m doing IK a little differently than most games do, using learning from my work on Spore. Most games use IK to simply pull the hand towards the object when the animation says to use IK, but what we did on Spore was a little different, and I think, better. Instead of IKing the hand to the object, I warp the whole animation as the IK blends in, so the torso bends and all the little stylistic tangential movements still show up, only now they’re aimed towards the object rather than just straight ahead. I’m going to post more detail about this technique once I get it cleaned up, but you can read the super-detailed technical description of the Spore IK solver in <a onclick="javascript:pageTracker._trackPageview('/outgoing/chrishecker.com/Real-time_Motion_Retargeting_to_Highly_Varied_User-Created_Morphologies');" href="http://chrishecker.com/Real-time_Motion_Retargeting_to_Highly_Varied_User-Created_Morphologies">the SIGGRAPH paper we wrote about the technology</a> if you want to know more now.</p> <p><strong>Edit:</strong> You can actually see the results of the animation warping in that video, because the left hand is not being IK’d directly to its hardpoint at all, the only thing changing its position is the space warping, and you can see it’s in the neighborhood of the other hardpoint even without an IK fixup. This is one of the huge advantages of this method, it preserves the animator’s source poses as much as possible, so the IK itself is only used to polish up the pose for the new configuration. This is the blend of <em>sampling</em> and <em>synthesis</em> I’ve talked about before in lectures, where you want to augment the animator’s work with the computer’s work, not replace one with the other.</p> <ol class="footnotes"><li id="footnote_0_459" class="footnote">When you’re making a video game, you really do have to create the basic laws of the universe, and then implement them; it’s kind of mind boggling that anything actually works. :) [<a href="http://spyparty.com/2010/06/08/full-body-ik-solver-in-a-day/#identifier_0_459" class="footnote-link footnote-back-link">↩</a>]</li></ol> </div> <div class="postmetadata"> Category: <a href="http://spyparty.com/category/art/" title="View all posts in art" rel="category tag">art</a>, <a href="http://spyparty.com/category/programming/" title="View all posts in programming" rel="category tag">programming</a> | <a href="http://spyparty.com/2010/06/08/full-body-ik-solver-in-a-day/#comments" title="Comment on Full Body IK Solver in a Day">20 Comments</a> </div> </div> <div class="post" id="post-438"> <h2 class="posttitle"><a href="http://spyparty.com/2010/05/20/object-h-is-dead-long-live-object-h/" rel="bookmark" title="Permanent Link to object.h is dead, long live object.h!">object.h is dead, long live object.h!</a></h2> <div class="postmetadata">2010/05/20, 16:43 by checker</div> <div class="postentry"> <p>Ugh, sorry for the lack of updates, I feel like I’ve been clawing my way through a giant pile of manure and have barely gotten my head out into the air.</p> <p><a href="http://spyparty.com/2010/04/17/game-development-is-tedious/">If you recall</a>, my current task on <strong>SpyParty</strong> has been to get the folks at the party to be able to pick things up, like books, magazines, martinis, cigarettes, top secret plans for a nuclear device, etc. Well, steps 3 and 4 on that task were the following:</p> <p style="padding-left: 30px;">3. Add non-character dynamic items as a concept to the code.<br /> 4. Add a simple attachment system to the character AI and rendering code.</p> <p>Oh boy. These look pretty simple, but since I’ve been 100% focused on getting the gameplay prototyped, the actual game code had gotten a little, shall we say, <em>funky</em> smelling. It was never very clean, having started from the <a onclick="javascript:pageTracker._trackPageview('/outgoing/indiegamejam.org');" href="http://indiegamejam.org">Indie Game Jam 3</a> engine source code, which was not in great shape itself, but my singular focus on getting gameplay in without regard to how I got it in has made matters worse.</p> <p style="text-align: center;"><img class="aligncenter size-full wp-image-440" title="house_wideweb__470x291,0" src="http://spyparty.com/wp-content/uploads/2010/05/house_wideweb__470x2910.jpg" alt="" width="470" height="291" /></p> <p>It became clear that I needed to clean things up before I could move forward. My friend and executive producer at Maxis, <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.mobygames.com/developer/sheet/view/developerId,1653/');" href="http://www.mobygames.com/developer/sheet/view/developerId,1653/">Lucy Bradshaw</a>, used to bristle whenever a programmer would mention the word “refactoring” because it had a perfect trifecta of badness<sup><a href="http://spyparty.com/2010/05/20/object-h-is-dead-long-live-object-h/#footnote_0_438" id="identifier_0_438" class="footnote-link footnote-identifier-link" title="1) refactoring takes a long time, 2) it adds bugs to the code, 3) even when it works perfectly, it has no visible improvement on the game">1</a></sup>, but it was time. I couldn’t figure out how to attach an object to another object in the old system without hacks even more heinous than I was willing to attempt.</p> <p>This kind of task gets to the heart of the “game object system” issue. I’ve got <a onclick="javascript:pageTracker._trackPageview('/outgoing/chrishecker.com/Game_Object_Systems');" href="http://chrishecker.com/Game_Object_Systems">a good powerpoint by Doug Church on my site</a> on the topic, and I’m going to write more about my new system soon, but I wanted to at least post something to indicate that I’m not dead.</p> <p>Briefly, I choose a fairly simple component based object system architecture. There are really two basic options when you’re doing object systems: inheritance-based and component-based. I’ll have much more to say about this later after I’ve used it for a bit and worked out the kinks, but for my usage I thought components were the way to go. These terms are pretty loose; they don’t necessarily directly correspond to C++ (or whatever) definitions when you use them in this general way.</p> <p>The other thing I am finally starting to test out is my new namespace-centric coding style I’ve been simmering on for the past 5 years. I’ll also write more about that soon as well. I’ve been <em>styleless</em> for a long time, after becoming dissatisfied with my previous programming style, and not seeing any others I really liked.</p> <p>The final thing I wanted to mention was that even after 20 years of programming, I still need constant reminders to figure out ways to keep changes small. I started writing the new object system and porting all the code over to it in one big change, and after bogging down in that for days and days, I finally rolled back to the old object system and figured out a way to incrementally change over. It’s more hacked code in the interim with the two object systems fighting for attention, but having a compiling and working piece of software you can test incrementally is so important it’s hard to overstate. I had two object.h’s in the project for a few days (the old one renamed to _object.h), but it let me move things over piecemeal and keep testing, and I was finally able to delete the old object.h last night.</p> <p>Also, source code control is your friend and it saved me when I realized I’d bitten off more than I could chew in one bite during the refactor. I currently use Subversion and have for years, but have been thinking about switching to Mercurial or Bazaar. I wish these distributed systems dealt with large binary files like those found in games better, though.</p> <ol class="footnotes"><li id="footnote_0_438" class="footnote">1) refactoring takes a long time, 2) it adds bugs to the code, 3) even when it works perfectly, it has no visible improvement on the game [<a href="http://spyparty.com/2010/05/20/object-h-is-dead-long-live-object-h/#identifier_0_438" class="footnote-link footnote-back-link">↩</a>]</li></ol> </div> <div class="postmetadata"> Category: <a href="http://spyparty.com/category/programming/" title="View all posts in programming" rel="category tag">programming</a> | <a href="http://spyparty.com/2010/05/20/object-h-is-dead-long-live-object-h/#comments" title="Comment on object.h is dead, long live object.h!">22 Comments</a> </div> </div> <div class="post" id="post-428"> <h2 class="posttitle"><a href="http://spyparty.com/2010/05/07/a-couple-interviews/" rel="bookmark" title="Permanent Link to A couple interviews…">A couple interviews…</a></h2> <div class="postmetadata">2010/05/07, 13:58 by checker</div> <div class="postentry"> <p>Martin Davies from <em>PC Gamer UK</em> just posted an interview with me to accompany his <strong><a href="http://spyparty.com/2010/05/04/spyparty-in-pc-gamer-uk-issue-214/">SpyParty </a></strong><a href="http://spyparty.com/2010/05/04/spyparty-in-pc-gamer-uk-issue-214/">preview</a> in the print magazine where I talk a bit about some of the aesthetic goals for the game and how it got started:</p> <p><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.computerandvideogames.com/article.php?id=245666&site=pcg');" href="http://www.computerandvideogames.com/article.php?id=245666&site=pcg">http://www.computerandvideogames.com/article.php?id=245666&site=pcg</a></p> <p>And, Alice Bonasio from <em>The Escapist</em> posted an interview/article about games as an art form and film and comics and all the usual stuff I babble about incessantly:</p> <p><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.escapistmagazine.com/articles/view/issues/issue_252/7496-Better-Than-Film');" href="http://www.escapistmagazine.com/articles/view/issues/issue_252/7496-Better-Than-Film">http://www.escapistmagazine.com/articles/view/issues/issue_252/7496-Better-Than-Film</a></p> <p>It’s really wonderful that people in the press are giving more and more attention to indies these days, I think it’s great for the industry. I mean, not just because I’m getting some of it, but in general! :)</p> </div> <div class="postmetadata"> Category: <a href="http://spyparty.com/category/press/" title="View all posts in press" rel="category tag">press</a> | <a href="http://spyparty.com/2010/05/07/a-couple-interviews/#comments" title="Comment on A couple interviews…">12 Comments</a> </div> </div> <div class="post" id="post-411"> <h2 class="posttitle"><a href="http://spyparty.com/2010/05/04/spyparty-in-pc-gamer-uk-issue-214/" rel="bookmark" title="Permanent Link to SpyParty in PC Gamer UK Issue 214">SpyParty in PC Gamer UK Issue 214</a></h2> <div class="postmetadata">2010/05/04, 13:49 by checker</div> <div class="postentry"> <p>According to <a onclick="javascript:pageTracker._trackPageview('/outgoing/forums.computerandvideogames.com/viewtopic.php?p=1682883');" href="http://forums.computerandvideogames.com/viewtopic.php?p=1682883">this</a>, the new PC Gamer UK has a <strong>SpyParty</strong> preview?</p> <p>Anybody have a scan of it?</p> <p><em>Update:</em> As you can see in the comments, Simples was awesome and scanned it for us!</p> <p> <a href="http://spyparty.com/2010/05/04/spyparty-in-pc-gamer-uk-issue-214/#more-411" class="more-link">Continue reading ‘SpyParty in PC Gamer UK Issue 214’ »</a></p> </div> <div class="postmetadata"> Category: <a href="http://spyparty.com/category/press/" title="View all posts in press" rel="category tag">press</a> | <a href="http://spyparty.com/2010/05/04/spyparty-in-pc-gamer-uk-issue-214/#comments" title="Comment on SpyParty in PC Gamer UK Issue 214">15 Comments</a> </div> </div> <div class="post" id="post-400"> <h2 class="posttitle"><a href="http://spyparty.com/2010/04/21/lost-the-wire-game-design/" rel="bookmark" title="Permanent Link to Lost, The Wire, Game Design, Meaning, and Brian Moriarty">Lost, The Wire, Game Design, Meaning, and Brian Moriarty</a></h2> <div class="postmetadata">2010/04/21, 04:11 by checker</div> <div class="postentry"> <p>I just read <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.wired.com/magazine/2010/04/ff_lost/8/');" href="http://www.wired.com/magazine/2010/04/ff_lost/8/">this interview with the Lost executive producers, Carlton Cuse and Damon Lindelof</a>, and it’s got some pretty interesting comments in it that relate to some of my current thoughts about game design.</p> <p>This first quote speaks to a concept <a onclick="javascript:pageTracker._trackPageview('/outgoing/the-witness.net/');" href="http://the-witness.net/">Jonathan Blow</a> and I talk about all the time when discussing game design and development, namely, bottom-up versus top-down game design, and <em>listening</em> to your game as you develop it and being able to react to what it’s telling you:</p> <blockquote><p><strong>Lindelof: </strong><em>I think one of the most profound lessons I’ve learned over time as a show runner is that the more you listen to the show, the better your show.</em></p></blockquote> <p>I was struck that Lindelof used the exact same phrase when talking about developing Lost. I’m being a bit hyperbolic here, but I think there’s a general belief in the game industry that you can top-down design games, that if your design document is good enough, you can just type it in, that making a game becomes predictable, but I really don’t think this is true if you’re going for greatness. This is not to say you just start typing without any idea of what you’re going for, you definitely have to have aesthetic goals, but you need to have the freedom to listen to the game.</p> <p>I also think this is why hybrid developers, like programmer-designers, and artist-designers, and artist-programmers are more effective, because the game speaks to you at many levels of detail and in many languages, and you’ll miss some of them if there’s a tin-can-and-string telephone between you and the game…sometimes late at night the game whispers something to the programmer about design or to the artist about programming, and he or she needs to be able to react to it.</p> <p>This is also related to <a onclick="javascript:pageTracker._trackPageview('/outgoing/chrishecker.com/Please_Finish_Your_Game');" href="http://chrishecker.com/Please_Finish_Your_Game">the rant I gave at GDC this year</a>; you need more than a few days of development for your game to start saying important things to you.</p> <p>The Lost guys also talk about how much they knew when they were creating the early episodes, and this relates to the ability to react to how the show itself is coming together:</p> <blockquote><p><strong>Lindelof: </strong><em>We have to have the answers to the mysteries so that there is something to work towards, but what we don’t have are the stories. J.K. Rowling can sit down and say, here’s how Harry Potter’s parents were killed, and here’s who killed them, but how am I going to reveal that information to the audience in the most emotionally impactful way? So we know what we want to do, but we have very little idea of how and when we’re going to do it.</em></p></blockquote> <p>There’s <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.pbs.org/moyers/journal/04172009/transcript1.html');" href="http://www.pbs.org/moyers/journal/04172009/transcript1.html">a really great Bill Moyers interview with David Simon about The Wire</a> that touches on this topic in a very similar way:</p> <blockquote><p><strong>Simon: </strong><em>And, you know, I’m not suggesting we have everything planned to the nth degree. But we knew, for example when we wrote that scene in the beginning of the first season, that by the end of the run those three characters would have been treated as pawns in a chess game.</em></p> <p><em>And we knew that character that cited what was ailing post-industrial America, he happened to be a union captain and one of the longshoreman. That he would be speaking to, at the time, what we were reacting to with Enron and things like– and WorldCom and the first sort of– first shots across our bow, economically. That people were trading crap and calling it gold. And that’s what THE WIRE was about. It was about that which is– has no value, being emphasized as being meaningful. And that which is– has genuine meaning, being given low regard.</em></p></blockquote> <p>The part at the end of this also speaks to me, because I’m constantly thinking about how games can have deeper meaning. The <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.gamasutra.com/view/news/26077/IGDA_Forum_Asking_Why_Will_Keep_Games_Out_Of_The_Ghetto_Says_Hecker.php');" href="http://www.gamasutra.com/view/news/26077/IGDA_Forum_Asking_Why_Will_Keep_Games_Out_Of_The_Ghetto_Says_Hecker.php">talk I gave last year at the IGDA Leadership Forum</a> asked,” Why are we making games?” It’s really clear, listening to these guys talk, that they have meaningful things they’re trying to say with their art.</p> <blockquote><p><strong><strong>Carroll</strong>:</strong><em> Do you still see that as the central issue, man of faith versus man of science?</em></p> <p><strong>Lindelof:</strong> <em>The paradigm has shifted from that to, were we brought here for a very specific reason, and what is that reason?</em></p></blockquote> <p>They’re even thinking about how their audience is thinking about their work:</p> <blockquote><p><strong>Lindelof:</strong> <em>Locke is now the voice of a very large subset of the audience who believes that when Lost is all said and done, we will have wasted six years of our lives, that we were making it up as we went along, and that there’s really no purpose.</em></p></blockquote> <p>I think games occasionally try to do some self-referential things like this, like the protagonist in Uncharted 2 saying things like “I’m so sick of climbing stuff”, but it’s happening at a much more surface level, and it’s not directly speaking through the interactivity, the way we need to be doing to come into our own as an art and entertainment form.</p> <p>On the topic of actually answering questions, and making the meaning plain, they understand the perils:</p> <blockquote><p><strong>Carroll:</strong><em> Is there a worry that there exists questions for which any possible answer is not as interesting as the question would be before you knew the answer?</em></p> <p><strong>Lindelof:</strong> <em>Absolutely.</em></p></blockquote> <p>This is something <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.ludix.com/moriarty/');" href="http://www.ludix.com/moriarty/">Brian Moriarty</a> has lectured on in the past. He’s a gifted presenter, and his lectures <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.ludix.com/moriarty/psalm46.html');" href="http://www.ludix.com/moriarty/psalm46.html">The Secret of Psalm 46</a> and <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.ludix.com/moriarty/paul.html');" href="http://www.ludix.com/moriarty/paul.html">Who Buried Paul?</a> are master classes on the topic. J.J. Abrams gave <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.ted.com/talks/j_j_abrams_mystery_box.html');" href="http://www.ted.com/talks/j_j_abrams_mystery_box.html">a TED talk about his “mystery box”</a>, which is a fine talk, but not as good as Moriarty’s.</p> <p>Finally, I think this is something Jonathan did really well in <a onclick="javascript:pageTracker._trackPageview('/outgoing/braid-game.com');" href="http://braid-game.com">Braid</a>. Iroqouis Pliskin gave <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.gdcvault.com/play/1012249/Artgame_Sessions');" href="http://www.gdcvault.com/play/1012249/Artgame_Sessions">an excellent talk at GDC about his interpretation of the meaning behind Braid</a>.</p> <p>I’ll relate all of this back to <strong>SpyParty</strong> in a future post. Or maybe I won’t. :)</p> </div> <div class="postmetadata"> Category: <a href="http://spyparty.com/category/design/" title="View all posts in design" rel="category tag">design</a> | <a href="http://spyparty.com/2010/04/21/lost-the-wire-game-design/#comments" title="Comment on Lost, The Wire, Game Design, Meaning, and Brian Moriarty">5 Comments</a> </div> </div> <div class="post" id="post-346"> <h2 class="posttitle"><a href="http://spyparty.com/2010/04/17/game-development-is-tedious/" rel="bookmark" title="Permanent Link to Game development is tedious, let’s go shopping!">Game development is tedious, let’s go shopping!</a></h2> <div class="postmetadata">2010/04/17, 07:50 by checker</div> <div class="postentry"> <p>Let’s be clear: I love making games, and I hope to do it for a few more decades, fate willing.</p> <p>That said—like in other creative endeavors—the pursuit of awesomeness in game development is often mind-numbingly tedious and mundane. Case in point: my last week and a half.</p> <p>It all started when I decided the next cool thing to work on would be to get the partygoers to be able to pick up stuff, like books, sculptures, drinks, cigarettes, and any other MacGuffins I come up with for the Spy missions. Let’s ignore the fact that it’s 2010 and game developers still need to think about and do work to get characters to pick up objects in game worlds. <em>Sigh.</em></p> <p>Okay, this seems like a reasonable short term programming goal that will allow me to further explore the design space. For example, it will allow the characters to carry books away from the bookshelves, making it harder for the Sniper to keep track of what’s going on, etc.</p> <p>Easy! <em>What could possibly go wrong?</em></p> <p>I broke this high level task down into bite-sized components:</p> <ol> <li>Add an event track to the animation system so the animations can tell the AI when the object should be attached.</li> <li>Make an animation for picking up the object and have it fire an attachment event.</li> <li>Add non-character dynamic items as a concept to the code.</li> <li>Add a simple attachment system to the character AI and rendering code.</li> <li>Write a quick full body IK system so the character doesn’t have to align with the item exactly<sup><a href="http://spyparty.com/2010/04/17/game-development-is-tedious/#footnote_0_346" id="identifier_0_346" class="footnote-link footnote-identifier-link" title="This is a step that might give some people pause, but I’ve written so many IK solvers over the years that I figure I can whip this out in a day or so. Famous last words.">1</a></sup>.</li> <li>Hook it all up.</li> </ol> <p>I start on Step 1, and get it done relatively quickly. There was a bit of an issue of figuring out how to represent the event track in the modeling tool, but once I figured that out (with help from the awesome <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.ryane.com/');" href="http://www.ryane.com/">Ryan Ellis</a>), it went pretty smoothly.</p> <p>Okay, so next up, Step 2, the rough animation to pick up an item. Of course, when doing an animation referencing an item in the world, you want that item in the view while you’re doing the animation. I load up the pedestal with the statue on it into the file with the character rig, and get this:</p> <div id="attachment_349" class="wp-caption aligncenter" style="width: 400px"><a onclick="javascript:pageTracker._trackPageview('/downloads/wp-content/uploads/2010/04/pedestal-scale.png');" href="http://spyparty.com/wp-content/uploads/2010/04/pedestal-scale.png"><img class="size-medium wp-image-349 " title="pedestal-scale" src="http://spyparty.com/wp-content/uploads/2010/04/pedestal-scale.png" alt="" width="390" height="189" /></a><p class="wp-caption-text">That's a very tiny pedestal you have there.</p></div> <p>Hmm, that’s odd…</p> <p> <a href="http://spyparty.com/2010/04/17/game-development-is-tedious/#more-346" class="more-link">Continue reading ‘Game development is tedious, let’s go shopping!’ »</a></p> <ol class="footnotes"><li id="footnote_0_346" class="footnote">This is a step that might give some people pause, but I’ve written <a onclick="javascript:pageTracker._trackPageview('/outgoing/chrishecker.com/Inverse_Kinematics');" href="http://chrishecker.com/Inverse_Kinematics">so many IK solvers</a> over the years that I figure I can whip this out in a day or so. Famous last words. [<a href="http://spyparty.com/2010/04/17/game-development-is-tedious/#identifier_0_346" class="footnote-link footnote-back-link">↩</a>]</li></ol> </div> <div class="postmetadata"> Category: <a href="http://spyparty.com/category/art/" title="View all posts in art" rel="category tag">art</a>, <a href="http://spyparty.com/category/indie-games/" title="View all posts in indie games" rel="category tag">indie games</a>, <a href="http://spyparty.com/category/programming/" title="View all posts in programming" rel="category tag">programming</a> | <a href="http://spyparty.com/2010/04/17/game-development-is-tedious/#comments" title="Comment on Game development is tedious, let’s go shopping!">24 Comments</a> </div> </div> <div class="post" id="post-306"> <h2 class="posttitle"><a href="http://spyparty.com/2010/04/03/spyparty-press-extravaganza/" rel="bookmark" title="Permanent Link to GDC 2010: SpyParty Press Extravaganza">GDC 2010: SpyParty Press Extravaganza</a></h2> <div class="postmetadata">2010/04/03, 07:52 by checker</div> <div class="postentry"> <p>Wow, so the week after the <a onclick="javascript:pageTracker._trackPageview('/outgoing/gdconf.com');" href="http://gdconf.com">Game Developers Conference</a> was kind of simultaneously crazy and great for <strong>SpyParty</strong>! As I <a href="http://spyparty.com/2010/03/30/gdc2010-developers-playtest/">posted previously</a>, I did a ton of playtests at the conference with developers, and I got a lot of great feedback on the game.</p> <p>I also playtested it with a few folks from the game press, and they were nice enough to write up their experiences on their various news sites. And then those articles got picked up by other sites, and things went a little nuts. I was on airplanes for half of one of the days, ssh’ing in from my phone on the tarmac to try to keep my server running!</p> <p>Let’s see, in the order the stories were posted:</p> <ul> <li><em><strong><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.avclub.com/articles/avc-at-gdc-10-day-four-spy-party,39176/');" href="http://www.avclub.com/articles/avc-at-gdc-10-day-four-spy-party,39176/">AVC at GDC ‘10: Spy party!</a></strong></em> by <a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com/JohnTeti');" href="http://twitter.com/JohnTeti">John Teti</a> on <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.avclub.com/');" href="http://www.avclub.com/">The Onion AV Club</a><br /> <em>“I don’t want to beat around the bush here; this game is awesome in too many ways to describe here.”</em></li> <li><em><strong><a onclick="javascript:pageTracker._trackPageview('/outgoing/techland.com/2010/03/16/gdc-2010-enjoyed-and-annoyed/');" href="http://techland.com/2010/03/16/gdc-2010-enjoyed-and-annoyed/">GDC 2010: Enjoyed and Annoyed</a></strong></em> by <a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com/EvNarc');" href="http://twitter.com/EvNarc">Evan Narcisse</a> on <a onclick="javascript:pageTracker._trackPageview('/outgoing/techland.com/');" href="http://techland.com/">Time Magazine’s Techland Blog</a><br /> <em>“Even in its pre-natal form, </em><em>Spy Party</em> does a great job of creating a new kind of multiplayer psychological tension. It’s something that wasn’t even on my GDC agenda, yet it wound up rocking my world.”</li> <li><em><strong><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.destructoid.com/why-you-need-to-be-excited-about-spyparty-167171.phtml');" href="http://www.destructoid.com/why-you-need-to-be-excited-about-spyparty-167171.phtml">Why you need to be excited about SpyParty</a></strong></em> by <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.destructoid.com/elephant/index.phtml?a=1334');" href="http://www.destructoid.com/elephant/index.phtml?a=1334">Anthony Burch</a> on <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.destructoid.com/');" href="http://www.destructoid.com/">Destructoid</a><em><br /> “There has never been a videogame like SpyParty. … SpyParty is as cerebral and personal experience as I’ve ever had with a multiplayer game. … Despite being two years away from completion, the early version I saw still remains one of the most subtle, enjoyable, and surprisingly playful multiplayer games I’ve yet played.”</em></li> <li><em><strong><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.wired.com/gamelife/2010/03/hands-on-spyparty/');" href="http://www.wired.com/gamelife/2010/03/hands-on-spyparty/">Innovative SpyParty Is Ultimate Mind Game</a></strong></em> by <a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com/triphibian');" href="http://twitter.com/triphibian">Gus Mastrapa</a> on <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.wired.com/gamelife/');" href="http://www.wired.com/gamelife/">Wired’s Game|Life</a><br /> <em>“SpyParty is like nothing else I’ve ever played. … When the laser focuses on you, the tension is intense. And the relief, when the beam swings away, is powerful.”</em></li> <li><em><strong><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.edge-online.com/blogs/i-know-that-you-know-that-i-know-what-you-know');" href="http://www.edge-online.com/blogs/i-know-that-you-know-that-i-know-what-you-know">I Know That You Know That I Know What You Know</a></strong></em> by <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.savetherobot.com/');" href="http://www.savetherobot.com/">Chris Dahlen</a> on <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.edge-online.com/');" href="http://www.edge-online.com/">Edge Online</a><br /> <em>“Both players are tense with the joy of knowing or not knowing or thinking they know what’s about to happen.”</em></li> <li><em><strong><a onclick="javascript:pageTracker._trackPageview('/outgoing/kotaku.com/5500968/the-next-smart-video-game-only-lets-you-kill-once');" href="http://kotaku.com/5500968/the-next-smart-video-game-only-lets-you-kill-once">The Next Smart Video Game Only Lets You Kill Once</a></strong></em> by <a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com/Stephentotilo');" href="http://twitter.com/Stephentotilo">Stephen Totilo</a> on <a onclick="javascript:pageTracker._trackPageview('/outgoing/kotaku.com');" href="http://kotaku.com">Kotaku</a> and <a onclick="javascript:pageTracker._trackPageview('/outgoing/gizmodo.com');" href="http://gizmodo.com">Gizmodo</a><br /> <em>“Part of what is so exciting about Spy Party is the stuff that happens around the game. Hecker has seen the game trigger strong emotional responses. I even felt it… guilt of all things. I’ve killed thousands — millions? — of enemy characters and even some friendly characters in video games with none of the pangs of consequence. I shot one innocent partygoer in Spy Party after tracking them for a few minutes, after being sure they were Chris Hecker’s avatar and up to no good, and then, as they lay dead on the floor I realized I was wrong. I felt bad.”</em></li> <li><em><strong><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.rockpapershotgun.com/2010/03/26/you-only-shoot-once-spyparty/');" href="http://www.rockpapershotgun.com/2010/03/26/you-only-shoot-once-spyparty/">You Only Shoot Once: SpyParty</a></strong></em> by <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.kierongillen.com/');" href="http://www.kierongillen.com/">Kieron Gillen</a> on <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.rockpapershotgun.com');" href="http://www.rockpapershotgun.com">Rock, Paper, Shotgun</a><br /> <small>Kieron couldn’t make it to GDC this year, but he wrote up his thoughts on the game from reading the other articles!</small><br /> <em>“Pure battle of wits stuff here, and seems totally fascinating. It’s a couple of years away, at least in part due to a major general aesthetic upgrade, but we’ll be watching it. Closely. Trying to work out if it’s a spy.”</em></li> </ul> <p>In the middle of all this, Gus’ Wired piece <a onclick="javascript:pageTracker._trackPageview('/downloads/wp-content/uploads/2010/04/reddit-frontpage-20100323.png');" href="http://spyparty.com/wp-content/uploads/2010/04/reddit-frontpage-20100323.png">hit the front page of reddit</a>, and Anthony’s Destructoid story <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.stumbleupon.com/url/www.destructoid.com/why-you-need-to-be-excited-about-spyparty-167171.phtml');" href="http://www.stumbleupon.com/url/www.destructoid.com/why-you-need-to-be-excited-about-spyparty-167171.phtml">hit the front page of the games section of stumbleupon</a>, both of which generated a ton more traffic to the articles and the <strong>SpyParty</strong> blog. Stephen’s piece generated 300 comments on Kotaku and Gizmodo, <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.fark.com/cgi/comments.pl?IDLink=5140312');" href="http://www.fark.com/cgi/comments.pl?IDLink=5140312">a Fark comment thread</a>, and as of this writing it’s on <a onclick="javascript:pageTracker._trackPageview('/downloads/wp-content/uploads/2010/04/stumbleupon-20100403.png');" href="http://spyparty.com/wp-content/uploads/2010/04/stumbleupon-20100403.png">the top of the stubleupon games section with Anthony’s piece on the same page</a>!</p> <p>Then a bunch of other people started writing articles about the game, with titles like <a onclick="javascript:pageTracker._trackPageview('/outgoing/johnwhancock.com/games/finally-a-true-spy-game/');" href="http://johnwhancock.com/games/finally-a-true-spy-game/"><em>Finally, a TRUE Spy Game!</em></a>, and commenting about the game <a onclick="javascript:pageTracker._trackPageview('/outgoing/www.g-shack.com/forum2/showthread.php?t=2368');" href="http://www.g-shack.com/forum2/showthread.php?t=2368">o</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/gamegossip.com/forums/pc-gaming/106890-spyparty.html');" href="http://gamegossip.com/forums/pc-gaming/106890-spyparty.html">n</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/old.idlethumbs.net/forums/showthread.php?t=7138');" href="http://old.idlethumbs.net/forums/showthread.php?t=7138"> f</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/forums.narutocentral.com/showthread.php?p=1798666');" href="http://forums.narutocentral.com/showthread.php?p=1798666">o</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/forums.sarcasticgamer.com/showthread.php?t=29376');" href="http://forums.sarcasticgamer.com/showthread.php?t=29376">r</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.fohguild.org/forums/other-games/41951-spy-party.html');" href="http://www.fohguild.org/forums/other-games/41951-spy-party.html">u</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.quartertothree.com/game-talk/showthread.php?t=58428');" href="http://www.quartertothree.com/game-talk/showthread.php?t=58428">m</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/www.sherdog.net/forums/f88/spyparty-1170377/');" href="http://www.sherdog.net/forums/f88/spyparty-1170377/">s</a> and <a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com/goaltaylor33/statuses/11437445435');" href="http://twitter.com/goaltaylor33/statuses/11437445435">o</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com/sp4c31nv4d3r/statuses/11377110956');" href="http://twitter.com/sp4c31nv4d3r/statuses/11377110956">n</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com/Skegg/statuses/11298110229');" href="http://twitter.com/Skegg/statuses/11298110229"> </a><a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com/ChuckJager/statuses/11216621525');" href="http://twitter.com/ChuckJager/statuses/11216621525">T</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com/Pat_NZ/statuses/11182984552');" href="http://twitter.com/Pat_NZ/statuses/11182984552">w</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com/CedricKiefer/statuses/11179076289');" href="http://twitter.com/CedricKiefer/statuses/11179076289">i</a><a onclick="javascript:pageTracker._trackPageview('/outgoing/twitter.com