<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>GrapeFruit Games</title>
	<atom:link href="http://grapefruitgames.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://grapefruitgames.com</link>
	<description></description>
	<lastBuildDate>Sun, 20 May 2012 07:41:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='grapefruitgames.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/449e5cfdff1f75eeb9ec500632d82c81?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>GrapeFruit Games</title>
		<link>http://grapefruitgames.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://grapefruitgames.com/osd.xml" title="GrapeFruit Games" />
	<atom:link rel='hub' href='http://grapefruitgames.com/?pushpress=hub'/>
		<item>
		<title>Ludum Dare #23 &#8211; I Will Burn The Earth Down for You</title>
		<link>http://grapefruitgames.com/2012/04/23/ludum-dare-23-i-will-burn-the-earth-down-for-you-9/</link>
		<comments>http://grapefruitgames.com/2012/04/23/ludum-dare-23-i-will-burn-the-earth-down-for-you-9/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 02:24:42 +0000</pubDate>
		<dc:creator>Eddie Cameron</dc:creator>
				<category><![CDATA[__________________]]></category>
		<category><![CDATA[chase]]></category>
		<category><![CDATA[gamejam]]></category>
		<category><![CDATA[indie]]></category>
		<category><![CDATA[ld48]]></category>
		<category><![CDATA[ludum dare]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[unity]]></category>

		<guid isPermaLink="false">http://grapefruitgames.com/2012/04/23/ludum-dare-23-i-will-burn-the-earth-down-for-you-9/</guid>
		<description><![CDATA[Ludum Dare #23 just finished, which also happened to be the 10 years anniversary for the 48-hr gamejam. I couldn&#8217;t really spend much time to spend on my 4th Ludum Dare entry, but I did manage to squeeze something out at least slightly relevant to the &#8220;Tiny World&#8221; theme. &#8220;I Will Burn the Earth Down [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grapefruitgames.com&#038;blog=7795022&#038;post=644&#038;subd=grapefruitgames&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://grapefruitgames.com/2012/04/23/ludum-dare-23-i-will-burn-the-earth-down-for-you-9/"><img class="size-full wp-image aligncenter" src="http://grapefruitgames.files.wordpress.com/2012/04/screen-shot-2012-04-23-at-1-13-40-pm.png?w=487" alt="Image" width="487" height="302" /></a></p>
<p><span id="more-644"></span>
<p>Ludum Dare #23 just finished, which also happened to be the 10 years anniversary for <a href="http://www.ludumdare.com/compo/about-ludum-dare/">the 48-hr gamejam</a>. I couldn&#8217;t really spend much time to spend on my 4th Ludum Dare entry, but I did manage to squeeze something out at least slightly relevant to the &#8220;Tiny World&#8221; theme. &#8220;I Will Burn the Earth Down for You&#8221; is a pretty simple chasing game, where you fly a saucer around the world to try to catch your partner. Unfortunately, to go fast enough to catch them, you&#8217;ll need to use your boost, which happens to set fire to the earth below.</p>
<p>It&#8217;s not my best game by far, but it is probably my favourite LD entry so far, since I didn&#8217;t stress out, and even had time to make music. Terrible, terrible music. It will take 2 mins to play, so please <a href="http://www.ludumdare.com/compo/ludum-dare-23/?action=preview&amp;uid=4158">give it a shot</a>!</p>
<p style="text-align:center;"><a href="http://www.ludumdare.com/compo/ludum-dare-23/?action=preview&amp;uid=4158"><img class="size-full wp-image aligncenter" src="http://grapefruitgames.files.wordpress.com/2012/04/screen-shot-2012-04-23-at-1-15-01-pm.png?w=487" alt="Image" width="487" height="301" /></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grapefruitgames.wordpress.com/644/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grapefruitgames.wordpress.com/644/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grapefruitgames.wordpress.com/644/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grapefruitgames.wordpress.com/644/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grapefruitgames.wordpress.com/644/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grapefruitgames.wordpress.com/644/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grapefruitgames.wordpress.com/644/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grapefruitgames.wordpress.com/644/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grapefruitgames.wordpress.com/644/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grapefruitgames.wordpress.com/644/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grapefruitgames.wordpress.com/644/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grapefruitgames.wordpress.com/644/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grapefruitgames.wordpress.com/644/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grapefruitgames.wordpress.com/644/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grapefruitgames.com&#038;blog=7795022&#038;post=644&#038;subd=grapefruitgames&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grapefruitgames.com/2012/04/23/ludum-dare-23-i-will-burn-the-earth-down-for-you-9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">EddieC</media:title>
		</media:content>

		<media:content url="http://grapefruitgames.files.wordpress.com/2012/04/screen-shot-2012-04-23-at-1-13-40-pm.png?w=487" medium="image">
			<media:title type="html">Image</media:title>
		</media:content>

		<media:content url="http://grapefruitgames.files.wordpress.com/2012/04/screen-shot-2012-04-23-at-1-15-01-pm.png?w=487" medium="image">
			<media:title type="html">Image</media:title>
		</media:content>
	</item>
		<item>
		<title>New game : War Dog</title>
		<link>http://grapefruitgames.com/2012/04/02/new-game-war-dog/</link>
		<comments>http://grapefruitgames.com/2012/04/02/new-game-war-dog/#comments</comments>
		<pubDate>Mon, 02 Apr 2012 00:21:25 +0000</pubDate>
		<dc:creator>Eddie Cameron</dc:creator>
				<category><![CDATA[__________________]]></category>
		<category><![CDATA[gamejam]]></category>
		<category><![CDATA[molyjam]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[stealth]]></category>
		<category><![CDATA[unity]]></category>
		<category><![CDATA[war dog]]></category>

		<guid isPermaLink="false">http://grapefruitgames.com/?p=517</guid>
		<description><![CDATA[I had been waiting for this weekend for a long time, it was Molyjam weekend! The Molyjam was(still is?) a gamejam based on the tweets of @PeterMolydeux, a Peter Molyneux parody. Many/all of the ideas are ridiculous, but they&#8217;re often brilliant. The Molyjam will hopefully help people realise that ridiculous ideas can lead to amazing games. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grapefruitgames.com&#038;blog=7795022&#038;post=517&#038;subd=grapefruitgames&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I had been waiting for this weekend for a long time, it was <a href="http://www.whatwouldmolydeux.com">Molyjam</a> weekend! The Molyjam was(still is?) a gamejam based on the tweets of <a href="https://twitter.com/#!/petermolydeux">@PeterMolydeux</a>, a Peter Molyneux parody. Many/all of the ideas are ridiculous, but they&#8217;re often brilliant. The Molyjam will hopefully help people realise that ridiculous ideas can lead to amazing games. My game, however, was WAR DOG.</p>
<p><a href="http://grapefruitgames.files.wordpress.com/2012/04/screen-shot-2012-04-01-at-7-47-30-pm.png"><img class="aligncenter size-full wp-image-533" title="War Dog title" src="http://grapefruitgames.files.wordpress.com/2012/04/screen-shot-2012-04-01-at-7-47-30-pm.png?w=580" alt=""   /><span id="more-517"></span></a>I chose the tweet &#8220;Modern warfare 3. You play as a dog trying to find his lost family. Music score by Elton John.&#8221;. Lost in a warzone after a battle, you need to sniff a whole lot of bodies to find your owner. Can you bring him back? Then there&#8217;s a whole lot of Elton John to keep things interesting. My hope  is that it gets enough interest that I can be sued by Sir Reginald Dwight, go bankrupt, and avoid paying my enormous student loan back (I think that&#8217;s how bankruptcy works).</p>
<p>A stealth/action/dog game, mostly unbalanced but, as a first for my gamejam games, mostly functional!</p>
<p><a href="http://dl.dropbox.com/u/1156317/war_dog_web/war_dog_web.html">PLAY HERE</a> (Unity webplugin, ~14MB)</p>
<p>DOWNLOAD (for full screen and pretties): <a href="http://dl.dropbox.com/u/1156317/war_dog_web/War_Dog_Win.zip">Win</a>, <a href="http://dl.dropbox.com/u/1156317/war_dog_web/War_Dog_OSX.zip">OSX</a> (careful, highly unoptimised)</p>
<p><a href="http://grapefruitgames.files.wordpress.com/2012/04/screen-shot-2012-04-01-at-7-48-15-pm.png"><img class="aligncenter size-full wp-image-535" title="Dead soldier" src="http://grapefruitgames.files.wordpress.com/2012/04/screen-shot-2012-04-01-at-7-48-15-pm.png?w=580" alt=""   /></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grapefruitgames.wordpress.com/517/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grapefruitgames.wordpress.com/517/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grapefruitgames.wordpress.com/517/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grapefruitgames.wordpress.com/517/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grapefruitgames.wordpress.com/517/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grapefruitgames.wordpress.com/517/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grapefruitgames.wordpress.com/517/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grapefruitgames.wordpress.com/517/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grapefruitgames.wordpress.com/517/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grapefruitgames.wordpress.com/517/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grapefruitgames.wordpress.com/517/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grapefruitgames.wordpress.com/517/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grapefruitgames.wordpress.com/517/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grapefruitgames.wordpress.com/517/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grapefruitgames.com&#038;blog=7795022&#038;post=517&#038;subd=grapefruitgames&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grapefruitgames.com/2012/04/02/new-game-war-dog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">EddieC</media:title>
		</media:content>

		<media:content url="http://grapefruitgames.files.wordpress.com/2012/04/screen-shot-2012-04-01-at-7-47-30-pm.png" medium="image">
			<media:title type="html">War Dog title</media:title>
		</media:content>

		<media:content url="http://grapefruitgames.files.wordpress.com/2012/04/screen-shot-2012-04-01-at-7-48-15-pm.png" medium="image">
			<media:title type="html">Dead soldier</media:title>
		</media:content>
	</item>
		<item>
		<title>UniGUI &#8211; Now available in the Unity Asset Store!</title>
		<link>http://grapefruitgames.com/2012/03/28/unigui-now-available-in-the-unity-asset-store/</link>
		<comments>http://grapefruitgames.com/2012/03/28/unigui-now-available-in-the-unity-asset-store/#comments</comments>
		<pubDate>Tue, 27 Mar 2012 22:02:29 +0000</pubDate>
		<dc:creator>Eddie Cameron</dc:creator>
				<category><![CDATA[__________________]]></category>
		<category><![CDATA[asset story]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[UniGUI]]></category>
		<category><![CDATA[unity]]></category>

		<guid isPermaLink="false">http://grapefruitgames.com/?p=518</guid>
		<description><![CDATA[Unity is a wonderful program, that lets you build 3D scenes, change them, and have them do almost anything you want very quickly. The GUI system, however, sucks. The GUI scripting system forces you to put all the code in one function, you have to specify resolutions directly, and you can&#8217;t see what you&#8217;re changes [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grapefruitgames.com&#038;blog=7795022&#038;post=518&#038;subd=grapefruitgames&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://grapefruitgames.files.wordpress.com/2012/03/mainpicblog-e1332886104689.png"><img class="aligncenter size-full wp-image-521" title="UniGUI" src="http://grapefruitgames.files.wordpress.com/2012/03/mainpicblog-e1332886104689.png?w=580" alt=""   /></a>Unity is a wonderful program, that lets you build 3D scenes, change them, and have them do almost anything you want very quickly. The GUI system, however, sucks. The GUI scripting system forces you to put all the code in one function, you have to specify resolutions directly, and you can&#8217;t see what you&#8217;re changes look like until runtime. It sucks.<span id="more-518"></span></p>
<p>I got fed up with this, and after reusing a lot of GUI code across different projects, decided to clean it up into a package and release it as <a href="http://u3d.as/content/eddie-cameron/uni-gui/2LG">UniGUI</a>. It is essentially a framework of scripts that will turn regular Unity Gameobjects into GUIElements. You can make any collider a button, any group of objects into a scrollbar, a slider, a toolbar. This lets you use all the flexibility and ease of use that Unity already provides for Gameobjects, for your GUI. Take a look at the <a href="http://dl.dropbox.com/u/1156317/UniGUI_Web/UniGUI_example.html">example scene</a> for a preview of what it can do.</p>
<p><img class="aligncenter size-full wp-image-520" title="uniGUIScreenshot1" src="http://grapefruitgames.files.wordpress.com/2012/03/uniguiscreenshot1.png?w=580" alt=""   /><span style="text-align:center;">It a</span><span style="text-align:center;">lso uses a couple of handy Input managers. InputUni lets you fake touches on a desktop, so you can seamlessly test your mobile game in editor without having to change anything. TouchHandler watches inputs and automatically translates them into C# events like StartTouch and StartDoubleTouch, so you don&#8217;t have to monitor any of this logic yourself, or worry about touches being mixed up between scripts. Replace all the duplicate touch counting, touch status changing, and even screen to worldspace calculation from your scripts.</span></p>
<p><a href="http://u3d.as/content/eddie-cameron/uni-gui/2LG">See if it</a> can help you! It costs $15, but will easily save you hours of work across all your projects, as it has done for me.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grapefruitgames.wordpress.com/518/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grapefruitgames.wordpress.com/518/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grapefruitgames.wordpress.com/518/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grapefruitgames.wordpress.com/518/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grapefruitgames.wordpress.com/518/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grapefruitgames.wordpress.com/518/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grapefruitgames.wordpress.com/518/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grapefruitgames.wordpress.com/518/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grapefruitgames.wordpress.com/518/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grapefruitgames.wordpress.com/518/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grapefruitgames.wordpress.com/518/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grapefruitgames.wordpress.com/518/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grapefruitgames.wordpress.com/518/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grapefruitgames.wordpress.com/518/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grapefruitgames.com&#038;blog=7795022&#038;post=518&#038;subd=grapefruitgames&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grapefruitgames.com/2012/03/28/unigui-now-available-in-the-unity-asset-store/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">EddieC</media:title>
		</media:content>

		<media:content url="http://grapefruitgames.files.wordpress.com/2012/03/mainpicblog-e1332886104689.png" medium="image">
			<media:title type="html">UniGUI</media:title>
		</media:content>

		<media:content url="http://grapefruitgames.files.wordpress.com/2012/03/uniguiscreenshot1.png" medium="image">
			<media:title type="html">uniGUIScreenshot1</media:title>
		</media:content>
	</item>
		<item>
		<title>InputVCR &#8211; Make recording/replaying actions in Unity a bit easier</title>
		<link>http://grapefruitgames.com/2012/03/19/inputvcr-make-recordingreplaying-actions-in-unity-a-bit-easier/</link>
		<comments>http://grapefruitgames.com/2012/03/19/inputvcr-make-recordingreplaying-actions-in-unity-a-bit-easier/#comments</comments>
		<pubDate>Mon, 19 Mar 2012 04:53:49 +0000</pubDate>
		<dc:creator>Eddie Cameron</dc:creator>
				<category><![CDATA[__________________]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[inputvcr]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[unity]]></category>

		<guid isPermaLink="false">http://grapefruitgames.com/?p=513</guid>
		<description><![CDATA[One of my current projects, needed the ability to record player input, then play it back on an object. This is something I&#8217;ve had to do several times already. In Muckraker it was how you could &#8216;film&#8217; something. Rather than record all the changing variables on an object/character (position, rotation, whether they are firing&#8230;) you can [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grapefruitgames.com&#038;blog=7795022&#038;post=513&#038;subd=grapefruitgames&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One of my <a title="Wha’ Happen?" href="http://grapefruitgames.com/2012/03/07/wha-happen/">current projects</a>, needed the ability to record player input, then play it back on an object. This is something I&#8217;ve had to do several times already. In <a title="ENFORCED HIATUS" href="http://grapefruitgames.com/2011/08/07/enforced-hiatus/">Muckraker</a> it was how you could &#8216;film&#8217; something. Rather than record all the changing variables on an object/character (position, rotation, whether they are firing&#8230;) you can in most cases just record what the player does. When you play back this input, the object will do the same things and act the same way. (keep in mind that external inputs, like physics, can make the object drift off course after a while, but this can usually be minimised). Even so, keeping track of inputs and playing stuff back without &#8216;live&#8217; input getting in the way can be a headache.</p>
<p>&#8220;There&#8217;s got to be an easier way!&#8221; (you may say)<br />
[<strong>UPDATE:</strong> Example project now available in the <a href="http://u3d.as/content/eddie-cameron/input-vcr/2Mx">asset store</a>. Or check out the <a href="http://dl.dropbox.com/u/1156317/UniGUI_Web/InputVCR/InputVCR.html">example scene</a>]</p>
<p><a href="http://www.ccc.commnet.edu/media/classroomhelp/images/DSCN3085-vcrcontrols-sm.jpg"><img class="aligncenter" src="http://www.ccc.commnet.edu/media/classroomhelp/images/DSCN3085-vcrcontrols-sm.jpg" alt="From a site called &quot;Classrooms of the Future&quot; !?!?" width="300" height="114" /></a></p>
<p><span id="more-513"></span>There sure is! <a href="https://github.com/EddieCameron/InputVCR">InputVCR</a>, is a script you can put on any gameobject, and by simply changing the mode (passthru/record/playback) you can switch between live and recorded input. You just need to change any references to &#8220;Input&#8221; to point to an InputVCR component, otherwise your carefully set up input scripts don&#8217;t even have to know if input is live or not.</p>
<p>It works pretty well so far, but let me know if you come across any bugs. I might add some easier way to add position/rotation &#8220;keyframes&#8221; to make sure that objects don&#8217;t get too far off track, as well as a better way to store recorded input (at the moment it only stores them in local strings). I also might upload an example package to the Unity Asset store in a few days, so look out for that if you are having trouble.</p>
<p>Grab it from GitHub <a href="https://github.com/EddieCameron/InputVCR">here</a> and play around with it!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grapefruitgames.wordpress.com/513/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grapefruitgames.wordpress.com/513/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grapefruitgames.wordpress.com/513/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grapefruitgames.wordpress.com/513/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grapefruitgames.wordpress.com/513/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grapefruitgames.wordpress.com/513/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grapefruitgames.wordpress.com/513/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grapefruitgames.wordpress.com/513/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grapefruitgames.wordpress.com/513/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grapefruitgames.wordpress.com/513/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grapefruitgames.wordpress.com/513/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grapefruitgames.wordpress.com/513/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grapefruitgames.wordpress.com/513/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grapefruitgames.wordpress.com/513/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grapefruitgames.com&#038;blog=7795022&#038;post=513&#038;subd=grapefruitgames&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grapefruitgames.com/2012/03/19/inputvcr-make-recordingreplaying-actions-in-unity-a-bit-easier/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">EddieC</media:title>
		</media:content>

		<media:content url="http://www.ccc.commnet.edu/media/classroomhelp/images/DSCN3085-vcrcontrols-sm.jpg" medium="image">
			<media:title type="html">From a site called &#34;Classrooms of the Future&#34; !?!?</media:title>
		</media:content>
	</item>
		<item>
		<title>Wha&#8217; Happen?</title>
		<link>http://grapefruitgames.com/2012/03/07/wha-happen/</link>
		<comments>http://grapefruitgames.com/2012/03/07/wha-happen/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 17:20:13 +0000</pubDate>
		<dc:creator>Eddie Cameron</dc:creator>
				<category><![CDATA[__________________]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Stuff]]></category>
		<category><![CDATA[unity]]></category>

		<guid isPermaLink="false">http://grapefruitgames.com/?p=499</guid>
		<description><![CDATA[So, I&#8217;m spending my last few days in the US at GDC. What have I done, and what mischief have I got planned for the near future? For the 2012 GDC Pirate Kart, a collection of short-to-make games (975 as of writing) available to be played at GDC. I made Be A Cat, where you chase [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grapefruitgames.com&#038;blog=7795022&#038;post=499&#038;subd=grapefruitgames&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:center;"><img class="aligncenter size-full wp-image-505" title="Be A Cat" src="http://grapefruitgames.files.wordpress.com/2012/03/screen-shot-2012-02-29-at-5-25-58-pm.png?w=580" alt=""   /><span id="more-499"></span></p>
<p style="text-align:center;"><a href="http://grapefruitgames.files.wordpress.com/2012/03/screen-shot-2012-03-05-at-2-32-30-am.png"><img class="aligncenter size-full wp-image-504" title="The Official Game of the MTA" src="http://grapefruitgames.files.wordpress.com/2012/03/screen-shot-2012-03-05-at-2-32-30-am.png?w=580" alt=""   /></a></p>
<p>So, I&#8217;m spending my last few days in the US at GDC. What have I done, and what mischief have I got planned for the near future? For the <a href="http://www.piratekart.com/">2012 GDC Pirate Kart</a>, a collection of short-to-make games (975 as of writing) available to be played at GDC. I made <strong><a href="http://www.glorioustrainwrecks.com/node/3032">Be A Cat</a></strong>, where you chase a laser pointer, and <strong><a href="http://www.glorioustrainwrecks.com/node/3147">The Official Game of the MTA</a></strong>, where you stop trains from crashing and people dying. Try them out?</p>
<p><a href="http://grapefruitgames.files.wordpress.com/2012/02/celestio-menu-e1329256193317.png"><img class="aligncenter size-full wp-image-481" title="Celestio-Menu" src="http://grapefruitgames.files.wordpress.com/2012/02/celestio-menu-e1329256193317.png?w=580" alt=""   /></a></p>
<p>I&#8217;m currently putting the final touches on<strong> Celestio!</strong>, a game Robert Yang and I started for the last <a href="superfriendshipclub.com">SuperFriendshipClub</a> Pageant (theme: Universe). As usual, we didn&#8217;t really put enough time into it, so missed the deadline. It&#8217;s a renaissance naval combat game, single/multiplayer. It&#8217;ll be free online and, as an experiment, on the iPad for 99c. Should be done by the end of the month.</p>
<p>Also by the end of this month I&#8217;ll be finishing up <strong>UniGUI</strong>, an easy to se set of GUI elements for Unity. They&#8217;re cross-platform, easy to customize, and will make things like a touch scrolling menu much simpler.</p>
<p>I plan on polishing up <strong>Streamer</strong>, my .Net/Unity Twitter streaming API as well. Maybe I&#8217;ll end up making a game using it too. <a href="https://github.com/EddieCameron/Streamer">Here it is</a> on Github if you&#8217;d like to use/improve it.</p>
<p><a href="http://grapefruitgames.files.wordpress.com/2011/10/screen-shot-2011-10-18-at-3-11-57-pm.png"><img class="aligncenter size-full wp-image-423" title="???" src="http://grapefruitgames.files.wordpress.com/2011/10/screen-shot-2011-10-18-at-3-11-57-pm.png?w=580" alt="points if you recognise this..."   /></a></p>
<p><a href="http://grapefruitgames.files.wordpress.com/2012/03/screen-shot-2012-03-06-at-9-31-51-am.png"><img class="aligncenter size-full wp-image-500" title="Fever Dream" src="http://grapefruitgames.files.wordpress.com/2012/03/screen-shot-2012-03-06-at-9-31-51-am.png?w=580" alt=""   /></a><br />
These two, <strong>[redacted]</strong>, and <strong>[redacted]</strong>, are games I&#8217;ve been mulling over for a while, but should actually have time to sit down and work towards in the next couple months. Maybe they&#8217;ll be something?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grapefruitgames.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grapefruitgames.wordpress.com/499/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grapefruitgames.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grapefruitgames.wordpress.com/499/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grapefruitgames.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grapefruitgames.wordpress.com/499/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grapefruitgames.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grapefruitgames.wordpress.com/499/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grapefruitgames.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grapefruitgames.wordpress.com/499/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grapefruitgames.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grapefruitgames.wordpress.com/499/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grapefruitgames.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grapefruitgames.wordpress.com/499/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grapefruitgames.com&#038;blog=7795022&#038;post=499&#038;subd=grapefruitgames&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grapefruitgames.com/2012/03/07/wha-happen/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">EddieC</media:title>
		</media:content>

		<media:content url="http://grapefruitgames.files.wordpress.com/2012/03/screen-shot-2012-02-29-at-5-25-58-pm.png" medium="image">
			<media:title type="html">Be A Cat</media:title>
		</media:content>

		<media:content url="http://grapefruitgames.files.wordpress.com/2012/03/screen-shot-2012-03-05-at-2-32-30-am.png" medium="image">
			<media:title type="html">The Official Game of the MTA</media:title>
		</media:content>

		<media:content url="http://grapefruitgames.files.wordpress.com/2012/02/celestio-menu-e1329256193317.png" medium="image">
			<media:title type="html">Celestio-Menu</media:title>
		</media:content>

		<media:content url="http://grapefruitgames.files.wordpress.com/2011/10/screen-shot-2011-10-18-at-3-11-57-pm.png" medium="image">
			<media:title type="html">???</media:title>
		</media:content>

		<media:content url="http://grapefruitgames.files.wordpress.com/2012/03/screen-shot-2012-03-06-at-9-31-51-am.png" medium="image">
			<media:title type="html">Fever Dream</media:title>
		</media:content>
	</item>
		<item>
		<title>Streamer &#8211; .Net / Unity access to the Twitter Streaming API</title>
		<link>http://grapefruitgames.com/2012/02/25/streamer-net-unity-access-to-the-twitter-streaming-api/</link>
		<comments>http://grapefruitgames.com/2012/02/25/streamer-net-unity-access-to-the-twitter-streaming-api/#comments</comments>
		<pubDate>Sat, 25 Feb 2012 23:39:58 +0000</pubDate>
		<dc:creator>Eddie Cameron</dc:creator>
				<category><![CDATA[__________________]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[streamer]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[unity]]></category>

		<guid isPermaLink="false">http://grapefruitgames.com/?p=483</guid>
		<description><![CDATA[I&#8217;ve been messing around with the streaming API for Twitter, where you can grab filtered, realtime tweets. Do I want to use this in a game? Yes. Do I know what kind of game would it would be useful for? No. EDIT: Now on GitHub for less painful use While I figure that out though, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grapefruitgames.com&#038;blog=7795022&#038;post=483&#038;subd=grapefruitgames&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been messing around with the streaming API for Twitter, where you can grab filtered, realtime tweets. Do I want to use this in a game? Yes. Do I know what kind of game would it would be useful for? No.</p>
<p>EDIT: <a href="https://github.com/EddieCameron/Streamer">Now on GitHub for less painful use</a></p>
<p><a href="http://grapefruitgames.files.wordpress.com/2012/02/screen-shot-2012-02-25-at-6-32-07-pm.png"><img class="aligncenter size-full wp-image-493" title="Globe01" src="http://grapefruitgames.files.wordpress.com/2012/02/screen-shot-2012-02-25-at-6-32-07-pm.png?w=580" alt=""   /><span id="more-483"></span></a></p>
<p>While I figure that out though, I thought I&#8217;d release my library into the wild. I couldn&#8217;t find any decent .net libraries for Twitter streaming, or Unity It&#8217;s a little unfinished, but it does allow you to filter the stream by location or certain words, and parses the JSON quickly into a much easier to use form. You can connect with OAuth if you register your app on dev.twitter.com, or just provide your twitter login info. At some point I&#8217;ll expand it to give access to the general API so you post/receive tweets on individual accounts or search the history and so forth.</p>
<p>Here&#8217;s what I&#8217;ve used it for so far, you can look at where tweets are coming from (or where they&#8217;re not coming from) and see what tag is trending in each location. Download, run for a while, and see what happens! (sorry, no webplayer due to Unity security restrictions)</p>
<p>- <a href="http://dl.dropbox.com/u/1156317/TwitterGlobe/TwitterGlobe_OSX.zip">OSX download</a></p>
<p>- <a href="http://dl.dropbox.com/u/1156317/TwitterGlobe/TwitterGlobe_Win.zip">Win download</a></p>
<p>Anyway, here are the main couple of classes:</p>
<p>- TwitterAccess.cs provides all the connectivity. Make a new TwitterAccess object, assign some query parameters(say, filter all tweets with the word &#8220;Bieber&#8221; in them), then connect. As tweets arrive they&#8217;ll be put in the Tweets queue for you to have your way with them. At the top is the stuff you&#8217;ll need to fill out if you want to use OAuth, ie, your consumer token/secret and, for now, your own account token/secret (until I set it up to use OAuth properly). You can instead fill out your username/password and connect with basic auth.</p>
<p><pre class="brush: csharp; collapse: true; light: false; toolbar: true;">

/*

* TwitterAccess.cs - Eddie Cameron

* -------

* Controls access to the Twitter API for your .Net app

*

* Make sure the OAuth tokens/secrets are set up, or provide your username and password

*

* On a new TwitterAccess object, provide some QueryParameters, connect, and any matching tweets will show up in the &quot;tweets&quot; queue

* -------

*/

using System;

using System.Net;

using System.IO;

using System.Threading;

using System.Text;

using System.Collections.Generic;

#if FOR_UNITY

using UnityEngine;

#endif

public class TwitterAccess

{

private const string streamFilterURL = &quot;https://stream.twitter.com/1/statuses/filter.json&quot;;

private const string streamSampleURL = &quot;https://stream.twitter.com/1/statuses/sample.json&quot;;

private string consumerKey = &quot;YOUR_CONSUMER_KEY&quot;; // register on dev.twitter.com to get

private string consumerSecret = &quot;YOUR_CONSUMER_SECRET&quot;; // these for your app

private const string signatureMethod = &quot;HMAC-SHA1&quot;;

private const string version = &quot;1.0&quot;;

public bool isAuthed;

private string token = &quot;YOUR_TOKEN&quot;; // generate an access token for yourself

private string tokenSecret = &quot;YOUR_TOKEN_SECRET&quot;; // at dev.twitter.com

// for the streaming API, you can use basic authentication...for now...

private string username;

private string password;

public enum ApiMethod{ StreamFilter, StreamSample };

public ApiMethod apiMethod = TwitterAccess.ApiMethod.StreamFilter;

private Dictionary&lt;string, TwitterQuery&gt; queries;

private Queue&lt;string&gt; tweetStringQueue; // this holds tweets as they arrive

private int maxInQueue = 2048;

private DecodeStream tweetParser;

public Queue&lt;Tweet&gt; tweets; // this holds processed tweets

// network backoff times

int networkErrors = 0;

int httpRetryTime = 10000;

// information about the API connection

private HttpWebResponse currentResponse;

private Thread currentConnection;

private StreamReader currentReader;

private bool connectionIsOpen = false;

private Thread connectingThread;

private WebRequest connectingRequest;

// URL encode strings, since Twitter doesn't like .Net URL encoding

private static string UrlEncode( string toEncode )

{

StringBuilder toRet = new StringBuilder();

string acceptedChars = &quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~&quot;;

foreach (char c in toEncode )

{

if ( acceptedChars.IndexOf( c ) != -1 )

toRet.Append( c );

else

toRet.Append('%' + string.Format( &quot;{0:X2}&quot;, (int)c ) );

}

return toRet.ToString();

}

public TwitterAccess()

{

tweetStringQueue = new Queue&lt;string&gt;();

queries = new Dictionary&lt;string,TwitterQuery&gt;();

isAuthed = token != &quot;&quot; &amp;&amp; tokenSecret != &quot;&quot;;

tweetParser = new DecodeStream( tweetStringQueue );

tweets = tweetParser.tweets;

tweetParser.isParsingPaused = true;

}

// To add: user auth via OAuth

// Add and remove parameters (to add more)

public void AddQueryParameter( TwitterQuery query )

{

if ( queries.ContainsKey( query.GetKey() ) )

queries[query.GetKey()].MergeQuery( query );

else

queries.Add( query.GetKey(), query );

}

public void RemoveQueryParameter( TwitterQuery query )

{

if ( queries.ContainsKey( query.GetKey() ) )

{

TwitterQuery inQueries = queries[query.GetKey() ];

inQueries.RemoveQuery ( query );

if ( inQueries.GetParameter() == &quot;&quot; )

queries.Remove( query.GetKey() );

}

}

// For the streaming API, you can provide a user/password instead of OAuthing

public void BasicAuthUserPassword( string username, string password )

{

this.username = username;

this.password = password;

}

// Connect with already given parameters

public void Connect( bool useBasicAuth )

{

// if attempting connection, cancel

if ( connectingThread != null )

connectingThread.Abort ();

// translate parameters to string values

string[,] parameterStrings = new string[queries.Count,2];

StringBuilder postString = new StringBuilder();

int i = 0;

foreach ( TwitterQuery query in queries.Values )

{

string key = UrlEncode( query.GetKey() );

string parameter = UrlEncode ( query.GetParameter() );

parameterStrings[i,0] = key;

parameterStrings[i,1] = parameter;

i++;

postString.Append ( key + &quot;=&quot; + parameter + &quot;&amp;&quot; );

}

postString = postString.Remove ( postString.Length - 1, 1 );

// make and authorise webrequest

connectingRequest = WebRequest.Create( streamFilterURL );

if ( useBasicAuth )

connectingRequest.Credentials = new NetworkCredential( username, password );

else if ( isAuthed )

connectingRequest.Headers.Add ( HttpRequestHeader.Authorization, MakeAuthorisation( parameterStrings ) );

else

{

#if FOR_UNITY

Debug.Log ( &quot;Not yet authorised via OAuth, provide user/password or access tokens&quot; );

#else

Console.WriteLine ( &quot;Not yet authorised via OAuth, provide user/password or access tokens&quot; );

#endif

return;

}

// start connection thread

ParameterizedThreadStart newThreadStart = new ParameterizedThreadStart( StartStream );

connectingThread = new Thread( newThreadStart );

connectingThread.Start ( postString.ToString () );

}

// disconnect streams if there are any

public void Disconnect()

{

if ( connectionIsOpen )

{

currentResponse.Close ();

currentReader.Close ();

currentConnection.Abort();

}

if ( connectingThread != null )

connectingThread.Abort ();

tweetParser.isParsingPaused = true;

}

private void StartStream( object postString )

{

Console.WriteLine( &quot;Starting connection to &quot; + connectingRequest.RequestUri );

// try to get stream

HttpWebResponse newResponse = GetNewConnection ( (string)postString );

Console.WriteLine( &quot;Have response. Starting stream&quot; );

// disconnect old thread if there was one, streaming API only allows one connection per user

if ( connectionIsOpen )

{

currentConnection.Abort();

currentReader.Close ();

currentResponse.Close ();

}

// save current connection

connectionIsOpen = true;

currentConnection = Thread.CurrentThread;

currentResponse = newResponse;

while ( true )

{

currentReader = new StreamReader( newResponse.GetResponseStream(), UTF8Encoding.UTF8 );

// start reading

ReadFromCurrentResponseStream ();

currentResponse.Close ();

// for streaming, restart when response ends

#if FOR_UNITY

Debug.Log ( &quot;Response ended, trying to reconnect in &quot; + ( networkErrors * 250 / 1000f ).ToString ( &quot;F2&quot; )  );

#else

Console.WriteLine ( &quot;Response ended, trying to reconnect in &quot; + ( networkErrors * 250 / 1000f ).ToString ( &quot;F2&quot; )  );

#endif

Thread.Sleep ( networkErrors * 250 );

networkErrors++;

currentResponse = GetNewConnection ( (string)postString );

}

}

// Read from response and add to queue

private void ReadFromCurrentResponseStream()

{

if ( currentReader == null )

return;

tweetParser.isParsingPaused = false;

// read new stream into tweet queue

while ( !currentReader.EndOfStream )

{

string line = currentReader.ReadLine ();

if ( line == &quot;\n&quot; ) // ignore keepalive statuses

continue;

tweetStringQueue.Enqueue( line );

if ( tweetStringQueue.Count &gt; maxInQueue )

tweetStringQueue.Dequeue();

}

}

// connect to API and get response object

private HttpWebResponse GetNewConnection( string postString )

{

HttpWebResponse response = null;

// keep trying until successful

while ( response == null )

{

try

{

// add parameters to webrequest

byte[] postData = UTF8Encoding.UTF8.GetBytes ( (string)postString );

connectingRequest.Method = &quot;POST&quot;;

connectingRequest.ContentLength = postData.Length;

connectingRequest.ContentType = &quot;application/x-www-form-urlencoded&quot;;

Stream contentStream = connectingRequest.GetRequestStream();

contentStream.Write ( postData, 0, postData.Length );

contentStream.Close ();

response = (HttpWebResponse)connectingRequest.GetResponse ();

}

catch ( WebException e )

{

int waitTime;

if ( e.Status == WebExceptionStatus.ProtocolError ) // http level error

{

HttpWebResponse errorResponse = (HttpWebResponse)e.Response;

#if FOR_UNITY

Debug.Log (  errorResponse.StatusDescription + &quot;. Trying again in &quot; + ( httpRetryTime / 1000f ).ToString ( &quot;F2&quot; ) );

#else

Console.WriteLine (  errorResponse.StatusDescription + &quot;. Trying again in &quot; + ( httpRetryTime / 1000f ).ToString ( &quot;F2&quot; )  );

#endif

waitTime = httpRetryTime;

httpRetryTime *= 2;

}

else // network level error

{

#if FOR_UNITY

Debug.Log (  e.Message + &quot;.Trying again in &quot; + ( networkErrors * 250 / 1000f ).ToString ( &quot;F2&quot; ) );

#else

Console.WriteLine ( e.Message + &quot;.Trying again in &quot; + ( networkErrors * 250 / 1000f ).ToString ( &quot;F2&quot; ) );

#endif

waitTime = networkErrors * 250;

networkErrors++;

}

Thread.Sleep ( waitTime );

}

}

return response;

}

private string MakeAuthorisation( string[,] queryParameters )

{

// make nOnce

StringBuilder no = new StringBuilder( 32 );

string alphanumeric = &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890&quot;;

System.Random random = new System.Random();

for ( int i = 0; i &lt; 32; i++ )

no.Append( alphanumeric[ random.Next ( alphanumeric.Length ) ] );

// set timestamp

string timeStamp = ( (int)( System.DateTime.UtcNow - new System.DateTime( 1970, 1, 1 ) ).TotalSeconds ).ToString();

// sort all the parameters to be signed

SortedDictionary&lt;string, string&gt; properties = new SortedDictionary&lt;string, string&gt;();

for( int i = 0; i &lt; queryParameters.GetLength( 0 ); i++ )

properties.Add ( queryParameters[i,0], queryParameters[i,1] );

properties.Add ( UrlEncode ( &quot;oauth_consumer_key&quot; ), UrlEncode( consumerKey ) );

properties.Add ( UrlEncode( &quot;oauth_nonce&quot; ), no.ToString () );

properties.Add ( UrlEncode( &quot;oauth_signature_method&quot; ), UrlEncode( signatureMethod ) );

properties.Add ( UrlEncode( &quot;oauth_timestamp&quot; ), timeStamp );

properties.Add ( &quot;oauth_token&quot;, UrlEncode ( token ) );

properties.Add ( &quot;oauth_version&quot;, UrlEncode ( version ) );

// make parameter string

StringBuilder parameters = new StringBuilder();

foreach( KeyValuePair&lt;string, string&gt; kv in properties )

parameters.Append ( kv.Key + &quot;=&quot; +  kv.Value + &quot;&amp;&quot; );

parameters.Remove ( parameters.Length - 1, 1 );

string postParameters =  &quot;POST&amp;&quot; + UrlEncode ( streamFilterURL ) + &quot;&amp;&quot; + UrlEncode ( parameters.ToString () );

// sign parameter string

byte[] sigBase = UTF8Encoding.UTF8.GetBytes (postParameters);

MemoryStream ms = new MemoryStream();

ms.Write (sigBase, 0, sigBase.Length );

byte[] key = UTF8Encoding.UTF8.GetBytes ( UrlEncode ( consumerSecret ) + &quot;&amp;&quot; + UrlEncode( tokenSecret ) );

System.Security.Cryptography.HMACSHA1 sha1 = new System.Security.Cryptography.HMACSHA1( key );

byte[] hashBytes = sha1.ComputeHash ( sigBase );

string signature = System.Convert.ToBase64String( hashBytes );

// construct auth header

string header = &quot;OAuth &quot; + &quot;oauth_consumer_key=\&quot;&quot; + UrlEncode ( consumerKey ) + &quot;\&quot;,oauth_nonce=\&quot;&quot; + UrlEncode ( no.ToString() )

+ &quot;\&quot;,oauth_signature=\&quot;&quot; + UrlEncode ( signature ) + &quot;\&quot;,oauth_signature_method=\&quot;&quot; + UrlEncode ( signatureMethod )

+ &quot;\&quot;,oauth_timestamp=\&quot;&quot; + UrlEncode ( timeStamp ) + &quot;\&quot;,oauth_token=\&quot;&quot; + UrlEncode ( token )

+ &quot;\&quot;,oauth_version=\&quot;&quot; + UrlEncode ( version ) + &quot;\&quot;&quot;;

return header;

}

}

</pre></p>
<p>- TwitterQuery.cs Base class for all Twitter queries. Inherit from this class to write your own</p>
<p><pre class="brush: csharp; collapse: true; light: false; toolbar: true;">&lt;/pre&gt;
/* TwitterrQuery.cs - Eddie Cameron

* ------

* Base for all Twitter API query parameters

* ------

*/

using System.Text;

using System.Collections.Generic;

public abstract class TwitterQuery

{

public abstract string GetKey(); // twitter URL name for this query

public abstract string GetParameter(); // to return URL string with parameters

public abstract void MergeQuery( TwitterQuery toMerge ); // combine toMerge parameters into this query

public abstract void RemoveQuery( TwitterQuery toRemove ); // remove toRemove parameters from this query if they are there

}

</pre></p>
<p>- QueryLocation.cs</p>
<p>For adding bounding-box location queries</p>
<p><pre class="brush: csharp; collapse: true; light: false; toolbar: true;">

/* QueryLocations.cs - Eddie Cameron

* ------

* Base for all queries to filter by location (Twitter location parameter)

* ------

*/

using System;

using System.Text;

using System.Collections.Generic;

// location query - specified by bounding boxes to return results from

public class QueryLocations : TwitterQuery

{

private List&lt;Coordinates[]&gt; locationsToQuery;

public QueryLocations()

{

locationsToQuery = new List&lt;Coordinates[]&gt;();

}

public QueryLocations( Coordinates southwestCorner, Coordinates northeastCorner )

{

locationsToQuery = new List&lt;Coordinates[]&gt;();

AddLocationBoundingBox( southwestCorner, northeastCorner );

}

public bool AddLocationBoundingBox( Coordinates southwestCorner, Coordinates northeastCorner )

{

// Check is a valid box

if ( northeastCorner.lng &lt;= southwestCorner.lng )

return false;

if ( northeastCorner.lat &lt;= southwestCorner.lat )

return false;

locationsToQuery.Add ( new Coordinates[]{ southwestCorner, northeastCorner } );

return true;

}

public List&lt;Coordinates[]&gt; GetLocations()

{

return locationsToQuery;

}

public override string GetKey()

{

return &quot;locations&quot;;

}

public override string GetParameter()

{

if ( locationsToQuery.Count == 0 )

return &quot;&quot;;

StringBuilder sb = new StringBuilder();

foreach( Coordinates[] locationBox in locationsToQuery )

{

foreach( Coordinates coord in locationBox )

sb.Append ( coord.lng.ToString ( &quot;F1&quot; ) + &quot;,&quot; + coord.lat.ToString( &quot;F1&quot; ) + &quot;,&quot; );

}

sb.Remove ( sb.Length - 1, 1 );

return sb.ToString ();

}

public override void MergeQuery (TwitterQuery toMerge)

{

if ( toMerge is QueryLocations )

{

locationsToQuery.AddRange( ((QueryLocations)toMerge ).GetLocations() );

}

}

public override void RemoveQuery (TwitterQuery toRemove)

{

if ( toRemove is QueryLocations )

{

foreach( Coordinates[] coord in ((QueryLocations)toRemove ).GetLocations() )

locationsToQuery.Remove( coord );

}

}

}

public struct Coordinates

{

private float _lng;

public float lng

{

get { return _lng; }

set {

if ( value &lt; -180 )

_lng = -180;

else if ( value &gt; 180 )

_lng = 180f;

}

}

private float _lat;

public float lat

{

get { return _lat; }

set {

if ( value &lt; -90 )

_lat = -90;

else if ( value &gt; 90 )

_lat = 90;

}

}

public Coordinates( float lng, float lat )

{

this._lng = lng;

this._lat = lat;

}

}

</pre></p>
<p>- QueryTrack.cs</p>
<p>For adding filters based on strings (Twitter track parameter)</p>
<div> <pre class="brush: csharp; collapse: true; light: false; toolbar: true;">&lt;/div&gt;
&lt;div&gt;

using System.Text;

using System.Collections.Generic;

&amp;nbsp;

public class QueryTrack : TwitterQuery

{

private List&lt;string&gt; stringsToTrack;

&amp;nbsp;

public QueryTrack()

{

stringsToTrack = new List&lt;string&gt;();

}

&amp;nbsp;

public QueryTrack( string withTag )

{

stringsToTrack = new List&lt;string&gt;();

stringsToTrack.Add ( withTag );

}

&amp;nbsp;

public List&lt;string&gt; GetTrackStrings()

{

return stringsToTrack;

}

&amp;nbsp;

public bool AddTrack( string track )

{

if ( track.ToCharArray().Length &gt; 60 )

return false;

else

stringsToTrack.Add( track );

&amp;nbsp;

return true;

}

&amp;nbsp;

public override string GetKey()

{

return &quot;track&quot;;

}

&amp;nbsp;

public override string GetParameter()

{

StringBuilder sb = new StringBuilder();

foreach( string s in stringsToTrack )

sb.Append( s + &quot;,&quot; );

sb.Remove( sb.Length - 1, 1 );

return sb.ToString();

}

&amp;nbsp;

public override void MergeQuery( TwitterQuery toMerge )

{

if ( toMerge is QueryTrack )

stringsToTrack.AddRange( ( (QueryTrack)toMerge ).GetTrackStrings() );

}

&amp;nbsp;

public override void RemoveQuery( TwitterQuery toRemove )

{

if ( toRemove is QueryTrack )

{

foreach( string t in ((QueryTrack)toRemove ).GetTrackStrings() )

stringsToTrack.Remove( t );

}

}

}

&amp;nbsp;

</pre></p>
<p>- DecodeTweets.cs</p>
<p>TwitterAccess will create this, pass it the JSON strings direct from the Twitter feed, and get back Tweet objects</p>
<p><pre class="brush: csharp; collapse: true; light: false; toolbar: true;">&lt;/pre&gt;
/* DecodeStream.cs - Eddie Cameron

* ------

* Decodes JSON objects into tweets

* ------

*/

using System;

using System.Threading;

using System.Collections;

using System.Collections.Generic;

&amp;nbsp;

#if FOR_UNITY

using UnityEngine;

#endif

&amp;nbsp;

public class DecodeStream

{

private Queue&lt;string&gt; tweetStringQueue; // ref to raw Twitter json

&amp;nbsp;

private Thread parseThread;

public bool isParsingPaused;

&amp;nbsp;

public Queue&lt;Tweet&gt; tweets; // access this to get tweets

public double curLimit;

&amp;nbsp;

// set up with reference to direct queue from TwitterAccess

public DecodeStream( Queue&lt;string&gt; tweetStringQueue )

{

this.tweetStringQueue = tweetStringQueue;

tweets = new Queue&lt;Tweet&gt;();

&amp;nbsp;

parseThread = new Thread( new ThreadStart( Parse ) );

parseThread.Start ();

}

&amp;nbsp;

// stop any JSON procesing

public void Stop()

{

if ( parseThread != null )

parseThread.Abort ();

}

&amp;nbsp;

// process all tweets in tweetStringQueue

void Parse()

{

while ( true )

{

while ( !isParsingPaused &amp;&amp; tweetStringQueue.Count &gt; 0 )

{

string newTweetStr = tweetStringQueue.Dequeue();

&amp;nbsp;

try

{

JSONObject newObj = new JSONObject( newTweetStr );

&amp;nbsp;

if ( newObj.HasProperty( &quot;text&quot; ) )

{

Tweet newTweet = new Tweet( newObj );

tweets.Enqueue ( newTweet );

}

else if ( newObj.HasProperty ( &quot;limit&quot; ) )

curLimit = newObj.GetProperty( &quot;limit&quot; ).GetProperty ( &quot;track&quot; ).n;

else

Console.WriteLine ( &quot;Unrecognised (valid) JSON object in stream&quot; );

}

catch

{

Console.WriteLine( &quot;Invalid object in json string&quot; );

}

}

&amp;nbsp;

Thread.Sleep ( 100 );

}

}

}

&amp;nbsp;

// To be expanded as needed

public class Tweet

{

public string status = &quot;&quot;;

&amp;nbsp;

private JSONObject user;

public string userName = &quot;&quot;;

&amp;nbsp;

private JSONObject location;

public Coordinates[] coords; // single entry means point, multiple means bounding box

&amp;nbsp;

private JSONObject entities;

public string[] tags = new string[1];

&amp;nbsp;

// Make tweet object from JSON

public Tweet( JSONObject jsonTweet )

{

if ( jsonTweet.type != JSONObject.Type.OBJECT )

throw new System.Exception( &quot;Non-valid JSON object&quot; );

&amp;nbsp;

status = jsonTweet.GetProperty ( &quot;text&quot; ).str;

&amp;nbsp;

user = jsonTweet.GetProperty ( &quot;user&quot; );

&amp;nbsp;

JSONObject name = user.GetProperty ( &quot;screen_name&quot; );

userName = name.str;

&amp;nbsp;

location = jsonTweet.GetProperty( &quot;geo&quot; );

if ( location.type == JSONObject.Type.NULL )

location = jsonTweet.GetProperty( &quot;coordinates&quot; );

// to add parsing for 'place' tagged tweets

&amp;nbsp;

if ( location.type != JSONObject.Type.NULL )

coords = GetLocationData( location );

&amp;nbsp;

entities = jsonTweet.GetProperty ( &quot;entities&quot; );

JSONObject hashtags = entities.GetProperty( &quot;hashtags&quot; );

if ( hashtags.type != JSONObject.Type.NULL &amp;&amp; hashtags.props.Count &gt; 0 )

{

tags = new string[ hashtags.props.Count ];

for ( int i = 0; i &lt; tags.Length; i++ )

tags[i] = hashtags.props[i].GetProperty ( &quot;text&quot; ).str;

}

else

tags = new string [0];

}

&amp;nbsp;

// extract coords from location object

public static Coordinates[] GetLocationData( JSONObject locationObj )

{

try

{

if ( locationObj.HasProperty( &quot;coordinates&quot; ) )

{

List&lt;JSONObject&gt; coords = locationObj.GetProperty ( &quot;coordinates&quot; ).props;

if ( coords.Count % 2 != 0 )

throw new System.Exception( &quot;Wrong coordinate setup?&quot; );

&amp;nbsp;

Coordinates[] toRet = new Coordinates[ coords.Count / 2 ];

for ( int i = 0; i &lt; coords.Count; i += 2 )

{

toRet[i] = new Coordinates( (float)coords[i+1].n, (float)coords[i].n );

}

return toRet;

}

&amp;nbsp;

throw new System.Exception( &quot;wrong geo type&quot; );

&amp;nbsp;

}  catch ( System.Exception e )

{

Console.WriteLine( &quot;Location error:&quot; + e.Message );

return new Coordinates[2];

}

}

}

&amp;nbsp;
&lt;pre&gt;

</pre></p>
<p>- JSONObject.cs</p>
<p>Parses JSON strings to structured objects, based on <a href="http://www.unifycommunity.com/wiki/index.php?title=Json">a script by Matt Schoen</a></p>
<p><pre class="brush: csharp; collapse: true; light: false; toolbar: true;">

#define FROMTWITTER

&amp;nbsp;

/* JSONObject.cs - Eddie Cameron

* ------

* A rather simple JSON string to object parser

* ------

* Based on JSONObject, Copyright Matt Schoen 2010, from http://www.unifycommunity.com/wiki/index.php?title=Json

* http://www.opensource.org/licenses/lgpl-2.1.php

* ------

*/

&amp;nbsp;

using System.Collections.Generic;

using System.IO;

using System;

&amp;nbsp;

public class JSONObject

{

const int MAX_DEPTH = 1000;

const string INFINITY = &quot;\&quot;INFINITY\&quot;&quot;;

const string NEGINFINITY = &quot;\&quot;NEGINFINITY\&quot;&quot;;

public enum Type { NULL, STRING, NUMBER, OBJECT, ARRAY, BOOL }

&amp;nbsp;

public Type type;

public bool b;

public double n;

public string str;

public List&lt;string&gt; keys;

public List&lt;JSONObject&gt; props;

&amp;nbsp;

public bool HasProperty( string prop )

{

return keys.Contains ( prop );

}

&amp;nbsp;

public JSONObject GetProperty( string prop )

{

if ( type == Type.OBJECT || type == Type.ARRAY )

{

int propInd = keys.IndexOf ( prop );

if ( propInd &gt;= 0 &amp;&amp; propInd &lt; props.Count )

return props[ propInd ];

}

&amp;nbsp;

return null;

}

&amp;nbsp;

public JSONObject( string str )

{

if ( str == &quot;&quot; )

{

type = Type.NULL;

return;

}

&amp;nbsp;

if( str.Length &gt; 0)

{

if ( string.Compare(str, &quot;true&quot;, true) == 0)

{

type = Type.BOOL;

b = true;

}

else if(string.Compare(str, &quot;false&quot;, true) == 0)

{

type = Type.BOOL;

b = false;

}

else if(str == &quot;null&quot;)

{

type = Type.NULL;

}

else if(str == INFINITY)

{

type = Type.NUMBER;

n = double.PositiveInfinity;

}

else if(str == NEGINFINITY)

{

type = Type.NUMBER;

n = double.NegativeInfinity;

}

else if(str[0] == '&quot;')

{

type = Type.STRING;

this.str = str.Substring(1, str.Length - 2);//.Replace( @&quot;\&quot;, &quot;&quot; );

}

else

{

try

{

// check for number type

n = System.Convert.ToDouble(str);

type = Type.NUMBER;

}

catch(System.FormatException)

{

int token_tmp = 0;

/*

* Checking for the following formatting (www.json.org)

* object - {&quot;field1&quot;:value,&quot;field2&quot;:value}

* array - [value,value,value]

* value - string   - &quot;string&quot;

*     - number - 0.0

*     - bool      - true -or- false

*     - null      - null

*/

switch(str[0])

{

case '{':

type = Type.OBJECT;

keys = new List&lt;string&gt;();

props = new List&lt;JSONObject&gt;();

break;

case '[':

type = Type.ARRAY;

props = new List&lt;JSONObject&gt;();

break;

default:

type = Type.NULL;

return;

}

&amp;nbsp;

int depth = 0;

bool openquote = false;

bool inProp = false;

for ( int i = 1; i &lt; str.Length; i++ )

{

#if !FROMTWITTER

// Twitter feeds may have these characters in their statuses

if(str[i] == '\\' || str[i] == '\t' || str[i] == '\n' || str[i] == '\r') {

i++;

continue;

}

#else

if ( str[i] == '\\' )

{

if ( str.Length &gt;= i &amp; str[i+1] == '\&quot;' )

{

i++;

continue;

}

}

#endif

&amp;nbsp;

if(str[i] == '&quot;')

openquote = !openquote;

else if( str[i] == '[' || str[i] == '{' )

depth++;

&amp;nbsp;

if(depth == 0 &amp;&amp; !openquote)

{

if( str[i] == ':' &amp;&amp; !inProp )

{

inProp = true;

try {

keys.Add( str.Substring( token_tmp + 2, i - token_tmp - 3));

} catch {  }

token_tmp = i;

}

if( str[i] == ',' )

{

inProp = false;

props.Add(new JSONObject(str.Substring(token_tmp + 1, i - token_tmp - 1)));

token_tmp = i;

}

if(str[i] == ']' || str[i] == '}')

{

if ( str[i - 1] != '[' &amp;&amp; str[i-1] != '{' )

props.Add(new JSONObject(str.Substring(token_tmp + 1, i - token_tmp - 1)));

}

}

&amp;nbsp;

if(str[i] == ']' || str[i] == '}')

depth--;

}

}

}

}

}

}

</pre></p>
<div>And that&#8217;s all you need! Here&#8217;s an example script to show you one way to use it:</div>
<div>(for .Net)</div>
<div><pre class="brush: csharp; collapse: true; light: false; toolbar: true;">&lt;/div&gt;
using System;

&amp;nbsp;

namespace Streamer

{

class MainClass

{

public static void Main ( string[] args )

{

// Create twitteraccess object

TwitterAccess access = new TwitterAccess();

&amp;nbsp;

// Get all tweets with a location tag

QueryLocations world = new QueryLocations( new Coordinates( -180f, -90f ), new Coordinates( 180f, 90f ) );

access.AddQueryParameter( world );

&amp;nbsp;

// and with the word &quot;bieber&quot; in them

access.AddQueryParameter( new QueryTrack( &quot;bieber&quot; ) );

&amp;nbsp;

access.Connect ( false );

&amp;nbsp;

while ( true )

{

if ( access.tweets.Count &gt; 0 )

{

Tweet newTweet = access.tweets.Dequeue();

Console.WriteLine( newTweet.userName  + &quot;: &quot; + newTweet.status );

}

}

}

}

}

&amp;nbsp;

&amp;nbsp;

</pre></p>
<p>(for Unity)</p>
<p><pre class="brush: csharp; collapse: true; light: false; toolbar: true;">

/* TwitterStream.cs - Eddie Cameron

* ------

* Example script to use Streamer

* ------

*/

&amp;nbsp;

using UnityEngine;

using System.Collections;

using System.Collections.Generic;

&amp;nbsp;

public class TwitterStream : MonoBehaviour

{

public static Queue&lt;Tweet&gt; tweetQueue;

&amp;nbsp;

private TwitterAccess twitterAccess;

&amp;nbsp;

void Awake()

{

tweetQueue = new Queue&lt;Tweet&gt;();

&amp;nbsp;

// Make new twitteraccess object

twitterAccess = new TwitterAccess();

tweetQueue = twitterAccess.tweets;

&amp;nbsp;

// add a query (in this case, any location tagged tweet)

QueryLocations allLocations = new QueryLocations( new Coordinates( -180, -90 ), new Coordinates( 180, 90 ) );

twitterAccess.AddQueryParameter( allLocations );

&amp;nbsp;

StartNewStream();

}

&amp;nbsp;

public void StartNewStream()

{

// connect using OAuth

twitterAccess.Connect ( false );

&amp;nbsp;

StartCoroutine ( PrintTweets() );

}

&amp;nbsp;

private IEnumerator PrintTweets()

{

while ( true )

{

// print tweets as they appear in the queue, one per frame

if ( tweetQueue != null &amp;&amp; tweetQueue.Count &gt; 0 )

Debug.Log ( &quot;Decoded tweet: &quot; + tweetQueue.Dequeue ().status );

&amp;nbsp;

yield return 0;

}

}

&amp;nbsp;

void OnApplicationQuit()

{

twitterAccess.Disconnect ();

}

}

</pre></p>
</div>
</div>
<div></div>
<div>I&#8217;ll put this up on GitHub soon (<a href="https://github.com/EddieCameron/Streamer">DONE!</a>), and update as I use it. Of course, in the meantime everyone is free to use and modify as they see fit. If you make a game out of it, I&#8217;d love to hear what you do, I&#8217;m sure there&#8217;s a whole bunch of really interesting game ideas involving the world&#8217;s collective realtime thoughts.</div>
<div><a href="http://grapefruitgames.files.wordpress.com/2012/02/screen-shot-2012-02-25-at-6-36-07-pm.png"><img class="aligncenter size-full wp-image-494" title="Globe02" src="http://grapefruitgames.files.wordpress.com/2012/02/screen-shot-2012-02-25-at-6-36-07-pm.png?w=580" alt=""   /></a></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grapefruitgames.wordpress.com/483/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grapefruitgames.wordpress.com/483/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grapefruitgames.wordpress.com/483/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grapefruitgames.wordpress.com/483/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grapefruitgames.wordpress.com/483/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grapefruitgames.wordpress.com/483/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grapefruitgames.wordpress.com/483/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grapefruitgames.wordpress.com/483/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grapefruitgames.wordpress.com/483/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grapefruitgames.wordpress.com/483/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grapefruitgames.wordpress.com/483/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grapefruitgames.wordpress.com/483/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grapefruitgames.wordpress.com/483/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grapefruitgames.wordpress.com/483/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grapefruitgames.com&#038;blog=7795022&#038;post=483&#038;subd=grapefruitgames&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grapefruitgames.com/2012/02/25/streamer-net-unity-access-to-the-twitter-streaming-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">EddieC</media:title>
		</media:content>

		<media:content url="http://grapefruitgames.files.wordpress.com/2012/02/screen-shot-2012-02-25-at-6-32-07-pm.png" medium="image">
			<media:title type="html">Globe01</media:title>
		</media:content>

		<media:content url="http://grapefruitgames.files.wordpress.com/2012/02/screen-shot-2012-02-25-at-6-36-07-pm.png" medium="image">
			<media:title type="html">Globe02</media:title>
		</media:content>
	</item>
		<item>
		<title>You&#8217;re So Vain</title>
		<link>http://grapefruitgames.com/2012/02/03/youre-so-vain/</link>
		<comments>http://grapefruitgames.com/2012/02/03/youre-so-vain/#comments</comments>
		<pubDate>Fri, 03 Feb 2012 17:54:52 +0000</pubDate>
		<dc:creator>Eddie Cameron</dc:creator>
				<category><![CDATA[__________________]]></category>
		<category><![CDATA[abstract]]></category>
		<category><![CDATA[altdevblogaday]]></category>
		<category><![CDATA[game community]]></category>
		<category><![CDATA[game design]]></category>
		<category><![CDATA[industry]]></category>
		<category><![CDATA[rant]]></category>
		<category><![CDATA[self-involved]]></category>

		<guid isPermaLink="false">http://grapefruitgames.com/?p=472</guid>
		<description><![CDATA[Games and gamers are a pretty self-involved bunch. We make games that are impossible to play without a couple years practice, games with communities that are hostile to &#8220;outsiders&#8221;, and games that talk, sometimes literally, about themselves. Are we still so insecure that we&#8217;re afraid to explore other fields or audiences? I touched on this [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grapefruitgames.com&#038;blog=7795022&#038;post=472&#038;subd=grapefruitgames&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Games and gamers are a pretty self-involved bunch. We make games that are impossible to play without a couple years practice, games with communities that are hostile to &#8220;outsiders&#8221;, and games that talk, sometimes literally, about themselves. Are we still so insecure that we&#8217;re afraid to explore other fields or audiences?</p>
<p style="text-align:center;"><a href="http://www.oocities.org/yfoca/ted/snowwhite/RASSnowWhi_Page01.jpg"><img class="aligncenter" title="Magic Mirror" src="http://www.oocities.org/yfoca/ted/snowwhite/RASSnowWhi_Page01.jpg" alt="" width="450" height="267" /></a></p>
<p><span id="more-472"></span>I touched on this problem in my last AltDevBlog post, <a title="Talkback Games" href="http://grapefruitgames.com/2011/11/20/talkback-games/">Talkback Games</a>. &#8216;Gamers&#8217; as an audience are easy, we know the input  language that game systems expect, and games feed back the language that players expect. Gamers know that an ammo stockpile means you&#8217;re about to meet a boss, or that you need to quicksave often, etc&#8230;  So yes, making games that reach outside this system is harder. Not only do you have to make simple or easily taught interfaces, but feedback has to be intuitive to non-gamers. However, I don&#8217;t think that blaming the lack of accessible mainstream games on lazy devs is either accurate or fair.</p>
<p>Can we blame the audience? The game community is known for its outspokenness, and studios have to work under the watchful eye of a legion of fans. Try to make a more accessible PC game and be accused of pandering to consoles. Make a sequel that departs too much from the original(s) and no one buys your game. The fickleness of audiences, and studios too willing to pander to them produces an industry afraid of change. This is hardly a new statement, but people seem to accept it. The mainstream game industry is in serious danger of following the same route as comic books. Readers became so averse to new series that publishers stopped making them, instead making countless crossovers that sold well, but were of no interest to non-fans. Today, comics are most definitely a cult industry, with the <a href="http://www.comicsalliance.com/2011/12/21/infographics-comics-2011-bestseller-new-york-times/">top-sellers only popular due to film/tv adaptations</a>. We can only avoid the same fate if gamers become willing to spend their money on different games. Smaller, different games can still sell well (obligatory Minecraft reference) so is the audience really so afraid to try new things?</p>
<p><a href="http://ibeatitfirst.com/wp-content/uploads/2011/07/no-more-heroes-paradise.jpg"><img class="aligncenter" title="Travis Touchdown" src="http://ibeatitfirst.com/wp-content/uploads/2011/07/no-more-heroes-paradise.jpg" alt="All too accurate..." width="470" height="324" /></a></p>
<p>Something else is holding developers back. The &#8216;art&#8217; or &#8216;Art&#8217; debate is tiring now, but many of the popular &#8216;Art&#8217; games cited are those that dissect other games. <em>Bioshock</em> as comment on gamers&#8217; lack of narrative control, <em><a href="http://www.moddb.com/mods/the-stanley-parable">The Stanley Parable</a></em> as rant against traditional narratives in games.  The audience might find it interesting, but in the end, players don&#8217;t care about theories of game design, they just want a good game. There is a danger of creating a culture that just wants to talk about itself, like some unintentional parody of post-modernism. Repeating a statement about game mechanics isn&#8217;t noteworthy, you have to use it to help another statement. <em>Shadow of the Colossus</em> uses gamers&#8217; urge to continue to make a tragedy, the player realises the horror of what they are doing, but is unable to stop. I just watched <em>The Artist</em>, and although at first I thought it was exploiting the style of silent films as a gimmick, it plays with the format to enhance the story. It uses this knowledge of film techniques to make something new, interesting beyond a pastiche.</p>
<p>So where does all this come from, and why can&#8217;t we stop? Perhaps we can blame the stereotype of the &#8216;gamer nerd&#8217;. Games have been looked down on for most of their existence, maybe we&#8217;ve just given up trying to reach out to new players. We turned to the art world in an attempt to justify all this to ourselves. A museum is a terrible place to put games, yet we parade them there to get the approval of &#8216;real&#8217; artists. But we don&#8217;t need them, we have the attention of the wider world and it wants to play games, as Zynga has shown. We need to stop looking at the magic mirror and make games for everyone else.</p>
<p><em>Note: This is reposted on <a href="http://altdevblogaday.com">#AltDevBlogADay</a>, with many other insightful posts from industry-folk</em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grapefruitgames.wordpress.com/472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grapefruitgames.wordpress.com/472/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grapefruitgames.wordpress.com/472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grapefruitgames.wordpress.com/472/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grapefruitgames.wordpress.com/472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grapefruitgames.wordpress.com/472/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grapefruitgames.wordpress.com/472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grapefruitgames.wordpress.com/472/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grapefruitgames.wordpress.com/472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grapefruitgames.wordpress.com/472/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grapefruitgames.wordpress.com/472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grapefruitgames.wordpress.com/472/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grapefruitgames.wordpress.com/472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grapefruitgames.wordpress.com/472/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grapefruitgames.com&#038;blog=7795022&#038;post=472&#038;subd=grapefruitgames&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grapefruitgames.com/2012/02/03/youre-so-vain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">EddieC</media:title>
		</media:content>

		<media:content url="http://www.oocities.org/yfoca/ted/snowwhite/RASSnowWhi_Page01.jpg" medium="image">
			<media:title type="html">Magic Mirror</media:title>
		</media:content>

		<media:content url="http://ibeatitfirst.com/wp-content/uploads/2011/07/no-more-heroes-paradise.jpg" medium="image">
			<media:title type="html">Travis Touchdown</media:title>
		</media:content>
	</item>
		<item>
		<title>Terrible secrets</title>
		<link>http://grapefruitgames.com/2012/01/27/terrible-secrets/</link>
		<comments>http://grapefruitgames.com/2012/01/27/terrible-secrets/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 18:15:56 +0000</pubDate>
		<dc:creator>Eddie Cameron</dc:creator>
				<category><![CDATA[__________________]]></category>
		<category><![CDATA[#sopajam]]></category>
		<category><![CDATA[gamejae]]></category>
		<category><![CDATA[ggj]]></category>
		<category><![CDATA[indie]]></category>
		<category><![CDATA[progress]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[screenshot]]></category>
		<category><![CDATA[sopa]]></category>
		<category><![CDATA[unity]]></category>

		<guid isPermaLink="false">http://grapefruitgames.com/?p=461</guid>
		<description><![CDATA[Well well well, it has been a while&#8230; is it too late to get away with blaming the holidays? (Yes) What have I been up to in the meantime? What am I doing now? Well from what I can gather, this: - Over the holiday period, Unity decided to have a competition to promote their [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grapefruitgames.com&#038;blog=7795022&#038;post=461&#038;subd=grapefruitgames&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Well well well, it has been a while&#8230; is it too late to get away with blaming the holidays? (Yes)</p>
<p>What have I been up to in the meantime? What am I doing now? Well from what I can gather, this:<span id="more-461"></span></p>
<p>- Over the holiday period, Unity decided to have a competition to promote their new version with Flash exporting. This is a fantastic idea, until you realise how many undocumented bugs are lurking within their, still very beta, Flash build process. Robert Yang and I thought it would be a great opportunity to expand on our <a href="http://www.ludumdare.com/compo/minild-27/?action=preview&amp;uid=4369">Polonius</a> game, which (we thought) had a simple enough conceit to make something quickly out of. On the day of submission, we came across several bugs I just could not fix in time. Once Unity 3.5 has a final release, we&#8217;ll go back and finish up a webplayer build, but in the meantime, feel free to try out the standalone.</p>
<p><a href="http://grapefruitgames.files.wordpress.com/2012/01/screen-shot-2012-01-27-at-12-48-29-pm.png"><img class="aligncenter size-full wp-image-465" title="QuinceañeraTitle" src="http://grapefruitgames.files.wordpress.com/2012/01/screen-shot-2012-01-27-at-12-48-29-pm.png?w=580" alt=""   /></a></p>
<p><a href="http://grapefruitgames.files.wordpress.com/2012/01/screen-shot-2012-01-27-at-12-48-42-pm.png"><img class="aligncenter size-full wp-image-466" title="QuinceañeraControlVan" src="http://grapefruitgames.files.wordpress.com/2012/01/screen-shot-2012-01-27-at-12-48-42-pm.png?w=580" alt=""   /></a></p>
<p>A telenovela/spy story. Infiltrate a quinceañera. Find out what&#8217;s really going on with this family&#8230;</p>
<p><strong>Download( Quinceañera : Sangre y Amor v0.9 ): <a href="http://dl.dropbox.com/u/1156317/Quincea%C3%B1era/Quincea%C3%B1era_OSX.zip">OSX</a> | <a href="http://dl.dropbox.com/u/1156317/Quincea%C3%B1era/Quincea%C3%B1era_Win.zip">Win</a></strong></p>
<p>- #SOPAJAM!!!</p>
<p>As part of the many, many protests against SOPA/PIPA (possible Internet-killing and ineffective &#8220;anti-piracy&#8221; laws) I whipped up a quick game for Ludum Dare&#8217;s <a href="http://www.ludumdare.com/compo/2012/01/13/stop-sopa-game-jam-january-18/">event</a>. &#8220;The (Free) Internet&#8221; is my attempt to make the proposed laws into a game, i.e: confused, rambling, non-sensical, and uncomfortable to everyone involved. Have a play, it&#8217;s short I promise, and then take a look at some of the other entries (<a href="http://www.ludumdare.com/compo/sopajam/?action=preview&amp;uid=1736">Richard Perrin&#8217;s &#8220;Delete&#8221;</a> isn&#8217;t a game, but he&#8217;s clever and you should listen to him)</p>
<p><a href="http://grapefruitgames.files.wordpress.com/2012/01/screen-shot-2012-01-22-at-1-13-26-am.png"><img class="aligncenter size-full wp-image-459" title="TheFreeInternet01" src="http://grapefruitgames.files.wordpress.com/2012/01/screen-shot-2012-01-22-at-1-13-26-am.png?w=580" alt=""   /></a></p>
<p><a href="http://grapefruitgames.files.wordpress.com/2012/01/screen-shot-2012-01-22-at-1-12-23-am.png"><img class="aligncenter size-full wp-image-458" title="TheFreeInternet02" src="http://grapefruitgames.files.wordpress.com/2012/01/screen-shot-2012-01-22-at-1-12-23-am.png?w=580" alt=""   /></a></p>
<p><strong>The (Free) Internet : <a href="http://www.ludumdare.com/compo/sopajam/?action=preview&amp;uid=4158">Webplayer</a></strong></p>
<p>- coming soon&#8230;</p>
<p>This weekend I&#8217;m taking part in the Global Game Jam at NYU</p>
<p>Next month I should hopefully finish a game I started on a plane then forgot about. Hint: inspired by a tweet from Jim Rossignol.</p>
<p>Then, I&#8217;ll be attending GDC (say hi if you&#8217;re there!) and flying back home to NZ.</p>
<p>And after that&#8230;</p>
<p>?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grapefruitgames.wordpress.com/461/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grapefruitgames.wordpress.com/461/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grapefruitgames.wordpress.com/461/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grapefruitgames.wordpress.com/461/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grapefruitgames.wordpress.com/461/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grapefruitgames.wordpress.com/461/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grapefruitgames.wordpress.com/461/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grapefruitgames.wordpress.com/461/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grapefruitgames.wordpress.com/461/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grapefruitgames.wordpress.com/461/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grapefruitgames.wordpress.com/461/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grapefruitgames.wordpress.com/461/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grapefruitgames.wordpress.com/461/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grapefruitgames.wordpress.com/461/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grapefruitgames.com&#038;blog=7795022&#038;post=461&#038;subd=grapefruitgames&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grapefruitgames.com/2012/01/27/terrible-secrets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">EddieC</media:title>
		</media:content>

		<media:content url="http://grapefruitgames.files.wordpress.com/2012/01/screen-shot-2012-01-27-at-12-48-29-pm.png" medium="image">
			<media:title type="html">QuinceañeraTitle</media:title>
		</media:content>

		<media:content url="http://grapefruitgames.files.wordpress.com/2012/01/screen-shot-2012-01-27-at-12-48-42-pm.png" medium="image">
			<media:title type="html">QuinceañeraControlVan</media:title>
		</media:content>

		<media:content url="http://grapefruitgames.files.wordpress.com/2012/01/screen-shot-2012-01-22-at-1-13-26-am.png" medium="image">
			<media:title type="html">TheFreeInternet01</media:title>
		</media:content>

		<media:content url="http://grapefruitgames.files.wordpress.com/2012/01/screen-shot-2012-01-22-at-1-12-23-am.png" medium="image">
			<media:title type="html">TheFreeInternet02</media:title>
		</media:content>
	</item>
		<item>
		<title>Talkback Games</title>
		<link>http://grapefruitgames.com/2011/11/20/talkback-games/</link>
		<comments>http://grapefruitgames.com/2011/11/20/talkback-games/#comments</comments>
		<pubDate>Sun, 20 Nov 2011 12:00:22 +0000</pubDate>
		<dc:creator>Eddie Cameron</dc:creator>
				<category><![CDATA[__________________]]></category>
		<category><![CDATA[call of duty]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[farmville]]></category>
		<category><![CDATA[game design]]></category>
		<category><![CDATA[talk radio]]></category>
		<category><![CDATA[talkback]]></category>
		<category><![CDATA[whining]]></category>

		<guid isPermaLink="false">http://grapefruitgames.com/?p=434</guid>
		<description><![CDATA[Games are different. Unlike most other creative media, the consumer is required to do something, and the game is required to do something back. A game asks a question, &#8220;What do you want to do?&#8221; and a player answers. As you can imagine, this interactivity introduces a whole lot of complexity into crafting a game&#8217;s [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grapefruitgames.com&#038;blog=7795022&#038;post=434&#038;subd=grapefruitgames&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="Talkback Radio Studio" src="http://www.latalkradio.com/images/Studio.jpg" alt="" width="245" height="184" />Games are different. Unlike most other creative media, the consumer is required to do something, and the game is required to do something back. A game asks a question, &#8220;What do you want to do?&#8221; and a player answers. As you can imagine, this interactivity introduces a whole lot of complexity into crafting a game&#8217;s &#8216;experience&#8217;. A game&#8217;s author(s) can&#8217;t lay out the experience as they can in a book or movie, because no two players will put in the same input or receive the same feedback. This leads to that Important Question: &#8220;What does authorship mean for interactive media?&#8221;. After reading Clint Hocking&#8217;s recent <a href="http://www.clicknothing.com/click_nothing/2011/11/redacted-the-dominant-cultural-form-of-the-21st-century.html">post about authorship</a>, I started thinking about where precedents may have been set in other media. And what else requires input from its consumers? Talkback Radio.</p>
<p><span id="more-434"></span></p>
<p>Talkback radio (talk radio in the US) today has a very rigorous formula. The audience, usually politically conservative, listens to a point of view they already agree with. It is understood that listeners will then call in to agree with/congratulate the host or answer his (and it is almost always his) leading questions (&#8220;Do you want foreigners taking your jobs? Your children&#8217;s jobs?&#8221;) Every now and again, some curious radio owner may decide listen to the show, disagree with the content, phone in to complain, and then get shouted down for presenting their own opinion. An entire family of mostly similar shows that, along with their audience, are baffling and often hostile to outsiders. Sound like games yet?</p>
<p>The host or hosts (the game designers/writers) craft a script, and the callers (players) phone in with their expected input. In most games there is an understood set of actions that players &#8216;know&#8217; to take. If you act outside these bounds, the game stops responding, or it decides that it&#8217;s had enough and kills you/blocks you. Players in an FPS know that running backwards won&#8217;t get them anywhere, so they don&#8217;t. In pretty much every open world game your character is killed if you leave the safe area. If players, or listeners, don&#8217;t input the expected, they get a slap, the dissonance shocks them out of any sense of engagement, and eventually they stop trying or even stop playing. This doesn&#8217;t make these games inherently &#8216;bad&#8217;, but like talkback, it caters to a certain audience and alienates others. How many times have you watched/suffered a non-gamer playing something you love? If they can even work out the controls, you&#8217;ll often hear &#8220;Why can&#8217;t I do this?&#8221;</p>
<p>So how do we avoid falling into the same pit that talkback radio has? Talkback doesn&#8217;t fully realise its interactivity. Sure, listeners are doing stuff, but their input doesn&#8217;t change the majority of the show. They get their bit of feedback, and then the host continues. Their actions aren&#8217;t the performance, the host&#8217;s are. In Call of Duty you decide to start shooting a squad-mate. The gun fires and you get the same immediate feedback as shooting anywhere else, but the teammate isn&#8217;t injured, and in the next cutscene he will still fistbump you.</p>
<div class="wp-caption alignleft" style="width: 278px"><a href="http://reface.me/applications/21-farmville-art-masterpieces/"><img class="   " title="Farmville" src="http://reface.me/wp-content/uploads/farmville-mona-lisa-by-kevin-johnson.png" alt="Wait, Farmville isn't completely evil?" width="268" height="167" /></a><p class="wp-caption-text">Farmville can&#039;t punish you for this</p></div>
<p>Now, this way of thinking may mislead you into believing that you need to anticipate all player actions and change the narrative to fit them, which is impossible. The problem lies instead with the authors insistance on making their narrative the one &#8216;true&#8217; narrative. Minecraft can cope with any player input, you can&#8217;t spoil the game by running in one direction for an hour. Another solution is to restrict player input so much that they don&#8217;t even get the opportunity to spoil the game. Facebook games cater to an enormous audience of non-gamers, perhaps in part because they can&#8217;t get frustrated by the game telling them they&#8217;re &#8220;doing it wrong&#8221; if they click in the wrong place.</p>
<p>Essentially, talkback radio doesn&#8217;t really listen to its callers. Don&#8217;t let your games ignore its players. If a player wants to leap around and get all up in Alyx&#8217;s business while she talks at them, allow it, or even better , acknowledge it by having her remark on it. Don&#8217;t ask your players leading questions by forcing a good/bad moral choice on them. Let players make their own choices and have the game react as best it can. Don&#8217;t hang up on the crazy caller because you don&#8217;t know how to respond.</p>
<p><em>NOTE: This is reposted at <a href="http://www.altdevblogaday.com/" target="_blank">AltDevBlogADay</a>, a site full of some very clever game-devs.</em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grapefruitgames.wordpress.com/434/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grapefruitgames.wordpress.com/434/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grapefruitgames.wordpress.com/434/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grapefruitgames.wordpress.com/434/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grapefruitgames.wordpress.com/434/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grapefruitgames.wordpress.com/434/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grapefruitgames.wordpress.com/434/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grapefruitgames.wordpress.com/434/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grapefruitgames.wordpress.com/434/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grapefruitgames.wordpress.com/434/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grapefruitgames.wordpress.com/434/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grapefruitgames.wordpress.com/434/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grapefruitgames.wordpress.com/434/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grapefruitgames.wordpress.com/434/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grapefruitgames.com&#038;blog=7795022&#038;post=434&#038;subd=grapefruitgames&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grapefruitgames.com/2011/11/20/talkback-games/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">EddieC</media:title>
		</media:content>

		<media:content url="http://www.latalkradio.com/images/Studio.jpg" medium="image">
			<media:title type="html">Talkback Radio Studio</media:title>
		</media:content>

		<media:content url="http://reface.me/wp-content/uploads/farmville-mona-lisa-by-kevin-johnson.png" medium="image">
			<media:title type="html">Farmville</media:title>
		</media:content>
	</item>
		<item>
		<title>Extreme Game Dev : 0H Game Jam</title>
		<link>http://grapefruitgames.com/2011/11/06/extreme-game-dev-0h-game-jam/</link>
		<comments>http://grapefruitgames.com/2011/11/06/extreme-game-dev-0h-game-jam/#comments</comments>
		<pubDate>Sun, 06 Nov 2011 19:57:36 +0000</pubDate>
		<dc:creator>Eddie Cameron</dc:creator>
				<category><![CDATA[__________________]]></category>
		<category><![CDATA[gamejam]]></category>
		<category><![CDATA[indie]]></category>
		<category><![CDATA[ludum dare]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[unity]]></category>

		<guid isPermaLink="false">http://grapefruitgames.com/?p=449</guid>
		<description><![CDATA[Last night I made a game in 0 hours. The clocks went back for daylight saving, and that hour OUTSIDE OF TIME ITSELF is perfect for a mini-gamejam. The game I made with my theme of &#8216;Sleep&#8217; is&#8230;functional? If you dare to play &#8220;Go To Sleep&#8221; you can do so here (Unity Webplayer). And also [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grapefruitgames.com&#038;blog=7795022&#038;post=449&#038;subd=grapefruitgames&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://grapefruitgames.files.wordpress.com/2011/11/screen-shot-2011-11-06-at-2-17-39-am.png"><img class="aligncenter size-full wp-image-450" title="Go To Sleep screen" src="http://grapefruitgames.files.wordpress.com/2011/11/screen-shot-2011-11-06-at-2-17-39-am.png?w=580" alt=""   /></a>Last night I made a game in 0 hours. The clocks went back for daylight saving, and that hour OUTSIDE OF TIME ITSELF is perfect for a mini-gamejam. The game I made with my theme of &#8216;Sleep&#8217; is&#8230;functional? If you dare to play &#8220;Go To Sleep&#8221; you can do so <a href="http://dl.dropbox.com/u/1156317/GoToSleepWeb/GoToSleepWeb.html">here (Unity Webplayer)</a>. And also check out the other games at <a href="http://0hgame.eu/">http://0hgame.eu/</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/grapefruitgames.wordpress.com/449/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/grapefruitgames.wordpress.com/449/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/grapefruitgames.wordpress.com/449/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/grapefruitgames.wordpress.com/449/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/grapefruitgames.wordpress.com/449/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/grapefruitgames.wordpress.com/449/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/grapefruitgames.wordpress.com/449/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/grapefruitgames.wordpress.com/449/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/grapefruitgames.wordpress.com/449/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/grapefruitgames.wordpress.com/449/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/grapefruitgames.wordpress.com/449/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/grapefruitgames.wordpress.com/449/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/grapefruitgames.wordpress.com/449/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/grapefruitgames.wordpress.com/449/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=grapefruitgames.com&#038;blog=7795022&#038;post=449&#038;subd=grapefruitgames&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://grapefruitgames.com/2011/11/06/extreme-game-dev-0h-game-jam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">EddieC</media:title>
		</media:content>

		<media:content url="http://grapefruitgames.files.wordpress.com/2011/11/screen-shot-2011-11-06-at-2-17-39-am.png" medium="image">
			<media:title type="html">Go To Sleep screen</media:title>
		</media:content>
	</item>
	</channel>
</rss>
