{"id":331,"date":"2024-05-31T22:06:59","date_gmt":"2024-06-01T03:06:59","guid":{"rendered":"https:\/\/www.dphrygian.com\/wordpress\/?p=331"},"modified":"2025-05-23T23:13:07","modified_gmt":"2025-05-24T04:13:07","slug":"four-letter-words","status":"publish","type":"post","link":"https:\/\/www.dphrygian.com\/wordpress\/?p=331","title":{"rendered":"Four Letter Words"},"content":{"rendered":"\n<p>Games use codenames during development for various reasons: often because the real title won&#8217;t be determined until later in the project&#8217;s lifecycle, or because a sequel&#8217;s existence needs to be kept secret. Every studio I&#8217;ve worked at has had some pattern for generating new codenames: tree species, San Francisco neighborhoods, chemical elements.<\/p>\n\n\n\n<p>When I started making indie games, I didn&#8217;t have a plan for codenames. &#8220;Eldritch&#8221; <em>was<\/em> a codename until I realized I didn&#8217;t have a better title for that game, and it stuck. <em>NEON STRUCT<\/em> was originally titled <em>Die Augen der Welt<\/em>, but I had picked the codename &#8220;Neon&#8221; for its target aesthetic.<\/p>\n\n\n\n<p>A lot of <em>Eldritch<\/em>&#8216;s C++ classes are prefixed &#8220;Eld&#8221; because it was shorter than writing &#8220;Eldritch&#8221; every time. Neon&#8217;s codebase was derived from <em>Eldritch<\/em>&#8216;s, and it has a mix of C++ classes prefixed &#8220;Eld&#8221; and &#8220;Neon&#8221;, which was confusing during development. When I started working on <em>Slayer Shock<\/em>, I picked the codename &#8220;Vamp&#8221; and decided to unify all the class names with that prefix. Doing that broke a bunch of tab spacing where the additional letter changing &#8220;Eld&#8221; to &#8220;Vamp&#8221; moved a tab further to the right. I&#8217;m meticulous about tab spacing in my code, and that was annoying to fix.<\/p>\n\n\n\n<p>The next project I started after Vamp was a bank heist roguelike (think single-player <em>Payday 2<\/em>) which I codenamed, shockingly, &#8220;Heist&#8221;. The tab spacing issue cropped up again, and I decided that all my projects after that would have four-letter names to avoid this problem. Later, I got tired of renaming classes altogether, and decided to use a common name unrelated to a project&#8217;s codename. That became my <em>de facto<\/em> engine name &#8220;<a href=\"https:\/\/www.dphrygian.com\/wordpress\/?p=199\" data-type=\"link\" data-id=\"https:\/\/www.dphrygian.com\/wordpress\/?p=199\">Rosa<\/a>&#8220;.<\/p>\n\n\n\n<p>Despite not caring about tab spacing issues anymore, I&#8217;ve stuck with the four-letter codenames out of habit. I also make sure that the codename does not appear anywhere in my codebase, so I can do a find-and-replace on it when moving code between projects. So for example, I&#8217;d reject the codename &#8220;Apex&#8221; because my codebase has the variable MinimapExtents, which has &#8220;apex&#8221; embedded in it. That limits my options a lot!<\/p>\n\n\n\n<p>I&#8217;ve also begun using four-letter codenames for the tools in my engine. That started by accident during the development of Neon, when I called my scripting language &#8220;Loom&#8221; (because it wove strings together, I think?); but now, my texture generator is &#8220;Piet&#8221; and my music generator is &#8220;Roja&#8221;.<\/p>\n\n\n\n<p>Anyway, here&#8217;s a chronological list of the codenames of every indie project or tool I&#8217;ve worked on since 2013, including the unfinished and abandoned ones. Titles in bold are shipped or active projects.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Eldritch: <em>Eldritch<\/em> (2013)<\/strong><\/li>\n\n\n\n<li>Deos: abandoned open-world cyberpunk game (2013)<\/li>\n\n\n\n<li>Chef: abandoned cooking simulator game (&#8220;<em>Drunk Chef<\/em>&#8220;) (2014)<\/li>\n\n\n\n<li><strong>Tango: <em>Where&#8217;s Tango?<\/em> (2014)<\/strong><\/li>\n\n\n\n<li><strong>Neon: <em>NEON STRUCT<\/em> (2015)<\/strong><\/li>\n\n\n\n<li><strong>Loom: configuration\/scripting language and compiler (2015)<\/strong><\/li>\n\n\n\n<li><strong>Vamp: <em>Slayer Shock<\/em> (2016)<\/strong><\/li>\n\n\n\n<li>Heist: abandoned bank heist roguelike (2017)<\/li>\n\n\n\n<li>Deos (again): abandoned open-world <em>NEON STRUCT<\/em> sequel (2017)<\/li>\n\n\n\n<li>Noir: abandoned 1940s\/50s magical realism immersive sim (2017)<\/li>\n\n\n\n<li>Buzz: abandoned <em>Persona<\/em>-like &#8220;gamedev simulator&#8221; (2019)<\/li>\n\n\n\n<li>Loam: unfinished fantasy roguelike immersive sim (2019)<\/li>\n\n\n\n<li><strong>Ludo: <em>Davy Dreamt of Flying<\/em> (2020)<\/strong><\/li>\n\n\n\n<li>Voya: abandoned private investigator crime thriller (2020)<\/li>\n\n\n\n<li><strong>Cyme: <em>NEON STRUCT: Carrion Carrier<\/em> (2020)<\/strong><\/li>\n\n\n\n<li><strong>Acid: <em>Davy&#8217;s Dreams of Chasing Things<\/em> (2020)<\/strong><\/li>\n\n\n\n<li><strong>Voya (repurposed): <em>Gothwane Towers<\/em> (2020)<\/strong><\/li>\n\n\n\n<li><strong>Deep: <em>To Mine Own Craft Be True<\/em> (2021)<\/strong><\/li>\n\n\n\n<li>Laff: abandoned sitcom-themed game jam (2021)<\/li>\n\n\n\n<li><strong>Zeta: <em>NEON STRUCT: Desperation Column<\/em> (2021)<\/strong><\/li>\n\n\n\n<li>Fray: abandoned open-world sci-fi FPS (2022)<\/li>\n\n\n\n<li><strong>Lily: <em>Li&#8217;l Taffer<\/em> (2022)<\/strong><\/li>\n\n\n\n<li>Gild: abandoned <em>Li&#8217;l Taffer<\/em> expansion (2023)<\/li>\n\n\n\n<li>Lith: dark fantasy prototype (2023)<\/li>\n\n\n\n<li><strong>Tofu: <em>Eldritch 2<\/em> (in development, 2023-present)<\/strong><\/li>\n\n\n\n<li><strong>Piet: texture generator tool (2023)<\/strong><\/li>\n\n\n\n<li><strong>Wolf: <em>Schloss der W\u00f6lfe<\/em> (2023)<\/strong><\/li>\n\n\n\n<li>Zwei: unbegun <em>Schloss der W\u00f6lfe<\/em> sequel (2023)<\/li>\n\n\n\n<li>Rasa: abandoned &#8220;paint the world with footprints&#8221; game jam (2023)<\/li>\n\n\n\n<li><strong>Roja: music generator tool (2024)<\/strong><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Games use codenames during development for various reasons: often because the real title won&#8217;t be determined until later in the project&#8217;s lifecycle, or because a sequel&#8217;s existence needs to be kept secret. Every studio I&#8217;ve worked at has had some pattern for generating new codenames: tree species, San Francisco neighborhoods, chemical elements. When I started [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,8,6,7],"tags":[],"class_list":["post-331","post","type-post","status-publish","format-standard","hentry","category-eldritch","category-eldritch-2","category-neon-struct","category-slayer-shock"],"_links":{"self":[{"href":"https:\/\/www.dphrygian.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/331"}],"collection":[{"href":"https:\/\/www.dphrygian.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dphrygian.com\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dphrygian.com\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dphrygian.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=331"}],"version-history":[{"count":10,"href":"https:\/\/www.dphrygian.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/331\/revisions"}],"predecessor-version":[{"id":561,"href":"https:\/\/www.dphrygian.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/331\/revisions\/561"}],"wp:attachment":[{"href":"https:\/\/www.dphrygian.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=331"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dphrygian.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=331"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dphrygian.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}