{"id":24984,"date":"2014-11-11T20:47:51","date_gmt":"2014-11-12T01:47:51","guid":{"rendered":"http:\/\/www.shamusyoung.com\/twentysidedtale\/?p=24984"},"modified":"2014-11-11T20:48:26","modified_gmt":"2014-11-12T01:48:26","slug":"experienced-points-game-responsiveness-is-more-than-just-good-frame-rate","status":"publish","type":"post","link":"https:\/\/www.shamusyoung.com\/twentysidedtale\/?p=24984","title":{"rendered":"Experienced Points: Game Responsiveness is More Than Just Good Frame Rate"},"content":{"rendered":"<p>This week we&#8217;re talking about <a href=\"http:\/\/www.escapistmagazine.com\/articles\/view\/video-games\/columns\/experienced-points\/12599-The-Long-Distance-Between-Your-Thumbs-and-Your-Screen\">the growing complexity of our gaming machines<\/a> and how that impacts the controls. <\/p>\n<p>Sometime in 1983 or so I tore apart my first <a href=\"https:\/\/www.google.com\/search?q=atari+joystick&#038;rlz=1C1CHFX_enUS518US518&#038;espv=2&#038;biw=1191&#038;bih=651&#038;source=lnms&#038;tbm=isch&#038;sa=X&#038;ei=WrxiVJrPGMLuoATG1IHoBg&#038;ved=0CAcQ_AUoAg\">Atari joystick<\/a> and saw how it worked. The joystick had broken &#8211; probably from too much frustrated twisting on the part of the user &#8211; and no longer moved left. Inside, the device was so simple that even my 12 year old self could immediately intuit how it all worked. It was a simple square circuit board with five metallic &#8220;bubbles&#8221; on the surface. The bubbles represented the fire button and the four ordinal directions. When a bubble was depressed (from pressure from the joystick or the button directly above it) a circuit was completed. That was it. You could toss all the joystick bits away and play directly on the circuit board, if you wanted. <\/p>\n<p>This also let me mess around with unintended scenarios and see how the game logic was set up. In normal usage circumstances you can&#8217;t move the joystick both left and right at the same time. But if you&#8217;re manipulating the contacts directly you can press both bubbles at once and see how the game responds. Now, in those days they coded right to the metal without using any fancy programming languages, but conceptually there are two ways to set up this sort of input logic. In C++ it might look like this:<\/p>\n<p><!--more--><\/p>\n<pre lang=\"c\" line=\"1\">\r\nif (joystick_left) {\r\n  x = x - 1;\r\n}\r\nif (joystick_right) {\r\n  x = x + 1;\r\n}\r\n<\/pre>\n<p>In this case, the test for the left and right joystick buttons are done independently. If you hack open the controller and push both, then the game will try to move both left and right at once, and the movement will cancel itself out. However, another coder might realize that (under normal operating conditions) it&#8217;s impossible for the user to go both left and right at once. So, they could save a couple of trivial CPU instructions by skipping the check for right movement if left movement is active:<\/p>\n<pre lang=\"c\" line=\"1\">\r\nif (joystick_left) {\r\n  x = x - 1;\r\n} else if (joystick_right) {\r\n  x = x + 1;\r\n}\r\n<\/pre>\n<p>In this case, pressing both buttons would just result in moving left. I found examples of both types of input logic in my game collection. <\/p>\n<p>All of this came together in my head as I learned BASIC for the first time and came to grips with how computers worked. It was exhilarating to realize that computers were something I could comprehend. They weren&#8217;t magic. They weren&#8217;t rocket science. They were simple devices, and you could figure them out just by experimenting with them.<\/p>\n<p>Sadly, this is no longer the case. I doubt 12 year old Shamus would be able to make any such mental leaps if you gave him an Xbox with a wireless controller. <\/p>\n<p>On the other hand, the games would blow his little mind.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This week we&#8217;re talking about the growing complexity of our gaming machines and how that impacts the controls. Sometime in 1983 or so I tore apart my first Atari joystick and saw how it worked. The joystick had broken &#8211; probably from too much frustrated twisting on the part of the user &#8211; and no [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[102],"tags":[],"class_list":["post-24984","post","type-post","status-publish","format-standard","hentry","category-weekly-column"],"_links":{"self":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/24984","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=24984"}],"version-history":[{"count":0,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/24984\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=24984"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=24984"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=24984"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}