<?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/"
	>

<channel>
	<title>Tiny Subversions</title>
	<atom:link href="http://tinysubversions.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://tinysubversions.com</link>
	<description></description>
	<lastBuildDate>Tue, 24 Jan 2012 16:30:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Feedback in systems design, and a need for new terminology</title>
		<link>http://tinysubversions.com/2012/01/feedback/</link>
		<comments>http://tinysubversions.com/2012/01/feedback/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 16:20:17 +0000</pubDate>
		<dc:creator>Darius Kazemi</dc:creator>
				<category><![CDATA[design]]></category>

		<guid isPermaLink="false">http://tinysubversions.com/?p=2126</guid>
		<description><![CDATA[About a year ago on a thread on Google Buzz (RIP) I wrote a quick definition of  &#8221;positive feedback&#8221; and &#8220;negative feedback&#8221; in terms of their technical, systems design meaning. I figured I would repost it here, since every now and then someone asks me what it is and I search my email to copy/paste [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>About a year ago on a thread on Google Buzz (RIP) I wrote a quick definition of  &#8221;positive feedback&#8221; and &#8220;negative feedback&#8221; in terms of their technical, systems design meaning. I figured I would repost it here, since every now and then someone asks me what it is and I search my email to copy/paste it. It&#8217;s pretty slapdash but it gets the point across, and people have found it useful. So&#8230; here you go, internet.</p>
<blockquote><p>In short: negative feedback is a system that regulates itself. Think of a thermostat. You set it to a certain temperature T. If the house goes above T, it instructs the systems to cool the house. If the house goes below T, it instructs systems to heat the house.</p>
<p>Positive feedback is where things are reinforced and amplified. Imagine a thermostat that cranks the house hotter when the temperature is above T, and makes it cooler when it&#8217;s below T.</p>
<p>The main difference is that in the first example, the temperature will tend to remain at T. In the second example, it is highly unlikely the temperature will be T, and in fact it will trend towards either very hot or very cold.</p>
<p>The simplest example of negative versus positive feedback in game design that I can think of is possession rules in 1-on-1 pickup basketball. A negative feedback rule is something like, &#8220;If I score a basket, you get to start with the ball.&#8221; By giving an advantage to the loser, you&#8217;re evening the playing field a bit and bringing the temperature back down to T, so to speak. A positive feedback rule would be, &#8220;Winner keeps the ball.&#8221; This means winners tend to keep winning, making the house hotter and hotter.</p>
<p>Randy Smith likes to use <em>Mario Kart</em> as an example of a game with strong negative feedback: items like the Blue Shell cause people in the winning position to be at a disadvantage so those behind can catch up. This is also colloquially known as a &#8220;rubber banding&#8221; mechanic.</p></blockquote>
<p>Mainly this is in stark contrast to the <em>other</em> way the terms &#8220;positive feedback&#8221; and &#8220;negative feedback&#8221; are used in game design: to signify something positive given to the player (reward) or something negative given to the player (punishment). &#8220;Feedback&#8221; in general can refer to either feedback loops like I describe, or to the general concept of &#8220;giving information to the player about the results of their actions.&#8221; I would vastly prefer if we started disambiguating the two usages. I&#8217;d like &#8220;feedback&#8221; to retain the meaning I sketch above, which is probably due to my bias as someone trained as an electrical engineer!</p>
<p>Any suggestions out there for a word other than &#8220;feedback&#8221; that would describe &#8220;giving information to the player about the results of their actions&#8221;? Or, hell, a different word for &#8220;systems whose outputs determine their future inputs&#8221; (which is what I describe in my examples above)?</p>
<p><strong>(Edit: &#8220;reinforcement&#8221; has been variously suggested here and on Twitter for EITHER kind of feedback. See my comment below on why I think it&#8217;s only suitable for the &#8220;giving information&#8221; kind.)</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://tinysubversions.com/2012/01/feedback/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>My favorite games of 2011</title>
		<link>http://tinysubversions.com/2011/12/my-favorite-games-of-2011/</link>
		<comments>http://tinysubversions.com/2011/12/my-favorite-games-of-2011/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 18:02:18 +0000</pubDate>
		<dc:creator>Darius Kazemi</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[Games I Love]]></category>

		<guid isPermaLink="false">http://tinysubversions.com/?p=2104</guid>
		<description><![CDATA[I was planning to do this anyway, but then Zack Hiwiller beat me to it and I got all jealous. Here&#8217;s a list of some of my favorite games that came out in 2011 (or at least the ones I thought of on my lunch break). Murder Dog IV: Trial of the Murder Dog. I [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>I was planning to do this anyway, but then <a href="http://www.hiwiller.com/2011/12/19/games-of-the-year/" >Zack Hiwiller beat me to it</a> and I got all jealous. Here&#8217;s a list of some of my favorite games that came out in 2011 (or at least the ones I thought of on my lunch break).</p>
<ul>
<li><em><a href="http://gamejolt.com/freeware/games/adventure/murder-dog-iv-trial-of-the-murder-dog/5807/" >Murder Dog IV: Trial of the Murder Dog</a></em>. I <a href="http://www.pastemagazine.com/articles/2011/11/outsider-videogames-2012-igf-pirate-kart.html" >wrote at Paste Magazine</a> about why I like it.</li>
<li><em><a href="http://www.geocities.ws/mystery_zone/CrimeZone.html" >Crime Zone</a></em>. Another game by the creator of Murder Dog, this is primarily an exploration of the psychogeography of a member of a police squad that enforces the will of a totalitarian state. For real.</li>
<li><em>Deus Ex: Human Revolution</em>. It doesn&#8217;t innovate over the original <em>Deus Ex</em>. It&#8217;s pretty much the same game except not quite as good. I am completely okay with that because I&#8217;m a shameless DX fan.</li>
<li><em>Skyrim</em>. This took me by surprise. I found <em>Oblivion</em> really boring, but I very much liked <em>Fallout 3</em>. I typically hate fantasy genre stuff. But I&#8217;ve logged about 40-50 hours in Skyrim, and keep coming back to it.</li>
<li><em>Vertex Dispenser</em>. I <a href="http://tinysubversions.com/2011/06/one-of-my-favorite-games-is-now-for-sale/" >wrote about this game</a> as well. (It&#8217;s <a href="http://store.steampowered.com/app/102400/" >50% off right now at Steam</a>!)</li>
<li><em>Frozen Synapse</em>. It&#8217;s the squad based battle planning stuff I love from <em>Jagged Alliance 2</em>. Runs like a dream under Wine on Linux, too. <a href="http://www.youtube.com/watch?v=dBkYEWjhvm0" >I had fun with this.</a></li>
<li><em><a href="http://games.adultswim.com/soul-brother-adventure-online-game.html" >Soul Brother</a></em>. Hands-down my favorite browser-based game of the year. Incredible soundtrack.</li>
</ul>
<p>Unfortunately, most of the other games I enjoyed this year technically have not been released yet so I can&#8217;t talk about them here. Oh the trials of being an IGF judge and Indiecade-attending-person.</p>
<p>The unreleased game that stands out the most in my mind is <em><a href="http://gutefabrik.com/joust.html" >Johann Sebastian Joust</a></em>, which I played with my coworkers at our holiday party last weekend. Here&#8217;s a video of a test run:</p>
<p><iframe src="http://player.vimeo.com/video/33746175?title=0&amp;byline=0&amp;portrait=0"  frameborder="0"  width="400"  height="225" ></iframe></p>
<p><a href="http://vimeo.com/33746175" >Playing Joust at Bocoup</a> from <a href="http://vimeo.com/user1127615" >maryrosecook</a> on <a href="http://vimeo.com" >Vimeo</a>.</p>
<p>I spent $200 on four PS Move controllers to play this (I don&#8217;t own a PS3) and IT WAS TOTALLY WORTH IT.</p>
]]></content:encoded>
			<wfw:commentRss>http://tinysubversions.com/2011/12/my-favorite-games-of-2011/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>At Dawn</title>
		<link>http://tinysubversions.com/2011/11/at-dawn/</link>
		<comments>http://tinysubversions.com/2011/11/at-dawn/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 15:26:39 +0000</pubDate>
		<dc:creator>Darius Kazemi</dc:creator>
				<category><![CDATA[game maker]]></category>
		<category><![CDATA[gamejam]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[projects]]></category>

		<guid isPermaLink="false">http://tinysubversions.com/?p=2098</guid>
		<description><![CDATA[I made a little game-like thing called &#8220;At Dawn&#8221; for the Boston Game Jams HTML5 game jam that ran this past weekend. The theme for the jam was &#8220;Dawn.&#8221; I didn&#8217;t have time to attend for the whole weekend, so instead of making a game I just messed around with building a pixelated sunrise. I [...]]]></description>
			<content:encoded><![CDATA[<p><a class="post_image_link"  href="http://tinysubversions.com/2011/11/at-dawn/"  title="Permanent link to At Dawn" ><img class="post_image alignnone"  src="http://tinysubversions.com/pics/atdawn.png"  width="634"  height="119"  alt="Post image for At Dawn" /></a>
</p><p>I made <a href="http://tinysubversions.com/game/atdawn/" >a little game-like thing called &#8220;At Dawn&#8221;</a> for the <a href="http://bostongamejams.com/2011/11/15/html5-game-jam-this-weekend-mocospace-sponsorship-and-impactjs-license/" >Boston Game Jams HTML5 game jam</a> that ran this past weekend.</p>
<p>The theme for the jam was &#8220;Dawn.&#8221; I didn&#8217;t have time to attend for the whole weekend, so instead of making a game I just messed around with building a pixelated sunrise. I built most of the thing in <a href="http://www.yoyogames.com/gamemaker/html5" >GameMaker HTML5</a> (which incidentally now has <a href="http://tinysubversions.com/2011/09/another-gamemaker-html5-port/" >the non-obfuscated debug mode I was asking for</a>!). I say &#8220;most of&#8221; because I put the music in by hand.</p>
<p>The music, by the way, is from <a href="http://ccmixter.org/files/DoKashiteru/21394" >the amazing DoKashiteru</a>, and from the amazing website <a href="http://ccmixter.org/" >CCMixter</a>, which is where I find a lot of the Creative Commons licensed music I use in my stuff.</p>
<p>Building the sunrise was fun. I searched for images of sunrise and dawn until I <a href="http://www.malaga-weather.com/gallery/Your%20Photos/slides/2006-0925%20Dawn%20over%20Platera%20%20Nick%20Fincham.html" >found one that I liked</a>. I poked around and extracted 15 different colors that I wanted to use and put them in a palette:</p>
<p><img class="aligncenter size-full wp-image-2100"  title="palette"  src="http://tinysubversions.com/wp-content/uploads/2011/11/palette.png"  alt="15 sunrise colors."  width="480"  height="32" />It&#8217;s an ordered palette &#8212; my sunrise generator basically says &#8220;if you&#8217;re X distance from the sun, fill in this area with a random choice of colors 0-2&#8243; and has some special case rules for what happens when the sun starts to peek up over the horizon. This creates a banding and dithering effect.</p>
<p>The last bit of the experience, where the screen starts to fill up with light, just came from me messing around with the algorithm and deciding that I liked what that particular effect evoked.</p>
]]></content:encoded>
			<wfw:commentRss>http://tinysubversions.com/2011/11/at-dawn/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Outsider Videogames: I review the 2012 IGF Pirate Kart</title>
		<link>http://tinysubversions.com/2011/11/outsider-videogames-i-review-the-2012-igf-pirate-kart/</link>
		<comments>http://tinysubversions.com/2011/11/outsider-videogames-i-review-the-2012-igf-pirate-kart/#comments</comments>
		<pubDate>Thu, 10 Nov 2011 23:48:42 +0000</pubDate>
		<dc:creator>Darius Kazemi</dc:creator>
				<category><![CDATA[indie]]></category>
		<category><![CDATA[outsider videogames]]></category>

		<guid isPermaLink="false">http://tinysubversions.com/?p=2094</guid>
		<description><![CDATA[My latest Outsider Videogames column is up at Paste Magazine. I review the IGF Pirate Kart, which if you don&#8217;t know what it is, well&#8230; read my article, I guess! &#160;]]></description>
			<content:encoded><![CDATA[<p></p><p><a href="http://www.pastemagazine.com/articles/2011/11/outsider-videogames-2012-igf-pirate-kart.html" ><img class="alignnone"  title="Murder Dog"  src="http://www.pastemagazine.com/articles/murder%20dog.png"  alt="Murder Dog!"  width="348"  height="261" /></a></p>
<p><a href="http://www.pastemagazine.com/articles/2011/11/outsider-videogames-2012-igf-pirate-kart.html" >My latest Outsider Videogames column is up at Paste Magazine.</a></p>
<p>I review the <a href="http://www.piratekart.com/" >IGF Pirate Kart</a>, which if you don&#8217;t know what it is, well&#8230; read my article, I guess!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://tinysubversions.com/2011/11/outsider-videogames-i-review-the-2012-igf-pirate-kart/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fieldrunners HTML5 has launched!</title>
		<link>http://tinysubversions.com/2011/10/fieldrunners-html5-has-launched/</link>
		<comments>http://tinysubversions.com/2011/10/fieldrunners-html5-has-launched/#comments</comments>
		<pubDate>Tue, 25 Oct 2011 20:23:40 +0000</pubDate>
		<dc:creator>Darius Kazemi</dc:creator>
				<category><![CDATA[fieldrunners]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://tinysubversions.com/?p=2083</guid>
		<description><![CDATA[I&#8217;ve been working as a producer on the HTML5 port of the hit mobile tower defense game Fieldrunners for about 4 months now, and I&#8217;m happy to say the game is finally available! (Requires the Google Chrome web browser.) Bocoup (my employer) worked with Gradient Studios to port the game, and Subatomic Studios (the original [...]]]></description>
			<content:encoded><![CDATA[<p><a class="post_image_link"  href="http://tinysubversions.com/2011/10/fieldrunners-html5-has-launched/"  title="Permanent link to Fieldrunners HTML5 has launched!" ><img class="post_image alignnone"  src="http://weblog.bocoup.com/wp-content/uploads/2011/08/header.png"  width="595"  height="116"  alt="Post image for Fieldrunners HTML5 has launched!" /></a>
</p><p>I&#8217;ve been working as a producer on the HTML5 port of the hit mobile tower defense game Fieldrunners for about 4 months now, and I&#8217;m happy to say <a href="http://bit.ly/FRHTML5" >the game is finally available</a>! (Requires the <a href="http://www.google.com/chrome" >Google Chrome web browser</a>.)</p>
<p><a href="http://bocoup.com" >Bocoup</a> (my employer) worked with <a href="http://www.gradient-studios.com/" >Gradient Studios</a> to port the game, and <a href="http://fieldrunners.com/" >Subatomic Studios</a> (the original developer) built some great new maps, towers, and game modes for the HTML5 version.</p>
<p>I truly believe this is one of the first polished, professional HTML5 games to be made, and I&#8217;m super proud to have helped make it happen!</p>
<p><a href="http://tinysubversions.com/pics/fr.png" ><img class="alignnone"  title="Fieldrunners HTML5"  src="http://tinysubversions.com/pics/fr.png"  alt="Fieldrunners HTML5"  width="605"  height="455" /></a></p>
<p><a href="http://bit.ly/FRHTML5" >Go play it now!</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tinysubversions.com/2011/10/fieldrunners-html5-has-launched/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Contract negotiation for mid-career game developers (part 2)</title>
		<link>http://tinysubversions.com/2011/10/contract-negotiation-for-mid-career-game-developers-part-1-2/</link>
		<comments>http://tinysubversions.com/2011/10/contract-negotiation-for-mid-career-game-developers-part-1-2/#comments</comments>
		<pubDate>Mon, 10 Oct 2011 17:39:08 +0000</pubDate>
		<dc:creator>Darius Kazemi</dc:creator>
				<category><![CDATA[contract negotiation]]></category>

		<guid isPermaLink="false">http://tinysubversions.com/?p=2075</guid>
		<description><![CDATA[Welcome to part 2 of my series on contract negotiation for mid-career game developers. Please also check out part 1, which provides a general overview. A story You&#8217;ve been interviewing with this game studio for two weeks now. Two months if you count time from your initial resume submission. They flew you out, paid for [...]]]></description>
			<content:encoded><![CDATA[<p></p><p><em>Welcome to part 2 of my series on contract negotiation for mid-career game developers. Please also check out <a href="http://tinysubversions.com/2011/04/contract-negotiation-for-mid-career-game-developers-part-1/" >part 1</a>, which provides a general overview.</em></p>
<h3>A story</h3>
<p>You&#8217;ve been interviewing with this game studio for two weeks now. Two months if you count time from your initial resume submission. They flew you out, paid for a great hotel and meals, and interrogated the hell out of you. It was a grueling, day-long process. You had to tell your current employer you had a family emergency to take care of. You couldn&#8217;t post to Twitter about the fact that you were out of town. You felt like a secret agent.</p>
<p>Turns out you passed muster. They like you. They offer you a job. You&#8217;ll be working on a new game that you&#8217;re super excited about, with an amazing team of people, some of whom you&#8217;ve respected for years. You&#8217;ll have a position that gives you more responsibilities, and more chance to make an impact on the final product. You&#8217;ve been looking for an opportunity like this forever.</p>
<p>Then you get the employment contract. It&#8217;s got some heavy language in it &#8212; some of it scary, some of it boring, some of it inscrutable. Stuff about &#8220;IP assignment&#8221; and non-competition and non-solicitation. You read through it and as best you can make out, you&#8217;re not going to be able to work on any side projects while employed there (at least not without the company owning your projects). You&#8217;re not going to be able to THINK UP any side projects while employed there &#8212; any ideas you come up with while employed belong to the company. And if you leave the company you won&#8217;t be able to work for another game studio for a year.</p>
<p>Well, that sucks! But it&#8217;s probably not as bad as it looks, right? They seemed like such nice people over there, even the executives. It&#8217;s the whole reason you want to work there! I mean, that clause about leaving the company &#8212; they wouldn&#8217;t REALLY just halt your career for a year after you leave, right? And you asked your hiring manager about the personal projects stuff. They assured you that nobody&#8217;s ever been busted for having side projects, as long as they&#8217;re not made on company time or resources.</p>
<p>It&#8217;s such a great job, and such a cool company, and they&#8217;re even offering you $25,000 more than you&#8217;re making now! It would be ungrateful to complain! I mean, you probably only barely passed that interview. If you asked them to remove stuff from the contract &#8212; stuff that probably a REALLY SMART and well-paid lawyer came up with &#8212; they might take their offer back!</p>
<p>You know what, this job is a once-in-a-lifetime opportunity. Best to just sign the contract; it probably won&#8217;t matter.</p>
<p>&#8230;</p>
<p>Fast-forward three years. You&#8217;ve shipped that awesome game. It was a hit. You&#8217;re mid way through working on the sequel now and frankly you&#8217;re fucking tired of it. You love your coworkers but if you have to have one more serious discussion about a space marine in power armor you&#8217;re going to kill someone.</p>
<p>You&#8217;ve got ideas for games of your own. You&#8217;ve discussed them with some friends at a different studio. You want to start your own studio with those friends and try your hand at a director-level position &#8212; this company was a great place to be a team lead, and the experience was invaluable, but there&#8217;s no room for a new director. They have all the directors they need and nobody&#8217;s going to be leaving those positions any time soon.</p>
<p>But there&#8217;s that contract. You haven&#8217;t looked at it in ages, but it looms over you every day now. It&#8217;s true that your company&#8217;s never stopped someone from leaving and immediately starting a new studio, but as far as you know, nobody&#8217;s ever TRIED! And who could blame them, given the contract they had to sign? Your company has some pretty high powered lawyers, and if they came after you it&#8217;d make your life miserable for a year.</p>
<p>What if you managed to start a studio but your current employers found out you came up with your project while working for them? It wouldn&#8217;t be that hard to put two and two together. You&#8217;ve spent years here! What if they come after you and claim ownership of your game?</p>
<p>You think back to that day three years ago when you signed that contract and sigh. If only you&#8217;d negotiated.</p>
<p>You found out after the fact that your company was absolutely hurting for someone of your skills. You were the sixth person they&#8217;d interviewed for that job and it had been a long, costly process for the company. You didn&#8217;t know it at the time but you were in a good position to bargain. You could&#8217;ve easily had them modify the IP assignment clause so that it only applied to games that directly competed with the company&#8217;s space marine stuff. You could&#8217;ve had them drop that non-compete altogether.</p>
<p>But you didn&#8217;t, and now you&#8217;re in a world of stress that could have been avoided with another couple days of emails three years ago.</p>
<h3>Don&#8217;t be afraid</h3>
<p>The moral of the story is: don&#8217;t EVER be afraid to negotiate an employment contract. Do not fool yourself into thinking it&#8217;s not going to matter. Almost everyone I know does not negotiate these contracts, and almost everyone I know has an incredibly stressful time leaving their job.</p>
<p>Do not believe that the because the people you&#8217;ve met during the hiring process are nice, that they&#8217;re not going to be bastards when it comes down to the stuff laid out in the contract.</p>
<p>Relatedly, do not fall for the classic move where the person you&#8217;re talking to assures you that the company has never sued an ex-employee over the terms of the contract. I hate this move. It&#8217;s moronic. Fortunately, like all moronic strategies, there is an ironclad response.</p>
<blockquote><p>Hiring manager: &#8220;Oh, we&#8217;ve never sued an employee over the non-compete. People go to new studios all the time; it&#8217;s really only there in case an executive leaves with a bunch of company secrets. We would never do that to you.&#8221;</p>
<p>You: &#8220;I believe that you would never do that to me &#8212; you seem super great and that&#8217;s why I want to work with you. But what happens if the company gets bought by someone else? My contract passes to them, and all of a sudden it&#8217;s a brand new board of directors and legal team that is in charge of enforcing the terms of my employment contract. For all I know, they&#8217;ll be extremely litigious. [Bonus counter move up next...] Since I&#8217;m not an executive, and as you say the clause is there for executives, then I guess it doesn&#8217;t apply to me. I would really feel more comfortable working for you without that clause in my contract.&#8221;</p></blockquote>
<p>That usually shuts them up.</p>
<p>Above all, do not be afraid that trying to negotiate is going to make them retract their job offer. Let&#8217;s say you ask someone to modify something in your contract, and you give a perfectly reasonable explanation. For example: &#8220;This non-compete clause means that I won&#8217;t have a career for 365 days after leaving your company, and that is unacceptable.&#8221; Well 99% of the time, if they really want that clause in there, they will simply come back and say &#8220;No, that&#8217;s non-negotiable.&#8221; Which is totally fine &#8212; it means you understand what you&#8217;re getting yourself into and what kind of people you&#8217;re dealing with.</p>
<p>In maybe 1% of cases, they will retract their job offer because you had the audacity to look out for your own interests. Oh no! Worst case scenario, right? Actually it&#8217;s a great thing. That job retraction is the equivalent of them saying, &#8220;We are gigantic litigious assholes and we don&#8217;t want you working with us.&#8221; Well congratulations my friend, you just dodged a fucking bullet!</p>
<p>No matter who you are (except maybe a student fresh out of school), you should never feel like you&#8217;re too inexperienced or replaceable to negotiate an employment contract. The fact that they made you an offer means they really, really want you &#8212; and at this point you hold a TON of power in the relationship. You know how it&#8217;s draining to go through the interview process? It&#8217;s even more draining for a company. They&#8217;ve spent a ton of time and money making absolutely sure you&#8217;re right for them. They want you, and saying &#8220;no&#8221; might even mess up their project schedules &#8212; which at this point they&#8217;re probably already shifting around to make room for you.</p>
<p>When you receieve that contract, the ball is in your court. You have the power. Use it wisely and use it well, but above all, <strong>use it</strong>.</p>
<p>The rest of this employment contract negotiation series is going to cover <strong>how</strong> and <strong>when</strong> to use that power. But no matter what else I cover, this article will always be the most important one. It&#8217;s my sincere hope that you internalize what I&#8217;ve said here.</p>
<p>(<strong>DISCLAIMER</strong>: I am not a lawyer. The stuff I’m going to talk about is not to be construed as specific legal advice. I’m mostly sticking to the <em>general principles</em> of contract negotiation, and what to look out for in an employment contract. What I say here applies specifically to the United States, as I know nothing about the law or contract negotiation etiquette in other countries. What I say here may screw you over. This advice is for mid-career game developers: if it’s your first job out of school, I dunno, maybe you should just sign what you’re given to get that foot in the door! (But maybe not.) And finally: if you have any specific questions about the legality of something, <em><strong>CONSULT A LAWYER</strong></em>.)</p>
]]></content:encoded>
			<wfw:commentRss>http://tinysubversions.com/2011/10/contract-negotiation-for-mid-career-game-developers-part-1-2/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>It ain&#8217;t satire</title>
		<link>http://tinysubversions.com/2011/10/it-aint-satire/</link>
		<comments>http://tinysubversions.com/2011/10/it-aint-satire/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 15:15:24 +0000</pubDate>
		<dc:creator>Darius Kazemi</dc:creator>
				<category><![CDATA[writing]]></category>

		<guid isPermaLink="false">http://tinysubversions.com/?p=2064</guid>
		<description><![CDATA[On Friday, Joystiq published an article that got people angry, including me. It commented on a news item about a 46-year-old man who was taunted by a 13-year-old while playing CoD: Black Ops. If you haven&#8217;t read it yet, I guess you should go do so, otherwise you won&#8217;t understand the rest of this blog [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>On Friday, <a href="http://www.joystiq.com/2011/09/30/guy-chokes-a-kid-after-being-made-fun-of-in-black-ops-were/" >Joystiq published an article</a> that got people angry, including me. It commented on a news item about a 46-year-old man who was taunted by a 13-year-old while playing <em>CoD: Black Ops</em>. If you haven&#8217;t read it yet, I guess you should go do so, otherwise you won&#8217;t understand the rest of this blog post. (The original post did not have the editor&#8217;s note at the bottom.)</p>
<p>The article uses hyperbolic language to laud the actions of a man who stalked and then choked a boy over a videogame. The article did not initially appear to me to be satire, and even as a work of satire it is weak and serves no purpose except to make Joystiq&#8217;s <a href="http://www.joystiq.com/2011/09/30/guy-chokes-a-kid-after-being-made-fun-of-in-black-ops-were/#c34853835" >enlightened</a> <a href="http://www.joystiq.com/2011/09/30/guy-chokes-a-kid-after-being-made-fun-of-in-black-ops-were/2#c34853871" >commenters</a> <a href="http://www.joystiq.com/2011/09/30/guy-chokes-a-kid-after-being-made-fun-of-in-black-ops-were/2#c34853873" >miss the point</a>.</p>
<p>People thought I was naive or stupid for not seeing the satire there. Justin McElroy (the author) and his editors at Joystiq make the argument that the use of hyperbolic language obviously and immediately telegraphs that a piece of writing is satire. For example, McElroy told me on Twitter that the phrase &#8220;we&#8217;re preparing a banquet in your honor when you get out of the clink&#8221; is a mark of satire. In the editor&#8217;s note that was latter appended to the article, the editor claims that a phrase like &#8220;Choke-a-Cola&#8221; means it must be satire, or at least a humor piece.</p>
<p>The problem with that argument is that people speak in hyperbole all the time, but hyperbole itself does not indicate irony or criticism. I can say, &#8220;I am so excited about <em>Spelunky</em> on XBLA that I will prepare a banquet in Derek Yu&#8217;s honor on release day.&#8221; That sentence is essentially the same as &#8220;That kid-choking guy is so awesome I will prepare a banquet for him when he gets out of jail.&#8221; Yet in the first sentence, the first clause is something that I truly mean. In the second sentence (which I&#8217;ve paraphrased from the article), the first clause is meant to be understood as false. Hyperbolic language itself tells us precisely nothing about whether or not a statement is ironic. It&#8217;s the overall context of the article that establishes irony, not specific hyperbolic language.</p>
<p>So the hyperbole argument is a red herring. We&#8217;re back to square one: the article was intended to be received as satire, so why didn&#8217;t I get it? Several people on Twitter told me, &#8220;Well <em>of course</em> he doesn&#8217;t support the choking of a child!&#8221; Again, the editor&#8217;s note tells us that the article&#8217;s satiric bent is &#8220;most obviously denoted by its support of a 46-year-old man who choked a 13-year-old child&#8221;. This ties into another argument I heard on Twitter: if Jonathan Swift&#8217;s <em>A Modest Proposal </em>is clearly satire, then surely McElroy&#8217;s article is equally clearly satire.</p>
<p>The problem with that argument is that <em>A Modest Proposal</em> puts forth a proposal that poor Irish should <del>eat their own children</del> <span style="color: #ff0000;" >sell their children as food to the rich</span> [my bad, thanks <a href="https://twitter.com/#!/cawthraven/status/120881371215429633" >@cawthraven</a>] as a solution to their population problem. It&#8217;s obviously satire because people don&#8217;t and won&#8217;t eat children &#8212; cannibalism itself is an <a href="http://en.wikipedia.org/wiki/Cannibalism#Recent_examples" >incredibly rare phenomenon</a> (especially in the context of 18th century Europe), and cannibalism of children is <a href="http://en.wikipedia.org/wiki/Child_cannibalism" >even more rare</a>. Eating children is obviously outlandish.</p>
<p>On the other hand, a 46-year-old man choking a 13-year-old child because of a multiplayer match is not outlandish. You know why? <em>Because it actually happened, because that is the entire premise of the article in the first place. </em>You know, it being a <em>news</em> article, filed under <em>news</em> on a videogame <em>news</em> website. There are clearly tons of people who support adults choking kids who misbehave, because grown adults assault and abuse children all the damn time. Again, <a href="http://www.joystiq.com/2011/09/30/guy-chokes-a-kid-after-being-made-fun-of-in-black-ops-were/#c34853835" >read the </a><a href="http://www.joystiq.com/2011/09/30/guy-chokes-a-kid-after-being-made-fun-of-in-black-ops-were/2#c34853871" >comments</a> if you want to see some particularly wretched examples.</p>
<p>Lastly, I take issue at the author and his editor hiding behind the shield of satire. The article is not satire. Satire needs to criticize something, and there&#8217;s no criticism in that article: there is only hyperbolic language that we are intended to take as meaning the opposite of what it says.</p>
<p>In other words, the article isn&#8217;t satire: it&#8217;s <em>sarcasm</em>.</p>
<p>But since satire is understood to be something culturally worthwhile, calling the article satire makes Joystiq able to convince a few people that they are beleaguered first amendment champions. Can you imagine if the response was not, &#8220;It&#8217;s satire, you&#8217;re missing the point&#8221; but rather, &#8220;We were being sarcastic, come on!&#8221; If the author and editor called their article what it actually is, they would have been instantly unmasked as juvenile (no, not <a href="http://en.wikipedia.org/wiki/Satires_(Juvenal)" >Juvenal</a>) hacks.</p>
]]></content:encoded>
			<wfw:commentRss>http://tinysubversions.com/2011/10/it-aint-satire/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Another GameMaker HTML5 port</title>
		<link>http://tinysubversions.com/2011/09/another-gamemaker-html5-port/</link>
		<comments>http://tinysubversions.com/2011/09/another-gamemaker-html5-port/#comments</comments>
		<pubDate>Fri, 23 Sep 2011 13:09:23 +0000</pubDate>
		<dc:creator>Darius Kazemi</dc:creator>
				<category><![CDATA[game maker]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[project]]></category>

		<guid isPermaLink="false">http://tinysubversions.com/?p=2059</guid>
		<description><![CDATA[In early 2010 I made my first plane jam game called AF 337. I loaded it into GameMaker HTML5, pressed a button, and it was working in the browser, no extra effort required! I think it&#8217;s running a little slower than the native version, but I&#8217;m pretty pleased with the performance of a completely unoptimized [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>In early 2010 I made my first plane jam game called <a href="http://tinysubversions.com/2010/01/af-337/" >AF 337</a>. I loaded it into GameMaker HTML5, pressed a button, and it was <a href="http://tinysubversions.com/game/af337/" >working in the browser</a>, no extra effort required! I think it&#8217;s running a little slower than the native version, but I&#8217;m pretty pleased with the performance of a completely unoptimized port!</p>
<p><a href="http://tinysubversions.com/game/af337/" >Play the game here!</a></p>
<p>Granted, this is a VERY simple game. I tried the &#8220;one button port&#8221; approach with 9 of my GameMaker games, and only this one managed to be as simple as just pressing a button. I hope to report on more of the issues I&#8217;m having, but some of it so far has to do with Z-indexing and perhaps how it interrelates with code in the Draw event. I think. On the other hand, they&#8217;re fixing bugs daily, so maybe when I try again later it&#8217;ll work.</p>
<p><del>A really big issue I&#8217;m having right now is that sometimes a game will work in Windows, but in HTML5 it&#8217;ll just crash immediately. The problem is I have no way to really debug it when this happens. The code is all minified, so errors come back like &#8220;Undefined variable &#8216;kv&#8217;&#8221;, which isn&#8217;t helpful at all. What I&#8217;d like is a debug mode where I have access to the unminified JavaScript so I can use the great Webkit debug tools to track down issues. I spoke with Russell Kay of YoYoGames on Twitter about it and he said that there might be <a href="http://twitter.com/#!/RussellKay/status/117165222397091840" >something coming soon</a> to help with debugging.</del></p>
<p>(Note on 11/23/11: The above issue is now fixed in GameMaker HTML5. Woo!)</p>
]]></content:encoded>
			<wfw:commentRss>http://tinysubversions.com/2011/09/another-gamemaker-html5-port/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Transcript: Brandon Jones&#8217; WebGL talk at onGameStart</title>
		<link>http://tinysubversions.com/2011/09/transcript-brandon-jones-webgl-talk-at-ongamestart/</link>
		<comments>http://tinysubversions.com/2011/09/transcript-brandon-jones-webgl-talk-at-ongamestart/#comments</comments>
		<pubDate>Fri, 23 Sep 2011 10:02:54 +0000</pubDate>
		<dc:creator>Darius Kazemi</dc:creator>
				<category><![CDATA[html5]]></category>
		<category><![CDATA[transcript]]></category>

		<guid isPermaLink="false">http://tinysubversions.com/?p=2055</guid>
		<description><![CDATA[These are my notes from Brandon Jones’ onGameStart session on WebGL. Brandon&#8217;s the author of the awesome glmatrix. Any mistakes or misinterpretations are my own. My notes are in square brackets. [I came in a little late to this session. Brandon built a Quake 3 level renderer.] Q3 demo had no serverside stuff. All clientside. [...]]]></description>
			<content:encoded><![CDATA[<p></p><p><em>These are my notes from Brandon Jones’ onGameStart session on WebGL. Brandon&#8217;s the author of the awesome <a href="http://code.google.com/p/glmatrix/" >glmatrix</a>. Any mistakes or misinterpretations are my own. My notes are in square brackets.</em></p>
<p>[I came in a little late to this session. Brandon built a <a href="http://media.tojicode.com/q3bsp/" >Quake 3 level renderer</a>.] Q3 demo had no serverside stuff. All clientside. It&#8217;s a horrible idea, not something you want to do with a real game because there are a lot of calcs that don&#8217;t have to happen on the client because you&#8217;re slowing things down. But I wanted it to be a &#8220;view source&#8221; type of educational resource so I built it that way.</p>
<p>To make the clientside parsing nicer, we do parsing in a Web Worker &#8212; same with the movement system. It&#8217;s a simple trace through the BSP tree in Quake where you pass off your position test vector to the Web Worker. I&#8217;m sending the raw BSP format directly to the browser &#8212; bad idea, but again, it&#8217;s for educational purposes. Normalized all the BMPs and PNGs to PNGs. Normalized textures to powers of two since it&#8217;s OpenGLES, not OpenGL. Shaders are parsed from the Q3 material format and parsed to GLSL on the fly.</p>
<p>There&#8217;s no geometry culling AT ALL in the demo. We render every triangle in every frame. At the time (Chrome 6) I couldn&#8217;t find a way to do culling fast enough that it didn&#8217;t kill the frame rate. There is now. But since everything is sorted by material on the scene and we do a single draw call on each material type. It&#8217;s very effective and so I didn&#8217;t need to cull.</p>
<p>The original game uses a test-and-failback system for their textures. The system tries to hit the hard drive multiple times to see if a &#8220;lava&#8221; texture is &#8220;lava.png&#8221; or &#8220;lava.bmp&#8221;. We don&#8217;t want to do that on the web, so we made everything PNG. Since we&#8217;re pulling down from the internet, we put all the materials into a single file by hand to reduce http requests.</p>
<p>Shader format was designed to do everything as multi-pass effects. We could get better performance if we took multipass effects and rendered them in one go using our modern hardware.</p>
<p>So what about the next demo? I was drawn to mobile games. They share a lot of the same limitations that we see on the web. The demo I ended up doing was the iOS version of Id Software&#8217;s RAGE. [Shows a WebGL demo of the iPhone RAGE running, shows that it uses the texture atlas technology. <a href="http://www.youtube.com/watch?v=d0S2dsuSxHw" >Video of the demo here</a>.] RAGE is a really good example of the type of things that our early WebGL games need to be trying for. It knows its limitations and plays to its strengths. All the rendering and all the gameplay are built with mobile in mind. The controls are built to embrace the platform. The gameplay sessions are quick and gratifying.</p>
<p>I will make an admission: the RAGE demo is running on localhost. Pulling in all the texture atlases will not perform well on the web!</p>
<p>When talking about file formats for WebGL, you have two semi-competing goals: you want to download them fast, but you also want to be able to parse them fast. As far as fast downloads goes, the Google Body team has done a great job with their <a href="http://code.google.com/p/webgl-loader/" >WebGL-Loader</a> project. They compress the vertex stream in UTF-8 that creates some very small files that stream down to the file very quickly. There&#8217;s a great <a href="http://webgl-loader.googlecode.com/svn/trunk/samples/happy/happy.html" >million-triangle demo out there</a>.</p>
<p>But if you want better parsing performance, we recently gained a request for a typed array from an XHR request. [Holy crap!] For any model format you can break it down into a big vertex buffer, an index buffer, and some bone/materials info. But the big buffers take the most time to parse usually. You&#8217;re looking through a JSON file or whatever, and you have to loop and parse things individually. With the binary buffer that now comes back from the XHR request, we&#8217;re in a position where we can get all of our vertex data and index data into the GPU just using some subarray calls. Grab your data, bind it directly to gl.Bufferdata, etc. But that requires raw numbers. For non-binary data (elements that aren&#8217;t simple arrays of numbers), use JSON, it&#8217;s just better for handling that.</p>
<p>It should be theoretically possible to download everything as a compressed format, unload to the Filesystem API in uncompressed format, and load from Filesystem.</p>
<p>Please use requestAnimationFrame! Pretty please! Don&#8217;t use setTimeout. (For one thing, requestAnimationFrame pauses rendering when you&#8217;re not on that tab!)</p>
<p>For optimization, everything is pretty much the same as you have on the PC. The main difference is that the difference between GPU and Javascript is a little bit bigger than in, say, C++/GPU, so it can help a little more to push to the GPU. However, browsers get better and better (for example, I can now cull in JavaScript just fine). Also, you want to change state as little as possible. Sort draws by material as a pre-process if possible, reduce your total number of passes, pack multiple meshes into a singe buffer, draw everything that uses the same material/texture in a single call.</p>
<p>Don&#8217;t break up your draw calls based on visibility! In a lot of cases with WebGL, it&#8217;s cheaper to accept overdraw, and instead just reduce the number of draw calls you have to make.</p>
<p>Generally, you&#8217;re probably not going to be GPU limited. You can take advantage of spare GPU cycles instead of having a JS bottleneck. For example, if antialiasing is available on your platform, just go ahead and use it. You probably won&#8217;t lose performance. Don&#8217;t bother turning off texture filtering. Once anisotropic filtering becomes available in browsers, leave them on and crank it up. (Of course, benchmark any of this stuff as your mileage may vary.)</p>
<p>And offline precomputations you can do, do them! Make sure your file format already presorts objects by state, for example.</p>
<p>When you&#8217;re talking about cross platform support, we&#8217;re in a unique scenario, we&#8217;re trying to get things that run on desktop, iPad, iPhone. There&#8217;s competing limitations. It&#8217;s a unique opportunity that in most of the time with a standard desktop game it&#8217;ll send down tons of resources, and the machine picks at runtime how much detail to render. On the web we know what the client looks like (&#8220;you&#8217;re a mobile phone&#8221;) so we can then send only the appropriate data for the platform. Don&#8217;t send anything to the client they don&#8217;t strictluy need.</p>
<p>A good artist is always going to be more effective than any of the shaders that you&#8217;re ever going to have. Good art direction will make more difference in your game than all the performance in the world.</p>
<p>There are a couple things that make WebGL different from standard desktop. Uploading large sets of data (textures, vertex buffers, etc) to the GPU is expensive. For example, pushing a big texture to the GPU would block for a few frames because the texture was bigger than the command buffer. You need to be careful &#8212; if you&#8217;ll push large data, do it as a preprocess or in small chunks. Bandwidth is a valuable resource! A lot of internet connections are capped, you don&#8217;t want to abuse your users&#8217; bandwidth.</p>
<p>JS does make it easy to build inefficient data structures. Your data locality can be all over the place with even a simple tree. It can be worthwhile to store all your data in a TypedArray, which will have good data locality and you can iterate quickly. Don&#8217;t go crazy with abstraction layers (long prototype chains, callbacks, recursion). My demos are fast because the render loop is a simple for loop over every material in the game.</p>
<p>[Ended it with a crazy demo. Showed TwoFort from Team Fortress 2, rendered in a browser at 60 FPS! It apparently can run as fast as 120 FPS.] What you&#8217;re seeing on screen is an accumulation of 1.2 million triangles for this level, approximately 200 MB of resources that get thrown to the browser. Realistically that&#8217;s not feasible for a web game, for now, but it is possible! We were talking yesterday about &#8216;when do we get to do hardcore games in the browser?&#8217; I can say that rendering is not the limitation for the web. The real bottleneck is going to be <em>getting the content to the player</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://tinysubversions.com/2011/09/transcript-brandon-jones-webgl-talk-at-ongamestart/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Ported yesterday&#8217;s plane jam game to HTML5!</title>
		<link>http://tinysubversions.com/2011/09/ported-yesterdays-plane-jam-game-to-html5/</link>
		<comments>http://tinysubversions.com/2011/09/ported-yesterdays-plane-jam-game-to-html5/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 14:32:52 +0000</pubDate>
		<dc:creator>Darius Kazemi</dc:creator>
				<category><![CDATA[html5]]></category>
		<category><![CDATA[project]]></category>

		<guid isPermaLink="false">http://tinysubversions.com/?p=2049</guid>
		<description><![CDATA[So the plane jam game I made the other day was made in GameMaker. Today, YoYo Games released GameMaker HTML5, which I purchased sight unseen because I&#8217;m that kinda guy. Here&#8217;s the port, play it in your browser! I was unable to do my background scrolling effect, but that&#8217;s because it was a horrible horrible [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>So the <a href="http://tinysubversions.com/2011/09/plane-jam-game-unnamed-shmup/" >plane jam game I made the other day</a> was made in GameMaker. Today, YoYo Games released <a href="http://yoyogames.com/gamemaker/html5" >GameMaker HTML5</a>, which I purchased sight unseen because I&#8217;m that kinda guy.</p>
<p><a href="http://tinysubversions.com/game/blockshmup/" >Here&#8217;s the port, play it in your browser!</a></p>
<p>I was unable to do my background scrolling effect, but that&#8217;s because it was a horrible horrible hack that I put in because I was optimizing for speed of coding rather than good code (it being a plane jam and all). Overall I am very impressed with it so far! (For starters, <a href="http://tinysubversions.com/game/blockshmup/html5game/Project1_texture_0.png" >check out the awesome texture packing</a> it does to reduce http requests.) Of course, I love GameMaker in general, so I&#8217;m predisposed to like it, but it seems like they&#8217;re doing the right things as far as JavaScript and web dev is concerned.</p>
<p>It took me about 10 minutes of getting familiar with how the new tool works, and about 3o minutes of figuring out that the way I was abusing Views in GameMaker 8.1 wouldn&#8217;t fly with HTML5. But 40 minutes for a port is great!</p>
<p>It did take me a while to figure out where the game put the rendered HTML/JS files. <del>I&#8217;m still not sure this is exactly where it was supposed to be, but when you compile to HTML5 on Windows 7 it&#8217;ll show you something like:</del></p>
<p><del></p>
<pre>Saving HTML5 file... C:\Users\USERNAME\AppData\Local\Temp\gm_ttt_97380\html5game\Project1.js</pre>
<p></del></p>
<p><del>And then just head over to that location (you want the \gm_____\ folder and everything in it), grab it and upload it!</del></p>
<p>Never mind: just go to File-&gt;Create Application. It says you&#8217;re going to make an EXE but it actually makes an HTML app instead!</p>
]]></content:encoded>
			<wfw:commentRss>http://tinysubversions.com/2011/09/ported-yesterdays-plane-jam-game-to-html5/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

