<?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>Touchy Feely Bollocks</title>
	<atom:link href="http://bezzy.net/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://bezzy.net</link>
	<description>Game Development and Kinaesthetics: Where form meets function.</description>
	<lastBuildDate>Mon, 19 Nov 2012 22:40:06 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>Super Meat Boy Galaxy: Ransomed for Alms</title>
		<link>http://bezzy.net/?p=217&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=super-meat-boy-galaxy-ransomed-for-alms</link>
		<comments>http://bezzy.net/?p=217#comments</comments>
		<pubDate>Mon, 19 Nov 2012 22:14:16 +0000</pubDate>
		<dc:creator>Aubrey</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://bezzy.net/?p=217</guid>
		<description><![CDATA[Donate Now, here, then. Super Meat Boy Galaxy is a prototype I put together for my friend Tommy&#8217;s 30th birthday a bit more than a year ago. I only recently released a video, and it seems to have gained a fair &#8230; <a href="http://bezzy.net/?p=217">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.justgiving.com/SMBGProtype">Donate Now, here, then.</a><br />
<a href="http://www.justgiving.com/SMBGProtype"><img class="alignnone size-full wp-image-218" title="SMBG Ransom" src="http://bezzy.net/wp-content/uploads/2012/11/SMBG-Ransom.png" alt="I never wanted to make money off this... But you could help someone in their darkest hour." width="560" height="746" /></a></p>
<p>Super Meat Boy Galaxy is a prototype I put together for my friend <a href="http://www.supermeatboy.com">Tommy&#8217;s</a> 30th birthday a bit more than a year ago. I only recently released a video, and it seems to have gained a fair bit of attention.<iframe src="http://www.youtube.com/embed/iVItxNSd3JE" frameborder="0" width="560" height="315"></iframe></p>
<p>For me, it was just a bit of a throw away experiment. It was never intended as a &#8220;pitch&#8221; to make such a game (although Tommy and I discussed something a bit like it a long time ago when working on <a href="https://www.youtube.com/watch?v=ioYzlhUywzk">Goo!</a>). The video started to get interest from various<a href="http://www.rockpapershotgun.com/2012/11/14/super-meat-boy-galaxy-is-just-an-experiment/"> reputable web sites</a> and pretty soon, had more youtube views than every original work of mine, combined. As you might imagine, this made me feel&#8230; ehhhh&#8230;<em> &#8220;great&#8221;</em>.</p>
<p>Much to my surprise, some people said they&#8217;d like to try it out, or would be quite excited about a game based on the premise of &#8220;happy death&#8221; 3D platforming. Obviously, this is encouraging to hear, but I&#8217;m trying to be realistic about it all. From experience (soul crushing, inescapable experience) I know that going from a playable concept piece to a full game is degrees of magnitude more difficult than pooping out the initial prototype, while the end result is often only a few times more fun (if at all).</p>
<p>Releasing it as a &#8220;real&#8221; product, for money, has its own issues: I genuinely wouldn&#8217;t have the time to support it as it stands, and I haven&#8217;t the means or hours in the day to develop it further. And developing it further would be rather a case of &#8220;ill gotten gains&#8221;, since I&#8217;m riding the success of Tommy and Edmund&#8217;s fantastic game. Basically, if I could just make prototypes for the rest of my life, that&#8217;s what I&#8217;d do. All the sweet, none of the sour. But then, I&#8217;d never be able to charge for them, so it&#8217;s hardly realistic.</p>
<p>Ethically, and practically, I just can&#8217;t do anything with this project. <em>Charitably</em>, though&#8230;?</p>
<p>To that end, I will be releasing the Super Meat Boy Galaxy prototype. It&#8217;s going to cost you, though.</p>
<p><a href="http://www.justgiving.com/SMBGProtype">I&#8217;ll release the Super Meat Boy Galaxy prototype for free as soon as my demands are met: raise 10,000 quid for The Samaritans, and the prototype will be released, free for all onto the internet.</a></p>
<p>Windows, Mac, and Linux (when I get around to it) builds will be available in one bundle.</p>
<p>Bear in mind that this is a <em>prototype</em>, and as such will not be as friendly and polished as a final game. Its main purpose was to investigate whether Super Meat Boy&#8217;s kinaesthetically pleasing platforming physics could survive the leap to 3D, given the right camera and level layouts.</p>
<p>I&#8217;ll probably use a torrent so that costs aren&#8217;t eaten up in hosting. I have to figure out how to do that&#8230; but it&#8217;s cool, I can probably work it out! No worries! There will be other methods of downloading, also, in case your ISPs are weird about that kind of thing. However you get it, it&#8217;ll be free to copy and pass around. I *may* have to do something about that music before I release, though.</p>
<p>I&#8217;ve chosen <a href="http://www.samaritans.org">The Samaritans</a> to be the beneficiary of these donations. I&#8217;m sorry it&#8217;s not from an international charity, but&#8230; this is for personal and private reasons. I hope you understand.</p>
<p>All donations go through JustGiving.com, which seems like the best way to get money to its target without so many processing fees. Also, it lets you pay what you want, which is good, right?</p>
]]></content:encoded>
			<wfw:commentRss>http://bezzy.net/?feed=rss2&#038;p=217</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Mouse Sampling in Unity3d</title>
		<link>http://bezzy.net/?p=211&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mouse-sampling-in-unity3d</link>
		<comments>http://bezzy.net/?p=211#comments</comments>
		<pubDate>Sun, 09 Sep 2012 18:12:52 +0000</pubDate>
		<dc:creator>Aubrey</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Kinaethstics]]></category>
		<category><![CDATA[Unity3D]]></category>

		<guid isPermaLink="false">http://bezzy.net/?p=211</guid>
		<description><![CDATA[(This is going to be a bit Unity3D heavy, but should point at how polling rates are a technological constraint which can affect gameplay design &#8211; these are real considerations when trying to get the best feeling game possible, and &#8230; <a href="http://bezzy.net/?p=211">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>(This is going to be a bit Unity3D heavy, but should point at how polling rates are a technological constraint which can affect gameplay design &#8211; these are real considerations when trying to get the best feeling game possible, and it&#8217;s even worth avoiding certain kinds of games if you can&#8217;t be sure of the frequency of your interface&#8217;s data).</p>
<p>I&#8217;m working on some home-brew which centers around mouse movement for both camera, and gameplay. I use the physics system to determine game objects&#8217; proximity in a lot of cases (i.e. bullets hitting volumes), so I have to use FixedUpdate to push gameplay forward. But I also want smooth mouse based camera movement &#8211; ideally as fast as the game can render. My camera also follows around the physics object. But physics and rendering update at different rates.<span id="more-211"></span></p>
<p>As a result things seem to fall out of sync, and stutter. Messing with interpolation settings on the rigidbody just doesn&#8217;t cut it, especially when you handle physics updates yourself (setting the rigidbody physics to kinematic pretty much nullifies interpolation, I&#8217;m pretty sure &#8211; correct me if I&#8217;m wrong!).</p>
<p>So if things are going out of sync, what can you do to get them <em>in</em> sync? Well, unfortunately, we don&#8217;t have control over the mouse polling frequency, but we can tailor physics and rendering rates to get something consistent coming into our game.</p>
<h1>Experiment &#8211; Looking at the Raw Input</h1>
<p>I&#8217;ve done a little demo showing what&#8217;s happening to sampled inputs when setting different frame rates. Since it&#8217;s in a web-player, you may want to right-click and fullscreen to override the Unity WebPlayer&#8217;s capping of 50Hz (although it&#8217;s possible that simply setting <em>Application.targetFrameRate</em> may override this, even in the web player? I could be wrong there).</p>
<p><em>Please view the full post to see the Unity content.</em></p>
<p>The two 3D graphs show what values you&#8217;re grabbing when you sample your mouse as a 2D axis, with time being the third axis:</p>
<pre>Vector2 GetRawAxisNow()
 {
 return new Vector2(Input.GetAxisRaw("Mouse X"), Input.GetAxisRaw("Mouse Y"));
 }</pre>
<p>The top one samples from within<em> void Update()</em>, whereas the bottom is sampling from within<em> void FixedUpdate()</em> &#8211; the physics update call on every <em>MonoBehaviour</em>.</p>
<p>The two sliders at the bottom control<em> Application.targetFrameRate</em> and <em>Time.fixedDeltaTime</em>. These are what Render Updates and Physics Update rates are effectively &#8220;capped&#8221; to, respectively. Physics Updates are guaranteed to occur, even at the risk of slowing the game down in real time, whereas render frames drop whenever they like. See this image:</p>
<div class="wp-caption alignnone" style="width: 410px"><a href="http://www.richardfine.co.uk/junk/unity%20lifetime%20poster.png"><img class="  " title="Monbehaviour LifeCycle" src="http://www.richardfine.co.uk/junk/unity%20lifetime%20poster.png" alt="Picture courtesy of Richard Fine (@superpig)" width="400" height="300" /></a><p class="wp-caption-text">Diagram by Richard Fine (@superpig)</p></div>
<p>This means you may have multiple physics updates per frame if the rendering is running slower, <em>or none at all</em> if the rendering is much quicker than the physics fixed update. This is in an attempt to keep the game <em>state</em> running in real time, even if the game is rendering too slowly. This isn&#8217;t always the way you want to go (many arcade bullet hell games accept gameplay slowdown as a <em>feature</em> - the screen fills with bullets, and the resultant processing bottlenecks means you get gameplay slowdown to help compensate. Most 1vs1 fighting games attempt to have 60fps game play for 60fps input polling), but it&#8217;s worth being aware that Unity takes this decoupled approach to meet broader demands.</p>
<h1>A Little Analysis</h1>
<p>When you set the Application.targetFrameRate very high, you get a lot of spiking of input values &#8211; jumping from zero to&#8230; whatever was recorded by the polling, and back to zero again.</p>
<p>This is because  <em>GetRawAxis </em>is only giving you <em>pixels moved since the last Update</em>. If you sample twice before the input is sampled again, it has no new information for you, and comes back as zero, even if your mouse seems to be moving smoothly in real life. Unfortunately, there&#8217;s no way to change how quickly the mouse is polled in unity, as such. It&#8217;s an edge-case desire from the engine for most, but for some kinaesthetic obsessives (like myself and the entire fighting game audience), it&#8217;d be really nice to have.</p>
<p>If you set your Application.targetFrameRate frame rate <em>low</em>, your Update frequency gets capped, and sampling GetAxisRaw gives you the <em>accumulated</em> change in pixel position since the last update you checked. So, if your mouse moves right, 5 pixels, stops a short while, then moves left 4 pixels in-between a render frame (and each of these moves is polled), the result that Update reacts to is just 5-4=<strong>1 pixel</strong>.</p>
<p>You may &#8220;miss&#8221; the fact that the mouse jerked right then left. The move shows up as a slow move to the right instead of a flick, because you&#8217;re getting coarse sampling, and not the individual polled values &#8211; just the accumulated travel since the last time you polled in the respective <em>Render</em> or <em>Physics</em> update.</p>
<p>This may occasionally mean that you &#8220;miss&#8221; the fact that a mouse cursor passed over an area of the screen &#8211; i.e. hover over events on a button will likely be missed if your frame rate has dropped &#8211; the UI equivalent of physics &#8220;tunnelling&#8221;.</p>
<p>You could, if you like, do the equivalent of &#8220;swept&#8221; mouse moves to see if your mouse passes over UI objects at high speed, but this doesn&#8217;t account for the peaks of flicking movements. Starts to get awful complicated, huh?</p>
<p>Mouse smoothing is often a useful technique if your frame rate is faster than your mouse sampling, as it can fill in the gaps. Unity builds in their own kind (just use Input.GetAxis, as opposed to GetAxisRaw, and play around with the settings in Edit-&gt;Project Settings-&gt;Input &#8211; and I recommend putting &#8220;snap&#8221; on if you do &#8211; stops axes having too much sense of &#8220;momentum&#8221; when jerking the mouse in the opposite direction), but you might want to set up your own smoothing systems.</p>
<p>Changing <em>Time.fixedDeltaTime </em>to higher rates than <em>Application.targetFrameRate</em> shows what we already know from Richard&#8217;s diagram: that we&#8217;re only polling as fast as render updates occur. This is pretty annoying, frankly, because you could have multiple physics frames (i.e. gameplay) reacting to the same inputs just because your rendering has spiked. This is why you really don&#8217;t want to use Inputs inside a FixedUpdate() to trigger, say, jumps &#8211; you might get two jump impulses because the physics is acting like you&#8217;re doing a positive edge button press for two frames in a row! And yet, if your game is in any way physics based, FixedUpdate is pushing forward the more &#8220;honest&#8221; version of the game state! Best to cache off your own versions of &#8220;Input.GetKey&#8221; or &#8220;Input.GetButton&#8221; to determine positive or negative edge presses.</p>
<h1>Conclusion</h1>
<p>I don&#8217;t have any perfect answers to this. This is a hard problem to fix, especially without full control over polling rates and missed data. I also still have a lot to learn about this, and am aware that I&#8217;ve only been testing on one machine, here.</p>
<p>But, as for half way fixes and best practices:</p>
<p>In theory, to maintain the smoothest frame rate for mouse inputs, your best bet is to cap your frame rate by setting Application.targetFrameRate close to, or less than the mouse polling frequency.This way you won&#8217;t sample faster than the mouse can possibly give input, and thus you&#8217;ll get smoother camera motion with respect to input (if your mouse is driving camera rotation directly in Updates/LateUpdate rather than physics).</p>
<p>It&#8217;s kinda sensible to do this for a number of reasons &#8211; there&#8217;s not a great amount of point in a game running faster than you can possibly give meaningful inputs to it &#8211; so the rate of a continuous input polling more or less defines what that is (but for obvious reasons, you do want that rate to be high enough to feel like a continuous feedback loop).</p>
<p>If your frame rate <em>exceeds</em> mouse polling, and your mouse is continuously driving anything in the game, you&#8217;re probably going to get something kinda jerky because of all these dead polling takes. That&#8217;s when smoothing is useful&#8230; ish. It can add a sense of momentum to your mouse movements which some people hate. Any interpolation you do for in between frames is, strictly speaking, misleading, and can take away that crisp clean feel that people love from their mice.</p>
<p>Remember that if you&#8217;re using physics collisions in any way, then Time.fixedDeltaTime is, in effect, your gameplay turn speed. Thus, if that is out of sync with input polling, you&#8217;re going to sometimes get more frames of gameplay than are affectable by your player. If your physics updates become so heavy that it slows gameplay enough miss polling checkpoints, you&#8217;re also missing subtle input data &#8211; potentially missing entire button presses if you don&#8217;t implement your own button check code.</p>
<p>Another technique is to decouple the <em>visual</em> elements which are affected by mouse from <em>physics</em> elements which are affected by the mouse. The visual element plays &#8220;catchup&#8221; in terms of positioning and rotation. This is quite the rabbit hole which I can&#8217;t go into detail on here (i.e. your visualization is not a &#8220;true&#8221; representation of your game state, but it&#8217;s at least a bit smoother).</p>
<p>We&#8217;re slightly in the hands of Unity on this one. Since inputs are so fundamental to realtime applications of all walks, I hope that Unity give an input system overhaul some priority, as it can have a negative subconscious effect on a player&#8217;s appreciation of a game. Plus, it&#8217;s rather ancient. For the most part, this level of accuracy is not going to be missed in a lot of games, but do remember that the highest quality games do put a premium on this stuff.</p>
]]></content:encoded>
			<wfw:commentRss>http://bezzy.net/?feed=rss2&#038;p=211</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>DeadZones: Part Six</title>
		<link>http://bezzy.net/?p=198&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=deadzones-part-seven</link>
		<comments>http://bezzy.net/?p=198#comments</comments>
		<pubDate>Sat, 24 Mar 2012 13:41:47 +0000</pubDate>
		<dc:creator>Aubrey</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Kinaesthetics]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Physiology]]></category>

		<guid isPermaLink="false">http://bezzy.net/?p=198</guid>
		<description><![CDATA[We&#8217;re now making the most of the useful range of inputs from the controller, cutting off the noisey extremities of input. At this point, I feel like we&#8217;re at the &#8220;good enough&#8221; point for most games which need analogue input. &#8230; <a href="http://bezzy.net/?p=198">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re now making the most of the <em>useful</em> range of inputs from the controller, cutting off the noisey extremities of input. At this point, I feel like we&#8217;re at the &#8220;good enough&#8221; point for most games which need analogue input. Depending on the design, you might want to go a step further to improve the feel, though.</p>
<p>Currently we have a deflection magnitude vs. output magnitude which looks like this (in red. Old, scribbled out offensive crap in black):</p>
<div>
<dl id="attachment_191">
<dt><a href="http://bezzy.net/wp-content/uploads/2012/01/DeadZonerenormalized.png"><img title="DeadZonerenormalized" src="http://bezzy.net/wp-content/uploads/2012/01/DeadZonerenormalized.png" alt="" width="580" height="400" /></a></dt>
<dd>The deadzone defines the beginning of &#8220;zero&#8221; output, and the gradient increases such that max deflection is max output.</dd>
</dl>
</div>
<p><span id="more-198"></span>While we&#8217;ve gotten rid of the sudden valley around the deadzone, we&#8217;ve also somewhat crunched the useful range of inputs into to the remainder of space after the deadzone are has been removed.</p>
<p>What this means, in terms of feel, is that we&#8217;ve now got a limited <em>physical</em> deflection area to serve the purpose of &#8220;fine control&#8221;: a ring of less than 5mm width on the controller which signifies the &#8220;mid ground&#8221;. Having fine precision is half the point of an analogue control system (even though most games don&#8217;t make much use of it other than to acknowledge it exists through walk/run cycle animation blending or unnecessary stealth sections. Nor should they feel the need to use it if it serves no useful purpose.).</p>
<p>Now that we have a gradual relationship from the DeadZone to full deflection, we certainly have something more kinaesthetically pleasing than having the speed jerk up out of nowhere when we cross the<em> haptically invisible</em> DeadZone. Unfortunately, the <em>introduction</em> or &#8220;attack&#8221; of the slope is still sudden. It&#8217;s like skate boarding into a 45 degree ramp: sure, it&#8217;s not a brick wall anymore (i.e. the deadzone threshold), but the transition is still very noticeable.</p>
<p>Not only do we worry about the transition, but also we need to worry that the remaining physical range of analogue input serves its purpose, and feels like it&#8217;s a true representation of the ergonomic affordances of the input. We need some way of giving the player access to a generous range of low speed inputs for fine tuning. Here&#8217;s an intentionally bad example of this which (true story) was actually suggested to me, and I had to be really polite about it, and say &#8220;No. Please don&#8217;t. I like working here. I don&#8217;t want to have to hurt anyone.&#8221;:</p>
<div>
<dl id="attachment_192">
<dt><a href="http://bezzy.net/wp-content/uploads/2012/01/thisisamess.png"><img title="thisisamess" src="http://bezzy.net/wp-content/uploads/2012/01/thisisamess.png" alt="" width="580" height="400" /></a></dt>
<dd>&#8220;This deadzone&#8217;s in a right state.&#8221; &#8220;What do you suppose you&#8217;ll do about it?&#8221; &#8220;&#8230; Make it worse.&#8221;</dd>
</dl>
</div>
<p>We don&#8217;t want to introduce lots of stepped &#8220;mid way&#8221; dead zones to approximate &#8220;fine control&#8221;, as we&#8217;ll just have that &#8220;invisible threshold&#8221; issue that we had with the main dead zone, but multiplied by however many thresholds you choose to have. Trying to find the sweet spot for your analogue input is going to be harder, because you&#8217;ll be jumping between speeds which are just a little too fast, or a little too slow (like following NPCs in any first person FPS ever). Where this is a ziggurat, we need a pyramid &#8211; a smooth, unstuttering continuous dynamic, which maps nicely into the mind as a simple relationship.</p>
<p>But as mentioned before, we don&#8217;t want to feel too much of a beginning of a ramp up as we cross it. Instead, (and this seems to be the industry standard) we could <em>gradually</em> introduce that slope, like a half pipe, as opposed to a straight ramp.</p>
<p><em>Please view the full post to see the Unity content.</em></p>
<pre>//Power Curves.
 float axisPower = 2.0f;
 float circularPower = 2.0f;

//Use this method for doing a per-axis power curve (not recommended)
 StickInput.x = Mathf.Sign(StickInput.x) * Mathf.Abs(Mathf.Pow(StickInput.x, axisPower));
 StickInput.y = Mathf.Sign(StickInput.y) * Mathf.Abs(Mathf.Pow(StickInput.y, axisPower));

//Use this method for power curving the pure deflection.
 StickInput = StickInput.normalized * Mathf.Pow(StickInput.magnitude, circularPower);</pre>
<div>
<dl id="attachment_193">
<dt><a href="http://bezzy.net/wp-content/uploads/2012/01/powercurve.png"><img title="powercurve" src="http://bezzy.net/wp-content/uploads/2012/01/powercurve.png" alt="" width="580" height="400" /></a></dt>
<dd>Reminder: I&#8217;ve made all the deadzones 0.5 for clarity, but practically, they should be about 0.3</dd>
</dl>
</div>
<p>We should divert to a little physiological explanation: When we&#8217;re first playing a game, we have no real muscle memory. As a result, our thumbs tend to &#8220;search&#8221; rather than &#8220;choose&#8221; the correct pressure on the stick, comparing the fast feedback loop of feel (the pressure of our thumbs on the stick) with the slower loop of visual feedback from the game. Comparing these two inputs (haptic and visual) creates a relationship in our brain (leading to virtual proprioception &#8211; our sense of being in a virtual space).</p>
<p>The visual feed back tells us when the haptic feedback is just right for our current purposes, but we are slower to react to it (~100ms for visual processing vs basically instantaneous for haptic feedback): the controller itself can&#8217;t tell the player they&#8217;ve struck the correct balance &#8211; it&#8217;s just telling the player &#8220;your thumb is here, pushing with this pressure while your avatar/crosshair is moving that fast on screen&#8221;, and so we can match that pressure with the in game behavior.</p>
<p>Your thumbs are essentially performing a &#8220;divide and conquer search&#8221; to find the appropriate pressure to maintain that perfect turn rate in a racing game, or track an enemy as they move across the screen. Since both input and output are gradual continuum, the relationship between the speed in the game and thumb pressure need to line up, too. When this happens, there&#8217;s an intuitive connection between thumb pressure and in game speeds, which allow you to increase and release pressure, and feel a consistently correspondent change on screen.</p>
<p>While the thumb-side of the search is using one of the quickest pieces of brain matter you&#8217;ve got (the motor cortex), the search is still held up by having to wait for visual feedback. The human search algorithm is repeating as fast as the player can see. But this eventually develops into a  <a href="http://en.wikipedia.org/wiki/Bayesian_probability">Bayesian Probability</a> model: this is the essence of your muscle memory &#8211; hotwiring your brain with your thumbs so that you&#8217;re eventually &#8220;hard wired&#8221; to know the relationship between your thumb pressure and the on screen movement. If you&#8217;re at all interested in this sort of thing, it&#8217;s better for me to leave you with <a href="http://www.youtube.com/embed/7s0CpRfyYp8">this video</a>.</p>
<p>Since the thumb &#8220;searches&#8221; the breadth of possible pressures to find the right spot, the &#8220;kink&#8221; in the &#8220;sudden ramp&#8221; version of the game is a real annoyance: the relationship between in game speed and stick deflection feels very arbitrarily split, with no haptics to tell us where the split begins. With the <em>curved</em> version of the deflection graph, as our thumb pushes out, the speed output comes in tangentially to the &#8220;flat&#8221; of deadzone. There&#8217;s no sense of it &#8220;starting&#8221; abruptly. It&#8217;s as if the relationship is continuous &#8211; No kink in the feel. It&#8217;s a seamless transition from nothing to something.</p>
<p>It also helps that the curve is providing a large area of low speed movement, so that you have a decent &#8220;pallette&#8221; of low speeds to choose from. And yes, it does cap out suddenly, but, as luck would have it, we have actual physical feedback in the pad (the circular restrictor plate) to tell the player that they&#8217;ve hit a limit.</p>
<p>This is actually rather elegant: We&#8217;re working the feel of controller into the very fabric of how the game behaves.</p>
<p>One principle we can take from this is that making intuitive controls can often be achieved by trying to make the outcome of the controls a one to one relationship with the controller itself. And this has a lot of implications when it comes to regarding discreet vs. continuous verbs and controls.</p>
]]></content:encoded>
			<wfw:commentRss>http://bezzy.net/?feed=rss2&#038;p=198</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>DeadZones: Part Five</title>
		<link>http://bezzy.net/?p=84&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=deflection-gradients</link>
		<comments>http://bezzy.net/?p=84#comments</comments>
		<pubDate>Sat, 24 Mar 2012 12:38:18 +0000</pubDate>
		<dc:creator>Aubrey</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Kinaesthetics]]></category>

		<guid isPermaLink="false">http://bezzy.net/?p=84</guid>
		<description><![CDATA[In the last section, we&#8217;d been forced to make the least-worst decision in terms of getting the most out of our input ranges by capping off the maximum throw of the stick. It looks and (mostly) feels like it&#8217;s used &#8230; <a href="http://bezzy.net/?p=84">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In the last section, we&#8217;d been forced to make the least-worst decision in terms of getting the most out of our input ranges by capping off the maximum throw of the stick. It looks and (mostly) feels like it&#8217;s used to define a <em>direction</em> and and a <em>magnitude</em>, as opposed to two separate axes clamped off by a circle (which is closer to the truth).</p>
<p>The hardware represents neither of these paradigms perfectly, so we&#8217;ve made the choice to go with what a user <em>perceives </em>that the input allows. The X &amp; Y axis information available can absolutely give us an approximation of this mental model of the stick&#8217;s input, but in cleaning up the maximum and minimum siginals (the upper and lower DeadZones), we&#8217;ve created another problem: one of continuity.</p>
<div id="attachment_190" class="wp-caption alignnone" style="width: 590px"><a href="http://bezzy.net/wp-content/uploads/2012/01/DeadZoneDeflection.png"><img class="size-full wp-image-190" title="DeadZoneDeflection" src="http://bezzy.net/wp-content/uploads/2012/01/DeadZoneDeflection.png" alt="" width="580" height="400" /></a><p class="wp-caption-text">Oh look! There&#39;s a a huge jump up in output around the DeadZone. Who knew?</p></div>
<p><span id="more-84"></span></p>
<p>The springs are providing a <em>gradually</em> increasing force on our thumbs as they slowly push outwards, but the player character speeds in our demos, when leaving or entering the deadzone, are not <em>gradual</em> at all &#8211; they&#8217;re sudden and unexpected.</p>
<p>If our actual force vs. travel graph on the stick matched this (which would feel like frictionless thumb movement within the within the deadzone, then a palpable &#8220;start&#8221; of the spring resistance at the deadzone&#8217;s edge), then this model would be right on. But the spring force is always felt, to different degrees, where ever it&#8217;s placed, from full force at the extremities to zero at the center: a <em>continuum</em> of reactive force.</p>
<p>Compare this to the feel within the game, where the change in speed almost comes as a shock.  There&#8217;s no instant feedback from the haptics of the controller itself to signify that our minute movement should change anything at all (like some kind of a &#8220;notch&#8221; in the mechanism). We only get feedback via the long route &#8211; through the game and back through visual feedback to tell us that we&#8217;re actually moving now, even though the stick has been deflected off the center for quite some time.</p>
<p>The physical affordances of the stick suggest a continuum, but the output gives us a sudden jump, and then a gradual increase of speed, as we increase deflection. This creates a kind of<em> &#8220;kinaesthetic dissonance&#8221;</em> between controls and in game action. We need the jump from &#8220;dead&#8221; to &#8220;not dead&#8221; to be gradual in order to better marry the two feels.</p>
<p>So here&#8217;s what we do: Code: Re-normalize the range. We&#8217;re re-mapping the magnitude of the true input such that at full input deflection, we get full output deflection, but at the deadzone&#8217;s beginning, we get a zero output, rather than stepping up suddenly.</p>
<p><em>Please view the full post to see the Unity content.</em></p>
<p>Hooray! Starting to feel considerably less like complete thumb-junk! Note that the magnitude readings on the left only occur between 0.5 (our deadzone value) and 1, while the outputs on the right go from zero all the way to one.</p>
<p>We&#8217;ve cropped off the noisey extremities through dead zoning (lower and upper bounds), and now we&#8217;ve re-mapped the output to the remaining useful input range we received.</p>
<p>But there&#8217;s still more we can do!</p>
]]></content:encoded>
			<wfw:commentRss>http://bezzy.net/?feed=rss2&#038;p=84</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DeadZones: Part Four</title>
		<link>http://bezzy.net/?p=82&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=clamping-excessive-magnitudes</link>
		<comments>http://bezzy.net/?p=82#comments</comments>
		<pubDate>Tue, 06 Mar 2012 21:12:23 +0000</pubDate>
		<dc:creator>Aubrey</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Code Kinaesthetics Hardware]]></category>

		<guid isPermaLink="false">http://bezzy.net/?p=82</guid>
		<description><![CDATA[This part of the deadzones review is a little bit of a sojourn into a mistake I made. Apart from anything else, I feel like developers don&#8217;t air their failures enough, even though, for other developers, they must surely be &#8230; <a href="http://bezzy.net/?p=82">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>This part of the deadzones review is a little bit of a sojourn into a mistake I made. Apart from anything else, I feel like developers don&#8217;t air their failures enough, even though, for other developers, they must surely be more useful knowledge than the self evident successes: it seems somewhat immoral to try to simply copy successes without working through the hidden problems yourself, but equally immoral to not pass on warnings of danger ahead.</p>
<p>So, indulge me here as I try to see, with a more analytic hat on, what exactly was going on.</p>
<p><span id="more-82"></span></p>
<p>Back when working on Brink, I swore blind that <a href="http://mathproofs.blogspot.com/2005/07/mapping-square-to-circle.html">this technique of mapping a square input onto a circle</a> was the way to go with regards to dealing with joystick inputs. I had made the (false) assumption that the values being fed in were the full range of a square, between -1 and 1 on two axes, and that, since the XBox controller was clearly a circular gate, it must be magically mapping the inputs from a kind of Eular angle into a square (i.e. Pitch and Yaw between -45 and +45 on each axis). As <a title="Errant Signals" href="http://bezzy.net/?p=18">Part Zero&#8217;s</a> analysis of what inputs are actually passed in, I was horribly mistaken.</p>
<p>I had been working on an aim assistance system for the console versions of the game, doing a lot of research into the best-of-breed, and even adding a few novel additions to the mix to reduce the noticeable gap in fidelity between mouse and controller aiming. I had something working in prototype which, for the most part made aiming really rather painless, without being patronizing, to the point that it had to be toned down so that there was at least some skill involved. I was quite pleased with my cleverness. Ah, the hubris.</p>
<p>But mid way through working on it, something intangible felt wrong with the controls&#8230; as hard as I tried, I seemed unable to cast my view in a perfect circle just by easing around its physical limits. I wondered if it was something to do with the deltaTime (the time between rendered frames) dipping when looking at the ground vs. the sky, but I was testing in very basic block-out maps. Rolling the stick under my thumb caused some sort of warping effect which made off-cardinal directions just slightly faster to turn with than pure cardinals. It was very hard to put my finger on. Thumb on. Shut up.</p>
<p>I had assumed that something had to be wrong with the aim assistance code I had prototyped: there were something like 3 or 4 contributing factors to the speed at which you turned for the same input, each of them quite involved, modulating and amplifying one another continuously, based on your surroundings. Rather than turn that stuff off and figure it out by knocking down my assumptions, I let it fester in the back of my mind for a while, while no-one called me to task on it.</p>
<p>Eventually, I happened upon this diagram, and thought I had found the answer to the weirdness, and that I was a darn sight cleverer than everyone else who had ever lived.</p>
<div class="wp-caption alignnone" style="width: 696px"><img src="http://farm1.staticflickr.com/16/21509286_8cc734fd70_o.gif" alt="" width="686" height="340" /><p class="wp-caption-text">Warping a Square into a Circle by using science like in that movie &quot;She&#39;s All That&quot;</p></div>
<p>My attempt at re-mapping inputs in (what I thought was) an elegant way assumes that the inputs we&#8217;re getting are supposed to be a square shape, coming from a circle. If that were true (and, I&#8217;ll reiterate: it&#8217;s not) you&#8217;d <em>have</em> to deform that square input, so that you aren&#8217;t just throwing away those curved corners of detail by choping off any deflection greater than one unit of magnitude.</p>
<p>Luckily, a <em>real</em> programmer caught the issue in time and fixed it, or that game would have been completely mediocre! Ha ha haa! This is real detail we have to work with:</p>
<div id="attachment_129" class="wp-caption alignnone" style="width: 464px"><a href="http://bezzy.net/wp-content/uploads/2012/01/AnalogueStickRawMapping1.png"><img class="size-full wp-image-129" title="AnalogueStickRawMapping" src="http://bezzy.net/wp-content/uploads/2012/01/AnalogueStickRawMapping1.png" alt="" width="454" height="340" /></a><p class="wp-caption-text">How much input is actually noticed by the XBox controller vs. how much is implied it notices.</p></div>
<p>Thus, we are more or less warping an <em>octogon</em> into that &#8220;circularized&#8221; space.</p>
<p><em>Please view the full post to see the Unity content.</em></p>
<p>On the left hand side is a &#8220;clamped&#8221; upper limit, which simply &#8220;chops off&#8221; the extra detail we have around the corners. In all honesty, this is all I should have used, if any cap at all.</p>
<pre> StickInput = StickInput.normalized * Mathf.Clamp01(StickInput.magnitude);</pre>
<p>On the right hand side of the demo is the &#8220;Circularized&#8221; version of the input. We&#8217;ve taken our incompleted roughly octangular inputs and warped them such that the outer perimeter of the square morphs into a circle, with every point inside it distorting with respect to the ratio of the distance to the square edge vs. the distance to the circle edge (err, always 1) along that angle. I think, anyway.</p>
<p><a href="http://farm1.staticflickr.com/18/23714881_836dd09542_o.jpg"><img class="alignnone" src="http://farm1.staticflickr.com/18/23714881_836dd09542_o.jpg" alt="" width="163" height="78" /></a></p>
<pre>Vector2 CircularizedInput = new Vector2(StickInput.x * Mathf.Sqrt(1.0f - ((StickInput.y * StickInput.y) / 2.0f)),
 StickInput.y * Mathf.Sqrt(1.0f - ((StickInput.x * StickInput.x) / 2.0f)));</pre>
<p>This distortion of an <em>incomplete</em> input square from the 360 controller therefore results in a kind of weird &#8220;four leaf clover&#8221; mapping. Trying to move the character in a circle ends up being kinda wobbly with the circularized version. Again, it&#8217;s subtle, but if you&#8217;ve got sensitive thumbs, it&#8217;s the sort of irritation which will get under your skin.</p>
<p>Clamping simply <em>destroys</em> any input signal whose deflection exceeds 1. Bending the input onto a sphere maintains the entire signal, but because of the hardware, means we never hit a &#8220;True&#8221; 1.0 magnitude on the diagonals. Unfortunately, because we&#8217;re sending in a pre-cauterized signal, we&#8217;re only getting out a part of the distorted range, with respect to deflection. Along the diagonals, the equation expects a magnitude of root 2 to be remapped to a maximum value of 1. However, the biggest input we&#8217;re giving is just a little over 1.0, but no-where near the magic 1.414 .</p>
<p>We get a rather distorted/chopped off range of the &#8220;continuum&#8221; along the diagonals versus the cardinal axes. This makes any <em>partial</em> deflection feel badly weighted &#8211; as if we gain faster speeds in the mid zones of the diagonals than we do in the mid zones of the cardinals.</p>
<p>So, once again, there&#8217;s really no perfect answer to clamping the extremities just right &#8211; it&#8217;s a case of picking the least worst approach. I think in this demo&#8217;s case, we don&#8217;t really want to &#8220;warp&#8221; the linear deflection differently based on what angle we push the stick in. Therefore I&#8217;ll continue by using a simple circular clamp.</p>
<p>However, the idea of &#8220;warping&#8221; inputs rather than just shutting them down altogether does start us thinking down a different track: we can see that it maintains the continuity of the signal (i.e. this sudden jump from zero speed to half speed due to the 0.5 circular deadzone is pretty harsh!), and that it could have a more intentional affect on how the controls feel.</p>
<p><a href="http://bezzy.net/?p=80">Previous Part</a> | Next Part (soon)</p>
]]></content:encoded>
			<wfw:commentRss>http://bezzy.net/?feed=rss2&#038;p=82</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>DeadZones: Part Three</title>
		<link>http://bezzy.net/?p=80&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=circular-deadzones</link>
		<comments>http://bezzy.net/?p=80#comments</comments>
		<pubDate>Sun, 04 Mar 2012 21:43:28 +0000</pubDate>
		<dc:creator>Aubrey</dc:creator>
				<category><![CDATA[Articles]]></category>

		<guid isPermaLink="false">http://bezzy.net/?p=80</guid>
		<description><![CDATA[Last time we found that although we could stop the wavering of our character when we released our controls, we also introduced a lot of weird feeling Kinaesthetic Artifacts as  a result of deadzoning our axes independent of one another. These &#8220;square&#8221; deadzones do &#8230; <a href="http://bezzy.net/?p=80">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Last time we found that although we could stop the wavering of our character when we released our controls, we also introduced a lot of weird feeling <em>Kinaesthetic Artifacts</em> as  a result of deadzoning our axes independent of one another.</p>
<p>These &#8220;square&#8221; deadzones do have their uses (in console FPS games where players mean to sweep their aim perfectly across the horizon, but, when using a &#8220;purer&#8221; signal, would actually find their aim wavering up and down as they tried. This is one of the subtler forms of aim assistance going on in most console FPS games*) but nothing about the visibly <em>circular</em> restrictive outer limit of the XBox controller screams &#8220;make me stick to cardinal directions!&#8221;.</p>
<div class="wp-caption alignnone" style="width: 303px"><img src="http://chestofbooks.com/crafts/metal/Tin-Sheet-Iron-Copper-Plate/images/Fig-77-To-describe-an-Octagon-or-Square-Top-or-Cover.jpg" alt="" width="293" height="290" /><p class="wp-caption-text">Fig 1. A, B, C, D, E, F, G, H &amp; I: These are all lines.</p></div>
<p>It stands to reason that a circular input wants to result in a circular output: the <a href="http://en.wikipedia.org/wiki/Affordance">affordances </a>of the interface should be matched by the expression space inside the game itself. In our example, square dead zones didn&#8217;t work in our favour, so let&#8217;s try Circular Dead Zones instead.</p>
<p><span id="more-80"></span></p>
<p><em>Please view the full post to see the Unity content.</em></p>
<p>Now we have a deadzone which doesn&#8217;t clamp and deform the direction of the stick. We&#8217;re still rid of the &#8220;wandering&#8221; so notable when there is no DeadZone at all.</p>
<p>Compare and contrast the Square and the Circular deadzones. Note how, instead of a blank cross shape, we have a circular black shape in the center of the output. When we push in a direction, we get that direction in game, rather than it snapping to north, south, east, and west. Great!</p>
<p><a href="http://bezzy.net/wp-content/uploads/2012/01/SquareVs.CircularDeadzone1.png"><img class="alignnone size-full wp-image-170" title="SquareVs.CircularDeadzone" src="http://bezzy.net/wp-content/uploads/2012/01/SquareVs.CircularDeadzone1.png" alt="" width="581" height="213" /></a></p>
<p>Instead of independently DeadZoning the stick axes, we&#8217;re DeadZoning the <em>Vector Magnitude &#8211; deflection regardless of direction</em>. And as it turns out, the code is a lot more elegant and easy to read than deadzoning the axes separately (in Unity&#8217;s API, anyway).</p>
<pre>float deadZoneMagnitude = 0.5f;//Yes, still humourously large for the purposes of explanation.
//the ".normalized" version of a vector in unity gives that vector's direction, but not its length... in effect, the length is "1", in the direction the vector was already pointing.
StickInput = StickInput.normalized * (StickInput.magnitude &lt; deadZoneMagnitude ? 0.0f : StickInput.magnitude);//Set the stick magnitude to zero if it's less than the deadzone value. Otherwise, maintain direction and magnitude.</pre>
<p>There&#8217;s a bit of a problem here, though: Notice how the Magnitude read-out sometimes exceeds 1.0. This is because a deflection reaching into the upper right hand corner (1,1) has a <em>magnitude</em> of root 2 ( Pythagorus! Sqrt(1^2 + 1^2) = 1.41421), which, if you believe in maths, is actually <em>greater</em> than 1.</p>
<p>We don&#8217;t get all the way to 1.41421: as mentioned in <a title="Errant Signals" href="http://bezzy.net/?p=18">Part Zero</a>, the stick is physically clamped, and won&#8217;t even give us the corner input, though it does give us irritating values which just exceed what we, as players, expect from the interface.</p>
<p>One speculates that this was a hard decision made in producing this interface <em>en mass</em>: it would probably be extortionately expensive to create something perfectly tuned, whilst maintaining any amount of durability.</p>
<p>The least worst compromise seems to have been made: you get a bit more throw in the corners than you expect, just not all the way up to Root 2. And that&#8217;s more or less enough to get 90% of the way to a proper representation of the input a player is making.</p>
<p>As users, we believe, due to the design of the controller housing, that we&#8217;ve been given the freedom of a 1 unit radius circle, and no more. We actually don&#8217;t <em>want</em> more than is implied. It just doesn&#8217;t intuitively make sense that the controller would read more than it&#8217;s implying it reads. That breaks the implied contract between us and the games we play at a fundamental level. It&#8217;s not by a lot, but we&#8217;re so subconsciously sensitive to these little irks that it <em>does</em> matter.</p>
<p>In our game&#8217;s example, I&#8217;m simply multiplying displacement per frame (speed) by the magnitude of the input (which is typical of any analogue based game). This means that at some angles, our character might actually <em>exceed</em> their top speed.</p>
<p>That may be desirable in some designs: it proved to be one of the component parts of strafe jumping in Quake 2 &amp; 3)**, but in our current character controller example, it seems like an arbitrary and bothersome skill to ask of someone to aim their camera at 45 degrees to their heading to gain optimal speed.</p>
<p>There&#8217;s a couple of ways to &#8220;clamp&#8221; this magnitude, thus funneling the implied stick inputs back to to the range they&#8217;re supposed to be in. Both approaches have some small issues. You&#8217;d think it&#8217;d be straightforward, but this nuance deserves another article! Next time, I welcome you to peruse some of my proudest failures in kinaesthetics.</p>
<p><a href="http://bezzy.net/?p=77">Previous Part</a> | Next Part (Soon!)</p>
<p>*I&#8217;d also argue that, considering <a title="Errant Signals" href="http://bezzy.net/?p=18">Part Zero</a>&#8216;s point, that we&#8217;re all still fairly inaccurate machines, ourselves, and lean heavily on the guidance of the hardware&#8230; so why not allow software to gently steer us in the right direction, too? Not to the point of playing the game for us, but for the sake of meeting our intent half way. More on that much further down the road.</p>
<p>**In the case of first person shooters, the diagonal speed boost makes <em>some</em> amount of sense from a pure dexterity proving point of view &#8211; building speed in this way implicitly requires your aiming skill to compensate, since you&#8217;ll rarely be moving toward what you&#8217;re aiming at if you desire the benefits of increase speed. And that&#8217;s fine and dandy on a keyboard where we can accurately read the 4 diagonals. With these haphazardly clamped inputs on controllers, however, we&#8217;re not kidding anyone: The benefit of the extra diagonal deflection is so minuscule (about 1mm of &#8220;extra&#8221; signal vs. the cardinals) that it doesn&#8217;t really feel like a fully honed, intentional mechanic could come out of it: all that&#8217;s left is an unexpected Kinaesthetic Artifact. As such, that&#8217;s the sort of thing that we probably want to clean up at the lowest level of our input engine architecture, lest it permeate unexpectedly into other systems which assume that input magnitude resides between 0 and 1.</p>
]]></content:encoded>
			<wfw:commentRss>http://bezzy.net/?feed=rss2&#038;p=80</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DeadZones: Part Two</title>
		<link>http://bezzy.net/?p=77&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=square-deadzones</link>
		<comments>http://bezzy.net/?p=77#comments</comments>
		<pubDate>Tue, 28 Feb 2012 21:46:06 +0000</pubDate>
		<dc:creator>Aubrey</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Kinaesthetics]]></category>

		<guid isPermaLink="false">http://bezzy.net/?p=77</guid>
		<description><![CDATA[Previously on DeadZone: In The Part One, our capsule man couldn&#8217;t sit still thinking of all the fun he could be having in Part The Two. Little did he know that we added a signal threshold, locked him down to &#8230; <a href="http://bezzy.net/?p=77">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Previously on DeadZone: In The Part One, our capsule man couldn&#8217;t sit still thinking of all the fun he could be having in Part The Two. Little did he know that we added a signal threshold, locked him down to the ground! Welcome, to DeadZone: The Part Two: The Square DeadZone: Colon Central.</p>
<div class="wp-caption alignnone" style="width: 490px"><a href="http://www.daskeyboard.com/"><img src="http://www.colourbox.com/preview/2676321-61510-keyboard-with-thumb-tacks.jpg" alt="" width="480" height="319" /></a><p class="wp-caption-text">If you value your fingers, may I humbly suggest a keyboard with Cherry Switches, i.e. DasKeyboard .com</p></div>
<p><span id="more-77"></span></p>
<p><em>Please view the full post to see the Unity content.</em></p>
<p>Compare and contrast. Mr. White crawls in all sorts of directions like a quietly drunk man, while Mr Red stays stock still, until absolutely signalled to move. However, Mr Red lacks the fidelity of movement speed and heading that Mr. White does, jumping up to half his natural pace as the stick is deflected, and unable to properly comb every subtle degree of deflection, or direction. Mr. Red was born to walk straight lines, ideal after he and Mr. White drive home after a heavy night, and get pulled over by the rozzers, but quickly switch seats before the Police Person comes to test their bibability.</p>
<p>Why the heck this happens? This the heck happens because I put this code in (roughly adapted to help obfuscate and confuse):</p>
<pre>float squareDeadZoneVal = 0.5f;//This is set a bit too high in the demo, for comedy effect.

//Read in your input (note, in Unity, you'll want to set up your joystick axes in the Input Manager, and try to turn off all their smoothing McGubbins nonsense. That's for kids. You're in Terror Town, now)
Vector2 StickInput = new Vector2(Input.GetAxisRaw("JoystickAxisX"), Input.GetAxisRaw("JoystickAxisXY"));

//Each axes' magnitude is considered separately. If it's less than the squareDeadZoneVal, it's set straight to zero. So obviously awful, but bear with me.
 StickInput = new Vector2(Mathf.Abs(StickInput.x) &lt; squareDeadZoneVal ? 0.0f : StickInput.x, Mathf.Abs(StickInput.z) &lt; squareDeadZoneVal ? 0.0f : StickInput.y);</pre>
<p>By simply killing the input signal below a threashold, we stop the character wavering around. This is normally the neophyte coder&#8217;s first approach to fixing DeadZones, as it&#8217;s obvious enough, and basically does the job. But we are<em> Real Pro Dudes</em>, so we&#8217;re going to see what the heck is the big problem with this all the time.</p>
<p>How does this <em>feel</em>? Well, you can clearly come to a stop very easily. Moving in straight forward/back, left/right directions is easy enough, but trying to move in a &#8220;North by North West&#8221; angle is irritatingly hard to maintain. Just as we think we&#8217;ve got the correct angle, it snaps back to North. It&#8217;s as if we&#8217;ve lost the &#8220;angular fidelity&#8221; around the cardinal (up,down,left,right) directions, though we maintain some truncated detail around the diagonals. Odd.</p>
<div>
<dl id="attachment_154">
<dt><a href="http://bezzy.net/wp-content/uploads/2012/01/SquareDeadZoneFilteredInput.png"><img title="SquareDeadZoneFilteredInput" src="http://bezzy.net/wp-content/uploads/2012/01/SquareDeadZoneFilteredInput.png" alt="" width="289" height="246" /></a></dt>
<dd>Valid outputs when inputs are filtered through a &#8220;Square Deadzones&#8221;</dd>
</dl>
</div>
<p>Note the joystick blotter after a bit of playing: You end up with a dark, square area at the center of the dead zoned blotter. This can be seen in the blank areas in a &#8220;cross&#8221; shape. This is because I&#8217;m DeadZoning each axis independently, and it&#8217;s created a certain amount of artifacting from this type of input filtering. This can actually be useful in circumstances where you want grid- based movement.</p>
<p>There&#8217;s even more you can do to make the diagonals purely diagonal, rather than &#8220;digital on the cardinals, analogue in the corners&#8221;. Add this code to get more of an 8 way joystick effect going:</p>
<pre>if (Mathf.Abs(StickInput.x) &gt; squareDeadZoneVal &amp;&amp; Mathf.Abs(StickInput.y) &gt; squareDeadZoneVal)
 {
 //Both Axis are providing a signal. Set both to the average of both.
 //This could be done more elegantly, I admit, but you try coding this stuff sober. I don't know what I am doing with my life. It's like I'm stuck in a fog which won't dissipate.
 float averageValueUnsigned = (Mathf.Abs(StickInput.x) + Mathf.Abs(StickInput.y)) /2.0f;
 StickInput.x = Mathf.Sign(StickInput.x) * averageValueUnsigned;
 StickInput.y = Mathf.Sign(StickInput.y) * averageValueUnsigned;
 }</pre>
<p><a href="http://bezzy.net/wp-content/uploads/2012/01/8WayAnalogue.png"><img class="alignnone size-full wp-image-155" title="8WayAnalogue" src="http://bezzy.net/wp-content/uploads/2012/01/8WayAnalogue.png" alt="" width="278" height="231" /></a></p>
<p>This still maintains the deflection magnitude of the input (i.e. you can move half speed in certain directions). This might be interesting for a game where you want a player to move between squares on a grid, but want to allow them to do it quickly or slowly. But let&#8217;s face it. You&#8217;re weird. Don&#8217;t do this.</p>
<p>If you want to just get <em>digital</em> output from the analogue (i.e. direction &#8220;on&#8221; or &#8220;off&#8221;), you might think you could happily set the dead-zone higher, so that there&#8217;s no foolin&#8217;. But beware the <em>dead corners </em>we noticed in the raw input! More than about 0.8, and you may be <em>culling</em> <em>corner inputs altogether!</em></p>
<p>If you want to interpret the analogue as a pure, 8 way input, as the Gods of StreetFighter intended, you might as well keep your dead-zone down around 0.3, and just normalize the previous code for any (non zero) input so that you only have 9 possible outputs, rather than risk the sticks not actually reaching a larger dead-zone in the corners.</p>
<p><a href="http://bezzy.net/wp-content/uploads/2012/01/8-Way-Digital.png"><img class="alignnone size-full wp-image-156" title="8 Way Digital" src="http://bezzy.net/wp-content/uploads/2012/01/8-Way-Digital.png" alt="" width="254" height="248" /></a></p>
<p>If you&#8217;re veering toward using the analogue deflection in your game, you might be thinking &#8220;this dead zone is too big!&#8221;. You&#8217;re right. It&#8217;s at 0.5, which is a bit crazy. In my experience, somewhere between 0.17 and 0.25 is normally a decent enough dead-zone for an analogue control scheme.</p>
<p>It&#8217;s also worth noting that battered, worn, old sticks are going to need bigger deadzones because their springs are used up and floppy. I recommend veering toward that upper limit and designing around the issue, instead of crying when people complain that the DeadZone&#8217;s not big enough.</p>
<p>Some developers like to give players access to the various axes&#8217; deadzones for this reason (especially on PC, where the zoology of controllers is considered more diverse) (also note, one deadzone value does not fit all sticks on a joystick. Maddening but true).</p>
<p>The underlying code is pretty trivial in of itself (and you&#8217;ll probably do it as par for the course). I&#8217;d warn that creating a nice user interface for people to tweak it is the brunt of the work, but if it can make just one person not tell you you&#8217;re incompetent on an internet forum, surely it&#8217;s worth the extra hours or days? Maybe? Failing a full UI treatment, there&#8217;s always text config files for people who care hard enough to open notepad for something other than writing tiny cries for help to themselves, and then publishing it on a blog by mistake.</p>
<p>But, what if we don&#8217;t want this cardinal-heavy aim that seems to be an artifact of square dead-zones? Say you&#8217;re making Zuma for XBox live, where you&#8217;re aiming in big sweeping arcs and are counting on good feeling 360 degree sweeps and&#8230; actually, yeah, Zuma really messed that up: They used a square dead zone exactly in the wrong place. So what&#8217;s the alternative? Yeah, I think you can guess.</p>
<p><a href="http://bezzy.net/?p=31"> Previous Part</a> | Next Part (Soooon)</p>
]]></content:encoded>
			<wfw:commentRss>http://bezzy.net/?feed=rss2&#038;p=77</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DeadZones: Part One</title>
		<link>http://bezzy.net/?p=31&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=no-deadzones</link>
		<comments>http://bezzy.net/?p=31#comments</comments>
		<pubDate>Tue, 28 Feb 2012 20:29:16 +0000</pubDate>
		<dc:creator>Aubrey</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Kinaesthetics]]></category>

		<guid isPermaLink="false">http://bezzy.net/?p=31</guid>
		<description><![CDATA[Apologies in advance to anyone who feels this set of articles is a bit obvious. DeadZones, right? If you don&#8217;t have them confused them with a Jason Statham movie, you know what they are, and why they&#8217;re there. They&#8217;re self &#8230; <a href="http://bezzy.net/?p=31">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Apologies in advance to anyone who feels this set of articles is a bit obvious. DeadZones, right? If you don&#8217;t have them confused them with a Jason Statham movie, you know what they are, and why they&#8217;re there. They&#8217;re self evident. Right?</p>
<p>Well, yes, admittedly yes. Mostly. Dealing with deadzones is so straightforward in practice that no-one really ends up talking about the subtleties. There are like, 5 subtleties, I&#8217;m guessing. Missing these subtleties creates the creeping irritations which undermine a game. So subtle are these that most players won&#8217;t be able to articulate why they&#8217;ve not been able to engage fully with the game.</p>
<div class="wp-caption alignnone" style="width: 510px"><img src="http://media1.break.com/dnet/media/2008/10/98%20Hand%20In%20A%20Cows%20Butt.jpg" alt="" width="500" height="375" /><p class="wp-caption-text">Guerrilla Games QA hard at work on KillZone 2 controls. Sure, they look happy. But they are Dutch.</p></div>
<p><span id="more-31"></span>So yes, we need to talk about this stuff. It&#8217;s fundamental. It will save you some time and heartache. And although it&#8217;s currently focusing on the XBox 360 controller (thanks commenters: I am aware that other devices exist), there are principles here which expand out into other interfaces.</p>
<p>I tend to find that although games come out with great feeling controls, it&#8217;s not without a lot of tweaking. One might think of Super Meat Boy&#8217;s control scheme as &#8220;simple&#8221;, but 2 solid man months of work were poured into getting it just right, and it shows. It&#8217;s not just for the end user, either: that attention to detail no doubt made a labour of love easier to develop than if the core game play was off for the entire development*.</p>
<p>This trial and error process is expensive: Just one of Tommy Refenes&#8217; man hours lasts about 28 earth days. Don&#8217;t be fooled into thinking this is trivial. The iteration involved is always necessary to some degree, but these articles aim to stop you stepping on some obvious, and not-so-obvious landmines.</p>
<p>Below is a simple little character controller: like last time, you can plug in an XBox 360 Controller, click on it, and start moving the guy around. I&#8217;m simply moving the origin of this little capsule around over time, based on the &#8220;deflection&#8221; of the joystick.</p>
<p><em>Please view the full post to see the Unity content.</em></p>
<p>With the raw input signal coming from the joystick affecting the character, notice how hard it is to stand on the spot. Not good if you&#8217;re looking to get this fella to move around on tight platforms. If your joystick is especially knackered, it&#8217;s a nightmare to re-center the stick perfectly, and your character (or reticle, or whatever you&#8217;re controlling with raw analogue inputs) slides around, despite the fact that you may not even be touching the stick at all! This is why games almost always add an area around the zero of a joystick where no through-signal is yielded. This is called a &#8220;DeadZone&#8221;.</p>
<p><a title="Errant Signals" href="http://bezzy.net/?p=18">Previous Part</a> | <a href=" http://bezzy.net/?p=77">Next Part</a></p>
<p>*Spending every day of development with underwhelming controls is going to get you down. Trust me on this. Trying to add extra features to hide flaws in something so fundamental isn&#8217;t fooling anyone, either. Just respect their importance, and fix that shit.</p>
]]></content:encoded>
			<wfw:commentRss>http://bezzy.net/?feed=rss2&#038;p=31</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Errant Signals</title>
		<link>http://bezzy.net/?p=18&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=errant-signals</link>
		<comments>http://bezzy.net/?p=18#comments</comments>
		<pubDate>Wed, 15 Feb 2012 23:12:16 +0000</pubDate>
		<dc:creator>Aubrey</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Kinaesthetics]]></category>
		<category><![CDATA[Physiology]]></category>

		<guid isPermaLink="false">http://bezzy.net/?p=18</guid>
		<description><![CDATA[In the Spirit of &#8220;Do, Don&#8217;t show&#8221;, I&#8217;d like to open this series on the XBox 360 controller to let you feel what&#8217;s really happening when you use a half decent joystick. And the truth is, what goes on under &#8230; <a href="http://bezzy.net/?p=18">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In the Spirit of &#8220;Do, Don&#8217;t show&#8221;, I&#8217;d like to open this series on the XBox 360 controller to let you feel what&#8217;s really happening when you use a half decent joystick. And the truth is, what goes on under the hood is uglier than you think. After this, you&#8217;re going to run up and hug the first developer you know who has gotten their control scheme just right, and whisper tearfully in their ear &#8220;I&#8217;m so sorry&#8230; I didn&#8217;t know!&#8221;<span id="more-18"></span></p>
<p>First off, grab a USB 360 controller, and plug it in. No wait! Install the Unity Plugin if you haven&#8217;t already. Actually, the order&#8217;s not important. Do not freak out! It&#8217;s not a big deal! Once you&#8217;ve got that sorted, click on the thing below:</p>
<p><em>Please view the full post to see the Unity content.</em></p>
<p>If you&#8217;ve already got to manipulating your inputs (and there is no way to say that which doesn&#8217;t sound completely sexy; sorry, I tried), you&#8217;ll see that you&#8217;re plastering these two textures with white pixels. There&#8217;s no special code distorting the stick&#8217;s inputs: this is the raw signal straight from the source. Or, at least, as raw as Unity will give it to you (which, I&#8217;m guessing, is as clean as any other API).</p>
<p>Try playing around with the sticks, almost meditating on what you&#8217;re doing, and how it feels.</p>
<p>At some point, you&#8217;ll find yourself tracing the extremities of the analogue thumbs, moving the sticks in a circular motion, resting on the edges of the controller case&#8217;s gate.</p>
<p><a href="http://bezzy.net/wp-content/uploads/2012/01/OuterEdges.png"><img class="alignnone size-full wp-image-33" title="OuterEdges" src="http://bezzy.net/wp-content/uploads/2012/01/OuterEdges.png" alt="Feeling the outside edges of inputs of an XBox 360 Controller." width="495" height="274" /></a></p>
<p>In deflecting the sticks to the physical limit of the circular gate housing each stick, you&#8217;d expect a perfect circle to be drawn; but something&#8217;s off. It seems as though we&#8217;re missing the corners of the input! Our interface bandwidth is clipped into a sort beveled square. And to rub it in, the shapes resolved by the left and right sticks aren&#8217;t even the same (and this is notably an even worse on the DualShock/SixAxis&#8217;s left and right sticks, if memory serves me correctly. Though it probably doesn&#8217;t because of this one time when I wasn&#8217;t paying attention and I got my head squeezed between two doors on the London Underground, and was totally concussed, and went to work anyway, and wrote hilarious code, and made the coders angry).</p>
<p>Not only are the corners physically out of reach, there&#8217;s also some detail at the top, bottom, left and right which is cropped off!</p>
<div id="attachment_129" class="wp-caption alignnone" style="width: 464px"><a href="http://bezzy.net/wp-content/uploads/2012/01/AnalogueStickRawMapping1.png"><img class="size-full wp-image-129" title="AnalogueStickRawMapping" src="http://bezzy.net/wp-content/uploads/2012/01/AnalogueStickRawMapping1.png" alt="" width="454" height="340" /></a><p class="wp-caption-text">&#39;Sensitive Area&#39;. &#39;Ignored&#39;. &#39;Unreachable&#39;. Story of my life.</p></div>
<p>And yet, while far from perfect, apparently people aren&#8217;t throwing their controllers out of windows in disgust. It seems modern video games somehow seem to cope. To figure out why, let&#8217;s get you drawing as straight a line as you can. Here, fresh canvas:</p>
<p><em>Please view the full post to see the Unity content.</em></p>
<p>You may also notice that it&#8217;s pretty difficult to create anything like a straight diagonal line. Lines in cardinal directions (up, down, left, right) are relatively easy to do because the spring pressure exerted to bring the stick back to the center is happening twice: once along the horizontal axis, and once along vertical. You&#8217;re essentially finding a &#8220;groove&#8221; of least resistance in the X and Y axes, and it&#8217;s guiding your thumb.</p>
<div id="attachment_40" class="wp-caption alignnone" style="width: 505px"><a href="http://bezzy.net/wp-content/uploads/2012/01/StraightLines.png"><img class="size-full wp-image-40" title="StraightLines" src="http://bezzy.net/wp-content/uploads/2012/01/StraightLines.png" alt="I spent way too long on this." width="495" height="263" /></a><p class="wp-caption-text">Probably why artists in the games industry don&#39;t draw using XBox controllers.</p></div>
<p>The fact that you can&#8217;t draw a diagonal is, frankly, your thumb&#8217;s fault (assuming you are using thumbs &#8211; I&#8217;ve seen incredible streetfighter players with motor neuron disease use only their tongues poking around under their cheeks to pull off amazing combos that I can&#8217;t even do). Your thumbs are not as accurate as you hoped: if you try to draw a circle without leaning on the guide rails, you end up with concept art from the now canned <em>PacMan World 4: PacMan World Universe Land </em>(see <em>fig. whatever</em>: right hand side).</p>
<p>You may be able to &#8220;lock&#8221; your thumb and maintain a position, but the act of moving with finesse feels kind of drunken. Your thumb is trying to balance its force against the reactive force of two springs, and those springs are acting perpendicularly to one another, because that&#8217;s what seemed to make sense to the engineers behind the sticks. Your thumb itself doesn&#8217;t naturally move better along cardinal axes, because of&#8230; evolution I guess?</p>
<p>In fact, I&#8217;ve heard some suggest that games should rotate their inputs such that the thumb is regarded on its rotation and bendiness for X and Y inputs, respectively. That might be an idea, but it&#8217;s incompatible with the natural grooves found in the XBox controller, due to the axis aligned spring setup. And it also requires calibration per user, so that&#8217;s just irritating.</p>
<p>As you move your thumb around, notice the different pressures that feed back. When you try to move through the full deflection range very slowly and gradually, you&#8217;re actually moving in little hops as your thumb&#8217;s force overcomes the resistant force of the spring, but slightly overcompensates as it beats the static friction, and finds a new equalibrium. The fact that you feel different pressures at different degrees of displacement, or &#8220;throw&#8221; is really important: That force provides the haptic feedback to feel where your thumb is in the entire range of motion of the stick. You don&#8217;t have to look down to see where your thumb is, because you feel the counter-force from the stick, pushing as hard against you as you are against it, in the direction you&#8217;re pushing it. That&#8217;s sort of the genius of this interface. Compare using an old fashioned &#8220;yoke&#8221; style joystick with no return springs what so ever, and you immediately grasp how important the gradual return force is to the haptic feedback of the controller.</p>
<p>And when you push hard out to the outer gate/rail of the stick housing, you <em>really</em> feel that you&#8217;ve hit the limit &#8211; no amount of extra force will yeild further displacement&#8230; unless you&#8217;re good at tearing phonebooks in half with your bear hands. Yeah I just said &#8220;bear hands&#8221;. What you gonna do? Tear my phonebooks in half? I don&#8217;t even have any, you bear handed buffoon! Use bing ya idiot!</p>
<p>The lines you try to create also seem spotted. This is partly down to  to how frequently the pad is sampled or &#8220;Polled&#8221; (If any unity users could tell me the default polling, it&#8217;d fill in this gap right here: ________________). But when filling in the entire bevelled square (which will take some time!) you may find that some values inside the detectable area are unaccounted for. This might be the result of crunching numbers within drivers and losing detail along the way but it&#8217;s mostly that your thumbs (the best thumbs of any animal!) are still not the perfect herald of your intent.</p>
<p>And that&#8217;s really the first lesson here: human output, itself, is fuzzy, and interfaces rarely read a pure signal. And depending on how it&#8217;s crafted, the interface itself could feed noise back into the signal it&#8217;s trying to read &#8211; that war of spring vs. thumb you saw as you tried, in vain, to draw a straight line steadily.</p>
<p>There&#8217;s easily enough data from the stick to feed into a mechanic which reacts properly to analogue inputs, but we have to accept that there&#8217;s some work to do in filtering out the noise from both the player, and the interface.</p>
<p>Good Interface design aims to clean the broad and noisy signals that users can <em>potentially</em> give down to a limited set that they can easily and <em>intentionally</em> give. Often this is by funneling that broad range of inputs into a limited set of actions, cutting back what you can do in the game to what you must do, and ignoring, or at least smoothing, the noisy inbetweens.</p>
<p>On the hardware side, there are also intentional limits to the player&#8217;s range of inputs: by physically limiting our interface freedoms (as with the restrictor plate on a joystick), a very clear, but unspoken contract is established between player and game: our unconscious physical ticks, or habits like picking our nose aren&#8217;t registered within the game, embarrassing us, making us feel self conscious about the weird ways we move when we&#8217;re not watching. Or, I dunno, maybe that&#8217;s just me.</p>
<p>Thanks to these physical restrictions (to throw, or to the limit a button must be pressed before registering etc) we can also tell if we gave a signal by mistake, because we feel ourselves physically change the interface, and get a miniature feedback loop from its clunking and clattering about. Every time we instinctively scratch our nose, or cough, our game doesn&#8217;t cause our avatar to jump off the closest cliff, because physical interfaces don&#8217;t really watch for such things. But if we missed that quick scope shot because we sneezed and pulled the stick off target accidentally, we know it because our thumbs tell us pretty much instantly.</p>
<p>Interpretive interfaces like the Kinect, voice recognition and (to some degree) touch screens, don&#8217;t give this naturally haptic feedback, where we intuitively know what signal we&#8217;re expressing: our own bodies are almost too intuitive to us for us to really know what they&#8217;re doing:<a href="http://www.youtube.com/watch?v=-DOBiT1ANNc"> try watching yourself dancing on video</a> and try to come away from that feeling better about yourself. If you think you&#8217;re great before the video, and awful after, you suffer from proprioceptive self delusion&#8230; like the rest of us.</p>
<p>Interfaces are a translator for your intent into machine manageable form. It just so happens that you have horrible grammar, you rarely say what you mean, and <em>they</em> are confused tourists trying to understand your directions through your loud, fake frensch achhsont.</p>
<p>Game developers have a duty to establish a &#8220;contract&#8221; with the player by giving them an interface, and teaching them the interactions which are actually being listened for in the game. Knowing this, the player accepts that their fuzzy signal is filtered down into the agreed upon in-game action, and, having established this contrivance, they player can feel immersed through the established channels of interaction and feedback, and start to obtain flow.</p>
<p>The key to doing this successfully is to show the player that they are being listened to, <em>how</em> they are being listened to, and by either being successfully devious about filtering the noise in hidden ways, or at least up front about how the noise is overcome via acknowledgement of the interface&#8217;s shortcomings.</p>
<p>I&#8217;ll be going into various little techniques to do this, hopefully in a useful amount of detail. Next time we continue with the 360 controller to see these principles in action, starting with DeadZones! If it is exciting, I will be the first to write to my minister in mock outrage. Writing about kinaesthetics is awful, and I intend to keep it that way.</p>
<p>Here&#8217;s a <a href="http://www.youtube.com/watch?v=MrFK4NlGCo0">bonus link to Chris Franklin&#8217;s take on Kinaesthetics</a> (I did some co-writing. You can tell my bits from where the sentences just sorta go off like in some meandering direction and you don&#8217;t actually think Chris is even going to draw breath because seriously he&#8217;ll just read out any old crap I write because he&#8217;s a really nice guy and he doesn&#8217;t want to offend me even though I thrive on that kind of negative attention since I can&#8217;t seem to get any other kind of attention from anyone not even my parents and i&#8217;m pretty sure they love me?)</p>
]]></content:encoded>
			<wfw:commentRss>http://bezzy.net/?feed=rss2&#038;p=18</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Why Kinaesthetics?</title>
		<link>http://bezzy.net/?p=36&#038;utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=why-kinaesthetics</link>
		<comments>http://bezzy.net/?p=36#comments</comments>
		<pubDate>Tue, 10 Jan 2012 22:23:57 +0000</pubDate>
		<dc:creator>Aubrey</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://bezzy.net/?p=36</guid>
		<description><![CDATA[Before I go into practical articles (they&#8217;re on the way, slightly waiting for Unity 3.5), allow me one post to explain, or excuse (or whine) my way through the reasons for starting a blog about Kinaesthetics. When I was growing &#8230; <a href="http://bezzy.net/?p=36">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Before I go into practical articles (they&#8217;re on the way, slightly waiting for Unity 3.5), allow me one post to explain, or excuse (or whine) my way through the reasons for starting a blog about Kinaesthetics.</p>
<p><span id="more-36"></span></p>
<p>When I was growing up, trying to convince people that games were an art form felt impossible&#8230; there I was, a massive fan of my generation&#8217;s very own medium, and to everyone around me, it was considered trashy, and base. God I wanted them to love games like I did. But when you&#8217;re trying to convince an older generation of their merit, and they&#8217;re reading old-school games from the perspective of an old guard of literary criticism, it&#8217;s easy to turn snob and refuse to take the medium on its own terms. And what&#8217;s a 10 year old going to say to a Professor of English Literature? &#8220;In a game, the story is different every time!&#8221;. Yep. I actually tried that. Oh God why?</p>
<div id="attachment_57" class="wp-caption alignnone" style="width: 418px"><a href="http://bezzy.net/wp-content/uploads/2012/01/PDVD_939.jpg"><img class="size-full wp-image-57" title="" src="http://bezzy.net/wp-content/uploads/2012/01/PDVD_939.jpg" alt="Doy! Dat Smawts!" width="408" height="288" /></a><p class="wp-caption-text">Ouch! My feeling!</p></div>
<p>So I spent 20 years learning how to write words and sentences and things and how to set up a wordpress just to get back at that old&#8230;</p>
<p>No wait.</p>
<p>It took a while, but right after seeing that <em>Doom</em> was the most mature and artistically resonant exemplar of games we could ever possibly strive to conceive, I saw lots of people try to justify games as a worthy medium from many angles: storytelling, visual art, audio design, immersion. I tried to myself, for a while (interactive storytelling being of great interest to me), but the part that I always secretly felt most passionate about, and the thing that always felt skipped over in favour of more traditional readings of games-as-other-mediums, is the thing we find hardest to put into words: how a game &#8220;feels&#8221;.</p>
<p>Don&#8217;t get me wrong: I&#8217;ve been utterly floored by the masterful meta-commentary on linearity in <em>Bioshock</em>, the beauty of vistas in <em>Skyrim</em>, the immersive emergence of<em> Deus Ex</em>. But the reason I&#8217;ll play a game for ages is to experience a sense of one-ness with the game. That feeling of flow you get when you&#8217;re cutting just the right line in <em>Wipeout</em>, or<em> Tux Racer</em>. And every time the art of games was discussed, it felt like caring about this sort of thing, this primitive instinct to move, should bring a sense of guilt to me.</p>
<p>I never wanted to bring it up, out of a sense of inadequacy: I can&#8217;t quote <a title="Joseph Campbell" href="http://en.wikipedia.org/wiki/Joseph_Campbell">Joseph Campbell</a>&#8216;s Monomyth while talking about it, or come up with Ayn Rand Objectivist Philosophy to clothe a system, or make allusions to Spaghetti Westerns in order to bask in the reflected glory of another medium &#8211; I&#8217;m just too illiterate for that. Telling you that games are a work of art because of how <em>fucking hard</em> I nailed you with a rocket juggle into a rail shot while falling&#8230; just doesn&#8217;t seem to hit that lofty mark of impressing your relatives at Christmas, and make them feel like you&#8217;re not wasting your time.</p>
<p>And yet, I&#8217;d say that&#8217;s a good proportion of the reason I keep playing games.</p>
<p>I don&#8217;t mean to throw dirt at the intellectualization of game development or criticism (I&#8217;m just unintentionally good at it), or pull the old &#8220;GAmeplay is moer importent tahn graphix and you don&#8217;t even need a story&#8221; routine. I actually like where some games are going in this respect (even though I&#8217;m past the point of trying to get English Professors/my mum to respect what I do for a living).</p>
<p>What I&#8217;d rather do is play super-ponce to what I feel is an under-represented factor in the ongoing appeal of games. I want to show you why kinaesthetics are important, how to get them right, and how to be literate about them. I&#8217;ll also <strong>fight</strong> anyone who gets snobby about this area only being interesting to sugar fueled racist 12 year olds playing Call of Duty all night: You see, to the untrained eye, boxing is brawling, but aficionados see <em>ballet</em>. Okay, fight over, knock out in the first round. I wins. PERFECT!</p>
<div class="wp-caption alignnone" style="width: 590px"><img src="http://media.filmschoolrejects.com/images/doom_heart.jpg" alt="" width="580" height="249" /><p class="wp-caption-text">&quot;Hello. Kinaesthetics is like the heart of a game, but not literally, because games don&#39;t have hearts unless they&#39;re Zelda or made by David Cronenburg. Do you understand?&quot;</p></div>
<p>I started my career wanting to be a designer. When I realized that I found it impossible to express the sort of feel I wanted to give to a game in words, pictures, or even video (and holy crap did I try), I decided that it&#8217;d be easier to show what I meant, even if it was horrible at first. I learnt to code. It changed how I design. It scared some coders, also. Not in a good way.</p>
<p>7 years later, and it&#8217;s clear I&#8217;m never going to be John Carmack, but with the release of easier tools and languages (<em>Unity3D</em> and <em>C#</em> are my current weapons of choice), I find it more than possible to explain what I mean by example, rather than expecting people to sit through my awful writing style (I&#8217;m not really selling this, am I?). And thank God, because writing about kinaesthetics is like dancing about architecture, and getting anyone to <em>read</em> it is like asking me to finish a simile on point.</p>
<div class="wp-caption alignnone" style="width: 609px"><img src="http://popstarbiz.com/wp-content/uploads/2011/10/David-Arquette-and-Kym-Johnson-DWTS-10-10.png" alt="Shuddup, David Arquette!" width="599" height="340" /><p class="wp-caption-text">Still better than the fourth movie.</p></div>
<p>As I&#8217;ve worked on games, I&#8217;ve noticed that people aren&#8217;t doing <em>much</em> to share information on game feel, despite it often being the difference between people loving a game, and liking-it-but-dropping-the-controller-for-some-reason-they-can&#8217;t-put-their-fingers-on.</p>
<p>There are loads of articles on the technicalities of game making. Lots on guiding philosophies. But Kinaesthetics are at the intersection of these: partly about software, partly about hardware and partly about meatware. Since it can get so technical, Kinaesthetic design has been fairly well relegated to the status of &#8220;plumbing&#8221;. Crucially, this can put it below the tolerance threshold of creatives and high minded designers. It&#8217;s seen as an engineering detail which must be stumbled and suffered through before the meat of the game can arise. Except that, in a lot of ways, it <em>is</em> the meat! Or at least, some edible form of cutlery. (Hmm. I warned you about these similies).</p>
<p>Since it can become quite engineering heavy, and is easier to engage with practically rather than theoretically, it&#8217;s hard for even those who are passionate about it to be left with terms other than &#8220;unresponsive&#8221;, &#8220;twitchy&#8221;, and &#8220;loose&#8221;. And because it&#8217;s so much more subtle than that, this post-it note of a dictionary is not really good enough.</p>
<div class="wp-caption alignnone" style="width: 570px"><img src="http://www.filmcritic.com/assets_c/2010/02/Indiana-Jones-and-the-Temple-of-Doom-thumb-560xauto-24427.gif" alt="" width="560" height="373" /><p class="wp-caption-text">&quot;Unresponsive&quot;, &quot;twitchy&quot; and &quot;loose&quot;? There&#39;s a joke here which I&#39;m not making.</p></div>
<p>I find it hard to reconcile the idea that games with orders of magnitude more scope than small indie games are often as not <em>less</em> kinaesthetically pleasing. There are reasons <em>why</em> this often happens (and admittedly, there are a lot of kinaesthetically rubbish indie games, too!), but no reason not to want to fix it. I think it&#8217;s partly because we don&#8217;t talk about it with the love that we should. We don&#8217;t know how. Or we feel silly for trying. Like, me, right now. This is embarrassing and it will not stop!</p>
<div class="wp-caption alignnone" style="width: 570px"><img src="http://spelunkyworld.com/images/spelunky-xbla-05-news.jpg" alt="I'm sorry. Please feel free to kill me now." width="560" height="302" /><p class="wp-caption-text">A Small Indie Game.</p></div>
<p>While games with horrible kinaesthetics can still have great merit due to other lovable qualities, good kinaesthetics are never going to <em>detract</em> from these. <em>System Shock 2&#8242;s</em> core mechanics were often like that scene in the<em> Temple of Doom</em> where the lady has to put her hand in the insect hole and crank a lever, but the combination of all these B- mechanics made an A+ game. Equally, <em>BioShock 2</em> more or less nailed that side of things, but no-one is blaming the honed controls for the difficulties of sequalitis.</p>
<p>In fact, a good bridge of kinaesthetics into the experience is only going to make those higher level mechanics, or themes, or story, or environment easier to enjoy: the irritation and annoyance of embracing them is cleaned away.</p>
<div class="wp-caption alignnone" style="width: 590px"><img src="http://media.filmschoolrejects.com/images/doom_bridge.jpg" alt="" width="580" height="248" /><p class="wp-caption-text">&quot;Hello, I am bad kinaesthetics sitting between you and a nice game, and I got a machete thing!&quot;</p></div>
<p>When a game feels just right, it&#8217;s like standing up in the middle of crowded theater and shooting dead the man who has just answered his mobile phone, and seeing the rest of the audience quietly acknowledge that you did the right thing, and silently agree not to say anything during the ensuing investigation. And then we all enjoy watching <em>The Iron Lady</em> together in peace. And no-one does that slurpy thing at the end of their drink.</p>
<p>No-one is ever upset that a game feels great. No-one really believes that kinaesthetic pleasure retracts from any lofty statements a game has to make. And for all intents and purposes, it&#8217;s fundamental to all games ( even GUI heavy, non-time critical games), and yet, despite being a win for everyone involved, it&#8217;s often left as an unwanted stepchild.</p>
<p>When designers who are closer to the engineering end of the spectrum (&#8220;plumbers&#8221;) don&#8217;t try to understand designers toward the creative end of the spectrum (&#8220;super ponces&#8221;), and vice versa, a communications breakdown occurs. The story and the game start to work at odds, with neither side riffing off their jazz partner: Ludonarrative Dissonance tends to occur.</p>
<p>My thesis for this blog is that getting both parties to understand each other, through the common bond of kinaesthetics, is the key to marrying the two. IT WILL SOLVE EVERYTHING!</p>
<p>Okay, not everything.</p>
<p>I&#8217;d also like to redress a balance in design focus which has been sliding in a sinister direction of late: In this time of psychology led game design where gamification is often used as a substitute for the intrinsic joy of kinaesthetics, we must remember: we are not merely carrot guzzling robots. We feel.</p>
<p>It&#8217;s okay to feel.</p>
<div class="wp-caption alignnone" style="width: 612px"><img src="http://www.ifc.com/wp-content/uploads/2011/09/raidersofthelostark.jpg" alt="" width="602" height="375" /><p class="wp-caption-text">PRESS A TO NOT FUCK THIS UP</p></div>
]]></content:encoded>
			<wfw:commentRss>http://bezzy.net/?feed=rss2&#038;p=36</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 6.961 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2013-05-19 16:01:16 -->
