{"id":188,"date":"2009-12-05T10:09:54","date_gmt":"2009-12-04T21:09:54","guid":{"rendered":"http:\/\/www.paradicesoftware.com\/blog\/?p=188"},"modified":"2009-12-05T10:09:54","modified_gmt":"2009-12-04T21:09:54","slug":"the-quest-for-an-intuitive-interface","status":"publish","type":"post","link":"http:\/\/www.paradicesoftware.com\/blog\/2009\/12\/the-quest-for-an-intuitive-interface\/","title":{"rendered":"The quest for an intuitive interface"},"content":{"rendered":"<p>One of the hardest bits about creating Icefall was getting the User Interface (UI) just right.<br \/>\nIcefall&#8217;s chief inspirations are &#8220;old-school&#8221; role-playing games like Angband (aka Roguelikes: Nethack, Moria, Omega, ADOM all fall into this category). But these old-school games all rely on essentially a text-mode interface with a myriad of hotkeys. I want to make Icefall more accessible than that. So I took the UI elements from &#8216;modern&#8217; RPGs like World of Warcraft, Titan Quest, and Dragon Age: Orgins: hotbars, cooldowns, drag &amp; drop.<\/p>\n<p>Of course these &#8216;modern&#8217; interfaces are much more work to get right than a classic keyboard-driven one. Even though I&#8217;ve spent more time on this aspect than any other, it&#8217;s still not perfect. Here&#8217;s an example I found yesterday:<\/p>\n<figure id=\"attachment_189\" aria-describedby=\"caption-attachment-189\" style=\"width: 401px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-189\" title=\"Icefall Backpack user interface\" src=\"http:\/\/www.paradicesoftware.com\/blog\/wp-content\/uploads\/2009\/12\/Backpack_armor.png\" alt=\"Icefall Backpack user interface\" width=\"401\" height=\"352\" srcset=\"http:\/\/www.paradicesoftware.com\/blog\/wp-content\/uploads\/2009\/12\/Backpack_armor.png 401w, http:\/\/www.paradicesoftware.com\/blog\/wp-content\/uploads\/2009\/12\/Backpack_armor-300x263.png 300w\" sizes=\"auto, (max-width: 401px) 100vw, 401px\" \/><figcaption id=\"caption-attachment-189\" class=\"wp-caption-text\">Icefall Backpack user interface<\/figcaption><\/figure>\n<p>Looks easy enough. To equip the Apprentice Jerkin, players can either click and drag it to their Character Sheet, or else right-click it to equip. The problem: there are two, identical jerkins in the player&#8217;s inventory. Click and drag works fine, but if you right-click the second one, a strange thing happens: the *other* jerkin is equipped instead, and disappears from inventory.<\/p>\n<p>Why? Well, right clicking an item in Icefall triggers a codepath to essentially &#8220;Activate Item: Apprentice Jerkin&#8221;.\u00a0It&#8217;s set up this way so that players can also drag equipment to their hotbar, and\u00a0equip it directly from there.\u00a0All good so far. BUT: internally, the inventory is stored as an array, and is stored from left-to-right, top-to-bottom. So when the &#8220;Activate Item&#8221; codepath is triggered, it goes looking for an Apprentice Jerkin to activate, and it finds the other jerkin (the one in the row above) first &#8211; so it activates it!<\/p>\n<p>A rare situation, a completely logical consequence of the way I implemented right-click behaviour. Technically correct (There are no downfalls to the player if the &#8216;wrong&#8217; jerkin is equipped: they&#8217;re identical by definition) and yet it feels completely wrong and would likely alienate a casual user. So I&#8217;m going to have to find a workaround \ud83d\ude41<\/p>\n","protected":false},"excerpt":{"rendered":"<p>One of the hardest bits about creating Icefall was getting the User Interface (UI) just right. Icefall&#8217;s chief inspirations are &#8220;old-school&#8221; role-playing games like Angband (aka Roguelikes: Nethack, Moria, Omega, ADOM all fall into this category). But these old-school games all rely on essentially a text-mode interface with a myriad of hotkeys. I want to<\/p>\n","protected":false},"author":2722,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[76,21],"class_list":["post-188","post","type-post","status-publish","format-standard","hentry","category-icefall","tag-icefall","tag-ui"],"_links":{"self":[{"href":"http:\/\/www.paradicesoftware.com\/blog\/wp-json\/wp\/v2\/posts\/188","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.paradicesoftware.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.paradicesoftware.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.paradicesoftware.com\/blog\/wp-json\/wp\/v2\/users\/2722"}],"replies":[{"embeddable":true,"href":"http:\/\/www.paradicesoftware.com\/blog\/wp-json\/wp\/v2\/comments?post=188"}],"version-history":[{"count":1,"href":"http:\/\/www.paradicesoftware.com\/blog\/wp-json\/wp\/v2\/posts\/188\/revisions"}],"predecessor-version":[{"id":190,"href":"http:\/\/www.paradicesoftware.com\/blog\/wp-json\/wp\/v2\/posts\/188\/revisions\/190"}],"wp:attachment":[{"href":"http:\/\/www.paradicesoftware.com\/blog\/wp-json\/wp\/v2\/media?parent=188"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.paradicesoftware.com\/blog\/wp-json\/wp\/v2\/categories?post=188"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.paradicesoftware.com\/blog\/wp-json\/wp\/v2\/tags?post=188"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}