<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Game Dev Assembly Newsletter]]></title><description><![CDATA[A Game Dev-focused newsletter packed with expert insights, trends, and best practices. Tailored for Indie developers, AAA Professionals, and Tech Artists!]]></description><link>https://gamedevnewsletter.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!ijwT!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11356843-c2b1-440d-b730-f3aa37800c92_600x600.png</url><title>Game Dev Assembly Newsletter</title><link>https://gamedevnewsletter.substack.com</link></image><generator>Substack</generator><lastBuildDate>Wed, 20 May 2026 19:24:21 GMT</lastBuildDate><atom:link href="https://gamedevnewsletter.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Shazeen Iqbal]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[gamedevnewsletter@packt.com]]></webMaster><itunes:owner><itunes:email><![CDATA[gamedevnewsletter@packt.com]]></itunes:email><itunes:name><![CDATA[Game Dev Assembly Editors]]></itunes:name></itunes:owner><itunes:author><![CDATA[Game Dev Assembly Editors]]></itunes:author><googleplay:owner><![CDATA[gamedevnewsletter@packt.com]]></googleplay:owner><googleplay:email><![CDATA[gamedevnewsletter@packt.com]]></googleplay:email><googleplay:author><![CDATA[Game Dev Assembly Editors]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Are We Shifting to an Era of Survival Through Ownership?]]></title><description><![CDATA[Signals You Should Know]]></description><link>https://gamedevnewsletter.substack.com/p/are-we-shifting-to-an-era-of-survival</link><guid isPermaLink="false">https://gamedevnewsletter.substack.com/p/are-we-shifting-to-an-era-of-survival</guid><dc:creator><![CDATA[Game Dev Assembly Editors]]></dc:creator><pubDate>Mon, 18 May 2026 15:34:07 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e8bc50a0-05f6-4aaf-8dbe-4d70553c823e_1036x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Editor&#8217;s Note</h1><p>Howdy folks &#128075; and welcome back to another edition of <strong>Game Dev Assembly Industry Signals</strong> &#127918;&#10024; For years, the industry chased <em>more</em>. We&#8217;re talking bigger worlds, bigger teams, bigger content pipelines, and bigger monetization systems.</p><p>And <em>now?</em> Players value <em><strong>ownership</strong></em> like the good ole&#8217; days, <em><strong>focused experiences</strong></em>, and <em><strong>memorable design</strong></em>. Developers are rethinking how they build communities, distribute games, and survive in an increasingly crowded market.</p><p>This week, we&#8217;re going from subscription fatigue and direct-to-player ecosystems, to the rise of retro aesthetics, regional dev scenes, and games that actually respect player time. As always, we&#8217;re here to connect the dots so you can stay ahead of where the industry is heading &#128640;</p><div><hr></div><h1>&#128184; Subscription Fatigue Is Becoming a Real Problem</h1><p>Players are starting to hit a wall. Not just with <a href="https://www.netflix.com/browse">Netflix</a> and <a href="https://open.spotify.com/">Spotify</a>, but with gaming subscriptions too. Services like <a href="https://www.microsoft.com/en-GB/store/new/games/xbox?IsGamePass=true&amp;msockid=28e8f0ff05716f8d082be4a604166ea7">Microsoft&#8217;s Game Pass</a> helped redefine player expectations over the last few years. <a href="https://www.techradar.com/gaming/ex-playstation-boss-says-microsoft-is-trying-so-hard-to-will-xbox-game-pass-into-health-and-suggests-a-clarifying-post-mortem-would-do-the-entire-industry-some-good">But now, more developers are openly discussing the downside</a>:</p><ul><li><p>Lower perceived value per game</p></li><li><p>Faster player churn</p></li><li><p>Less ownership mentality</p></li><li><p>Shorter engagement windows</p></li></ul><p>Meanwhile, more players are returning to <em><strong>buying games outright</strong></em>, collecting <em><strong>physical editions</strong></em>, and <em><strong>supporting games directly</strong></em> through platforms like <a href="https://www.patreon.com/login">Patreon</a> and <a href="https://www.kickstarter.com/">Kickstarter</a>.</p><p>More and more do <strong><a href="https://www.techradar.com/gaming/ex-playstation-boss-says-microsoft-is-trying-so-hard-to-will-xbox-game-pass-into-health-and-suggests-a-clarifying-post-mortem-would-do-the-entire-industry-some-good">players want experiences they feel they </a></strong><em><strong><a href="https://www.techradar.com/gaming/ex-playstation-boss-says-microsoft-is-trying-so-hard-to-will-xbox-game-pass-into-health-and-suggests-a-clarifying-post-mortem-would-do-the-entire-industry-some-good">own</a></strong></em>, not endless libraries they barely touch.</p><div><hr></div><h1>&#128722; Direct-to-Player Models Are Quietly Growing</h1><p>A growing number of indie studios are trying to <strong>reduce dependence on storefront algorithms</strong> entirely. <a href="https://howtomarketagame.com/2023/09/04/killing-the-myths-behind-steams-visibility/?">Instead of relying only on Steam</a>, they&#8217;re building <em><strong>email lists</strong></em>, <em><strong>discord communities</strong></em>, <em><strong>patreon memberships</strong></em>, <em><strong>direct merch ecosystems</strong></em>, and <em><strong>web shops</strong>.</em></p><p><em>Why?</em></p><p>Because storefront visibility is volatile.</p><p>Owning your audience is becoming more valuable than renting attention from platforms. <a href="https://www.facebook.com/groups/132728896890594/posts/3273755729454546/">Multiple indie developers discussed rising wishlist volatility and unpredictable discovery swings tied to Steam visibility cycles</a>.</p><p>In a nutshell, <em><strong>audience ownership</strong></em> is becoming a competitive advantage.</p><div><hr></div><h1>&#127918; Retro and Low-Spec Design Is Quietly Winning Again</h1><p>One of the strongest <em>under-the-surface</em> shifts right now is games are becoming less obsessed with technical realism. Instead, we&#8217;re seeing growing success around <em><strong>retro aesthetics</strong></em>, <em><strong>stylized visuals</strong></em>, <em><strong>low-spec compatibility</strong></em>, and <em><strong>lightweight performance</strong></em>.</p><p><em>Why?</em></p><p>Because players want readability and vibe, hardware costs remain high globally, Steam Deck optimization matters more, and portability is increasingly influencing design.</p><p><a href="https://indiegamebusiness.com/indie-game-marketing-break-through-the-noise/?">Games with </a><em><strong><a href="https://indiegamebusiness.com/indie-game-marketing-break-through-the-noise/?">intentional simplicity</a></strong></em><a href="https://indiegamebusiness.com/indie-game-marketing-break-through-the-noise/?"> are increasingly standing out</a> in a sea of hyper-polished realism.</p><p>So remember, the direction in which you take your art is outperforming raw graphical power.</p><div><hr></div><h1>&#129504; Players Are Rewarding Games That Respect Their Time</h1><p>A growing frustration growing across player communities is that games that feel like chores.</p><p>Live-service fatigue is becoming more visible:</p><ul><li><p>battle pass exhaustion</p></li><li><p>infinite progression systems</p></li><li><p>daily-login pressure</p></li><li><p>bloated open worlds</p></li></ul><p>Meanwhile, tightly scoped experiences are earning <em><strong>stronger player goodwill</strong></em>. This is one reason games like <a href="https://store.steampowered.com/app/2379780/Balatro/">Balatro</a>, <a href="https://store.steampowered.com/app/1562430/DREDGE/">Dredge</a>, and <a href="https://store.steampowered.com/app/1868140/DAVE_THE_DIVER/">Dave the Diver</a> resonate so strongly.</p><p>They feel <em><strong>focused</strong></em>, <em><strong>intentional</strong></em>, and <em><strong>respectful</strong></em> of player time.</p><p>The drive home message is players are gravitating toward games with <em><strong>stronger pacing</strong></em> and <em><strong>lower friction</strong></em>.</p><div><hr></div><h1>&#127757; Regional Development Scenes Are Becoming More Influential</h1><p>This week also reinforced a longer-term shift, which is that more breakout development scenes are emerging outside traditional hubs.</p><p>We&#8217;re seeing increasing visibility from Latin America at <a href="https://www.gamescom.global/en">Gamescom</a> and <a href="https://gdconf.com/">Game Developers Conference</a>, Southeast Asia (such as <a href="https://en.wikipedia.org/wiki/Black_Myth:_Wukong">Black Myth: Wukong</a>), Eastern Europe (such as <a href="https://store.steampowered.com/app/1363080/Manor_Lords/">Manor Lords</a>), Turkey, and Africa.</p><p>Smaller teams in these regions are benefiting from lower production costs, online distribution, creator ecosystems, and global communities.</p><p>And importantly, they&#8217;re often bringing fresher creative perspectives.</p><p>The long and short is, game development is decentralizing culturally and geographically.</p><div><hr></div><h1>&#9888;&#65039; Infinite Content Is Losing Its Appeal</h1><p>For years, the industry chased scale with endless maps, infinite crafting, and hundreds of hours of content.</p><p>But players increasingly talk about wanting <em><strong>memorable experiences</strong></em>, <em><strong><a href="https://respawn.outlookindia.com/gaming/gaming-news/indie-pass-launch-sparks-debate-over-indie-subscription-model">intentional design</a></strong></em><a href="https://respawn.outlookindia.com/gaming/gaming-news/indie-pass-launch-sparks-debate-over-indie-subscription-model">, </a><em><strong><a href="https://respawn.outlookindia.com/gaming/gaming-news/indie-pass-launch-sparks-debate-over-indie-subscription-model">emotional payoff</a></strong></em><a href="https://respawn.outlookindia.com/gaming/gaming-news/indie-pass-launch-sparks-debate-over-indie-subscription-model">, and games they can </a><em><a href="https://respawn.outlookindia.com/gaming/gaming-news/indie-pass-launch-sparks-debate-over-indie-subscription-model">actually</a></em><a href="https://respawn.outlookindia.com/gaming/gaming-news/indie-pass-launch-sparks-debate-over-indie-subscription-model"> finish</a>.</p><p>Completion is becoming emotionally valuable again, and it&#8217;s changing <em><strong>pacing decisions</strong></em>, <em><strong>game length</strong></em>, and <em><strong>content strategy</strong></em>.</p><p>In a nutshell, more content no longer automatically means more value.</p><div><hr></div><h1>&#128640; Your Move This Week</h1><p>Ask yourself:</p><ul><li><p>Does your game respect player time?</p></li><li><p>Are you building an audience you actually own?</p></li><li><p>Would your game still stand out without graphical fidelity?</p></li><li><p>Are you designing for endlessness, or memorability?</p></li></ul><p>Why don&#8217;t you share your answers with us either by dropping a comment or shooting a message to us? This is <em><strong>your</strong></em> game dev space; <em><strong>our</strong></em> game dev space. </p><div><hr></div><p>The industry used to optimize for <em>more</em> scale, content, systems, and monetization. But if we put ourselves in players&#8217; shoes, they&#8217;re searching for something smaller and more meaningful instead. If this edition resonated with you, feel free to hit like and share it with your teammates. We always welcome your presence and thoughts.</p><p>Until next week, keep creating and <em><strong>stay awesome</strong></em>.</p><p><strong>Warm Regards,</strong></p><p><strong>Game Dev Assembly Team</strong></p><div><hr></div><h2>&#127908; The Complete Game Marketing Roadmap: From Idea to Post-Launch Success</h2><p>Don&#8217;t forget to tune in to our free event this Saturday with <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Jordan&quot;,&quot;id&quot;:102345400,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61eff547-5d25-425a-8b09-85dccc018d0a_2000x2000.jpeg&quot;,&quot;uuid&quot;:&quot;19e059ad-32c8-4809-a162-75e37d4a3d53&quot;}" data-component-name="MentionToDOM"></span> from <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;OP Game Marketing&quot;,&quot;id&quot;:2700177,&quot;type&quot;:&quot;pub&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:null,&quot;uuid&quot;:&quot;3ca9abf8-16f8-4365-bfae-684ce5891134&quot;}" data-component-name="MentionToDOM"></span>. </p><p>&#128197; <strong>May 23, 2026 (Saturday)</strong> | &#9200; <strong>10 AM ET</strong> | Free</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.co.uk/e/the-complete-game-marketing-roadmap-from-idea-to-post-launch-success-tickets-1987902954249?aff=gdaNL&quot;,&quot;text&quot;:&quot;GRAB YOUR TICKETS TODAY&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eventbrite.co.uk/e/the-complete-game-marketing-roadmap-from-idea-to-post-launch-success-tickets-1987902954249?aff=gdaNL"><span>GRAB YOUR TICKETS TODAY</span></a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!40qS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa021b5d2-e0a9-4671-bbe1-3f2d6ca03197_1880x940.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!40qS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa021b5d2-e0a9-4671-bbe1-3f2d6ca03197_1880x940.webp 424w, https://substackcdn.com/image/fetch/$s_!40qS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa021b5d2-e0a9-4671-bbe1-3f2d6ca03197_1880x940.webp 848w, https://substackcdn.com/image/fetch/$s_!40qS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa021b5d2-e0a9-4671-bbe1-3f2d6ca03197_1880x940.webp 1272w, https://substackcdn.com/image/fetch/$s_!40qS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa021b5d2-e0a9-4671-bbe1-3f2d6ca03197_1880x940.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!40qS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa021b5d2-e0a9-4671-bbe1-3f2d6ca03197_1880x940.webp" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a021b5d2-e0a9-4671-bbe1-3f2d6ca03197_1880x940.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:61606,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/198251154?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa021b5d2-e0a9-4671-bbe1-3f2d6ca03197_1880x940.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!40qS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa021b5d2-e0a9-4671-bbe1-3f2d6ca03197_1880x940.webp 424w, https://substackcdn.com/image/fetch/$s_!40qS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa021b5d2-e0a9-4671-bbe1-3f2d6ca03197_1880x940.webp 848w, https://substackcdn.com/image/fetch/$s_!40qS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa021b5d2-e0a9-4671-bbe1-3f2d6ca03197_1880x940.webp 1272w, https://substackcdn.com/image/fetch/$s_!40qS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa021b5d2-e0a9-4671-bbe1-3f2d6ca03197_1880x940.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[The Failure: Marketing Isn't a Launch Event, It's a Leadership Problem]]></title><description><![CDATA[Part 1 of Series: Why Most Game Marketing Fails (And the System That Actually Works)]]></description><link>https://gamedevnewsletter.substack.com/p/game-marketing-isnt-a-launch-event-its-a-leadership-problem</link><guid isPermaLink="false">https://gamedevnewsletter.substack.com/p/game-marketing-isnt-a-launch-event-its-a-leadership-problem</guid><dc:creator><![CDATA[Game Dev Assembly Editors]]></dc:creator><pubDate>Fri, 15 May 2026 16:25:20 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/847ba02b-0835-4269-81bf-4157162cd9e4_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Editor&#8217;s Note</h1><p>Hello everyone! &#128075;&#127918; We&#8217;ve officially launched our first <strong>mini-series</strong> focused on solving real problems game developers go through. Over the next few weeks, we&#8217;re teaming up with <strong>Jay Rooney</strong>, founder of <em><strong><a href="https://spawnpointmarketing.com/">Spawn Point Marketing</a></strong></em>, former indie dev, and a marketer who scaled a startup to 700,000 users without paid ads, to break down why so many good games still fail to break through, and what studios can actually do about it.</p><p>In <em><strong>Part 1</strong></em>, Jay dives into the uncomfortable reality behind failed launches: <strong>most studios don&#8217;t have a marketing problem; they have a </strong><em><strong>marketing leadership</strong></em><strong> problem</strong>. If you&#8217;ve wondered why great games still disappear into the void, this issue is going to hit hard.</p><p>And this is only the beginning. The next parts will explore the marketing engine itself, the metrics that matter, and the workflows studios can use to build momentum before launch. Buckle up; this is going to be an exciting ride! </p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!akLj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8894fa3-6737-48e4-855b-48e19da50909_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!akLj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8894fa3-6737-48e4-855b-48e19da50909_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!akLj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8894fa3-6737-48e4-855b-48e19da50909_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!akLj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8894fa3-6737-48e4-855b-48e19da50909_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!akLj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8894fa3-6737-48e4-855b-48e19da50909_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!akLj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8894fa3-6737-48e4-855b-48e19da50909_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c8894fa3-6737-48e4-855b-48e19da50909_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2115825,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/197830791?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8894fa3-6737-48e4-855b-48e19da50909_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!akLj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8894fa3-6737-48e4-855b-48e19da50909_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!akLj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8894fa3-6737-48e4-855b-48e19da50909_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!akLj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8894fa3-6737-48e4-855b-48e19da50909_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!akLj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8894fa3-6737-48e4-855b-48e19da50909_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Roughly <a href="https://steamdb.info/stats/releases/">20,000 games</a> were shipped on <a href="https://store.steampowered.com/">Steam</a> in 2025. Of these, almost half got <a href="https://www.pcgamer.com/gaming-industry/more-than-19-000-games-launched-on-steam-this-year-but-almost-half-have-fewer-than-10-reviews/">fewer than ten reviews</a>, and around 2,200 got <em>zero</em>.</p><p>When this happens to a studio, their first instinct is usually to blame the market, however leadership decides to frame it:</p><p><em>&#8220;Too many releases.&#8221;</em></p><p><em>&#8220;Too much noise.&#8221;</em></p><p><em>&#8220;The algorithm decided we didn&#8217;t matter.&#8221;</em></p><p>Those are comforting narratives, and if nothing else, the diagnosis <em>feels</em> true. It even has supporting data! There <em>really are</em> more game releases than all the world&#8217;s players could possibly play through, at a time when audience attention <em>really is</em> more fragmented than ever before. And although it feels dirty to say so bluntly, <a href="https://store.steampowered.com/">Steam</a> <em>really does</em> pick winners.</p><p>But all those excuses (and again, I hate to be so blunt, but they <em>really are</em> just excuses) point at the wrong problem.</p><p>Most studios don&#8217;t have a <em>marketing</em> problem, they have a <em>marketing <strong>leadership</strong></em> problem. Chances are, if you&#8217;re reading this article, so do you. And until you see the difference, no amount of tactical advice is going to save you from the brutal economics of a market that sees over 20,000 annual launches (of which nearly half are functionally invisible to their consumers).</p><p>This is <em><strong>Part 1</strong></em> of a <strong>four-part series</strong> on why game marketing fails for studios that deserve better, and what to do about it. Today is the diagnosis. Over the next three weeks, we&#8217;ll build the cure: <strong>a repeatable, scalable marketing system</strong>, honed through my own experience launching and scaling into crowded markets, and sharpened by both the latest industry data and my deep knowledge of video games and the people who play them.</p><div><hr></div><h4>Table of Contents</h4><ol><li><p><a href="https://gamedevnewsletter.substack.com/i/197830791/why-most-indie-games-fail-after-spending-years-in-development">Why Most Indie Games Fail After Spending Years in Development</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/197830791/why-posting-more-on-social-media-doesnt-grow-your-game">Why Posting More on Social Media Doesn&#8217;t Grow Your Game</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/197830791/why-shareable-gameplay-moments-matter-more-than-features">Why Shareable Gameplay Moments Matter More Than Features</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/197830791/the-hard-truth-good-games-fail-all-the-time">The Hard Truth? Good Games Fail all the Time</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/197830791/its-a-leadership-problem-not-a-marketing-one">It&#8217;s a Leadership Problem, Not a Marketing One</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/197830791/whats-next">What&#8217;s Next?</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/197830791/about-the-author">About the Author</a></p></li></ol><div><hr></div><h1>Why Most Indie Games Fail After Spending Years in Development</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LkgY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F420fd283-5457-467b-b6b7-d53a74aa0393_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LkgY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F420fd283-5457-467b-b6b7-d53a74aa0393_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!LkgY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F420fd283-5457-467b-b6b7-d53a74aa0393_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!LkgY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F420fd283-5457-467b-b6b7-d53a74aa0393_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!LkgY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F420fd283-5457-467b-b6b7-d53a74aa0393_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LkgY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F420fd283-5457-467b-b6b7-d53a74aa0393_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/420fd283-5457-467b-b6b7-d53a74aa0393_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1848754,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/197830791?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F420fd283-5457-467b-b6b7-d53a74aa0393_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!LkgY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F420fd283-5457-467b-b6b7-d53a74aa0393_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!LkgY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F420fd283-5457-467b-b6b7-d53a74aa0393_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!LkgY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F420fd283-5457-467b-b6b7-d53a74aa0393_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!LkgY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F420fd283-5457-467b-b6b7-d53a74aa0393_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Here&#8217;s a rough picture of almost every failed indie launch, in slow motion, from start to finish:</p><p>A team comes up with a brilliant game idea, and spends two to four years heads-down on building it. Throughout this time, marketing is nothing but a vague &#8220;future problem.&#8221; Finally, around six months out from launch, someone (usually whoever has the least to do that week) says, <em>&#8220;Um&#8230; you guys? We should probably start marketing this.&#8221;</em> So a <a href="https://x.com/">Twitter/X</a> account appears, and a <a href="https://discord.com/">Discord</a> server goes up. The team posts screenshots and stitches together a trailer. The <a href="https://store.steampowered.com/">Steam</a> page goes live, but it&#8217;s treated as a checkbox: filled in, then forgotten. <a href="https://store.steampowered.com/sale/nextfest">Next Fest</a> comes around, so the team submits a demo. And then, the moment of truth: launch day arrives. The team gathers around a projector in the conference room, staring at the wishlist counter and the review page and the dashboard&#8230; <em>refreshing</em>&#8230; <em>refreshing</em>&#8230; <em>refreshing</em>&#8230;</p><p>Then, 48 hours pass and the launch window closes. The algorithm moves on, and discoverability decays. Eventually, the team moves on to the next project, telling themselves they&#8217;ll &#8220;do marketing better next time.&#8221;</p><p>Every step in that sequence seems reasonable in isolation. But together, they form the most predictable failure pattern in the industry. The trap isn&#8217;t that any individual decision was <em>wrong,</em> it&#8217;s that nobody ever made the <strong>strategic decisions</strong> that determine whether marketing can even work to begin with. Those decisions were just defaulted into.</p><p>This is the pattern. It&#8217;s structural. It constantly plays out, in thousands of launches each year. And it&#8217;s why the same mistakes keep repeating across studios that have nothing else in common.</p><h1>Why Posting More on Social Media Doesn&#8217;t Grow Your Game</h1><p>When studios in this trap ask for help, the most common advice they get is some version of &#8220;post more.&#8221; How many of the following variations of the same basic advice have you been given, or even given to others?</p><ul><li><p>Make more clips!</p></li><li><p>Be more active on <a href="https://x.com/">Twitter/X</a>!</p></li><li><p>Try <a href="https://www.tiktok.com/">TikTok</a>!</p></li><li><p>Get on <a href="https://bsky.app/">Bluesky</a>!</p></li><li><p>Post your dev logs on <a href="https://www.youtube.com/">YouTube</a>!</p></li></ul><p>This advice has become so universally repeated, for so long, that we don&#8217;t even notice it anymore. It&#8217;s become as invisible as the very air we breathe. It also <em>doesn&#8217;t work,</em> not because posting is bad (it isn&#8217;t; in many cases, you really <em>should</em> post more!) but because <em>posting is a tactic, and the people giving this advice are putting tactics before strategy. </em>Or, to use a game dev analogy: they&#8217;re trying to animate unrigged models, or writing dialogue before finalizing the character sheets.</p><p>A sound marketing strategy answers, <em>at the very minimum</em>, the following questions:</p><ul><li><p>Who is this game for?</p></li><li><p>Where do those people already gather?</p></li><li><p>What about the game will get them to lean in?</p></li><li><p>What do we need from them at each stage of awareness?</p></li></ul><p>Tactics are the things you do <em>after</em> you answer those questions. Posting more on social media without an underlying strategy to guide you is like throwing darts in the dark and being told you just need to throw faster.</p><p>If your TikTok clips aren&#8217;t converting, you don&#8217;t have a content problem, you have a <em>positioning</em> problem. And not even the most aggressive posting cadence will fix it. Unfortunately, this common-sense diagnosis is not common knowledge amongst indie game developers; the generic and inapplicable advice has proliferated so thoroughly it has become the default (&#8220;My wishlists must be flat because I&#8217;m not posting enough!&#8221;). And so it doesn&#8217;t even occur to indie developers that the actual problem is upstream of the content they post, and that they need to answer the above five questions at the <em>start</em> of development (not after the trailer drops); and the worst part is, it isn&#8217;t even their fault! They just don&#8217;t know, because nobody ever told them (or, if they have heard, they don&#8217;t believe it because it goes so against the conventional knowledge that it feels counterintuitive).</p><p>Fortunately, this is starting to change, and I do see an increasing awareness in the indie scene that marketing issues need to be addressed, on a strategic level, much earlier in the development cycle than has long been the norm. But this is bitter, hard-earned insight, paid for in failed launches and disbanded teams. And, of course, knowing you <em>have</em> to address marketing early is a different beast than knowing <em>how</em> to address it&#8230; which means that, in the absence of standardized frameworks and best practices, this knowledge is <em>also</em> painfully earned through trial-and-error, lost revenue, and studio closures.</p><p>If I can help just <em>one</em> talented, hardworking team avert disaster by avoiding the mistakes I see teams make time and time again, this series will have done its job. And if I can help make marketing-as-development-discipline the <em>norm</em>, and not the <em>exception</em>? &#8230;Well, that would be my greatest contribution to this medium and this industry that I love so dearly.</p><h1>Why Shareable Gameplay Moments Matter More Than Features</h1><p>There&#8217;s a related failure mode that runs alongside the tactics one: studios market what they <em>built</em>, not what players will <em>share</em>.</p><p>When a developer talks about their game, they usually lead with the systems they&#8217;re proud of. Maybe they want to show off their procedural generation&#8217;s scale and granularity, or the mind-bogglingly complex and intertwined dialogue tree they wrote. Or maybe they&#8217;re proud of the near-infinite depth their crafting system enables.</p><p>I&#8217;m not denying how hard it is to build these things, and the team <em>should</em> feel proud about building them. But, that being said&#8230;</p><p>Players don&#8217;t share <em>systems</em>, they share <em>moments</em>. Think about the fondest memories from <em>your</em> favorite games: hearing &#8220;Yearnings of the Wind&#8221; in <em>Chrono Trigger </em>for the first time, pulling off a successful six-hour raid in <em>World of Warcraft</em> after weeks of planning, seeing Ganondorf turn into Ganon in <em>Ocarina of Time</em>, finally defeating Malenia in <em>Elden Ring</em>, or the first time you saw Aerith&#8217;s death scene in <em>Final Fantasy VII</em>.</p><p>Now, look at the types of moments other players share online. Hearing that iconic music track for the first time&#8230; an unexpected co-op victory with someone on the other side of the planet&#8230; obtaining that 1 in 10,000 legendary drop&#8230; that one boss that made them repeatedly swear out loud&#8230; a scene that makes them cry every time they play through it&#8230; <em>that</em> is what players clip, screenshot, and recommend in a Discord server at 1am.</p><p>The gap between what devs build their marketing around and what players actually transmit to each other has become one of the industry&#8217;s most expensive blind spots. If a game has a brilliant feature set but zero shareable moments, it will be all but completely invisible to the world. But another game with modest features and one unforgettable 30-second sequence will spread like wildfire.</p><p>You don&#8217;t have to dumb your game down. That&#8217;s not what I&#8217;m suggesting, so don&#8217;t get it twisted; this isn&#8217;t about that. But you <em>do</em> have to be honest with yourself about what travels in 2026, and you have to be deliberate and intentional about designing it in your game.</p><h1>The Hard Truth? Good Games Fail all the Time</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!l_pB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c47d09b-5c2a-4181-b736-b56a54fc307f_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!l_pB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c47d09b-5c2a-4181-b736-b56a54fc307f_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!l_pB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c47d09b-5c2a-4181-b736-b56a54fc307f_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!l_pB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c47d09b-5c2a-4181-b736-b56a54fc307f_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!l_pB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c47d09b-5c2a-4181-b736-b56a54fc307f_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!l_pB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c47d09b-5c2a-4181-b736-b56a54fc307f_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9c47d09b-5c2a-4181-b736-b56a54fc307f_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1843204,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/197830791?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c47d09b-5c2a-4181-b736-b56a54fc307f_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!l_pB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c47d09b-5c2a-4181-b736-b56a54fc307f_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!l_pB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c47d09b-5c2a-4181-b736-b56a54fc307f_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!l_pB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c47d09b-5c2a-4181-b736-b56a54fc307f_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!l_pB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9c47d09b-5c2a-4181-b736-b56a54fc307f_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Again, I hate to be so blunt here, but an industry in as deep a crisis as ours owes it to itself to discuss this honestly and with clear eyes, no matter how painful the truth undeniably is.</p><p>A game can be genuinely good (well-designed, well-made, and well-reviewed&#8230; at least, by the few people who play it) and still fail commercially. This happens <em>constantly</em>, and it is the most demoralizing manifestation of our industry&#8217;s overall failure pattern, because it punctures the developer&#8217;s last line of defense: <em>if I just make the game good enough, the rest will sort itself out</em>.</p><p>[Narrator Voice:] It will <em>not</em> sort itself out.</p><p>I&#8217;m sorry, but the data is unequivocal on this. Industry analysis of 2024 Steam releases found that <strong><a href="https://opgamemarketing.substack.com/p/the-2024-indie-and-aa-game-market">roughly 85% of indie revenue went to the top 10% of titles</a></strong>. <strong>On Steam, </strong><em><strong>the middle does not exist</strong></em><strong>.</strong> There is the top tenth, and there is the long tail. There is nothing in between.</p><p>What separates the games that make it into that top tier from the ones that die in obscurity is almost never &#8220;the better game won.&#8221; <em>Both</em> groups contain great games. What separates them is that the winners had a <strong>marketing engine</strong> running for over a year before launch. They had:</p><ul><li><p>A Steam page accumulating wishlists,</p></li><li><p>A community shipping clips,</p></li><li><p>Relationships with creators who were committed to covering the launch, and</p></li><li><p>Momentum the algorithm could detect.</p></li></ul><p>The studios that hit launch day with no engine in place don&#8217;t lose because their game is bad. Often, and tragically, they lose because by the time launch arrives, the launch is already over. <em>It had been over for months</em>. Specifically, <strong>the decisions that determine launch outcomes are made </strong><em><strong>12 to 18 months earlier</strong></em><strong>.</strong> Most studios aren&#8217;t aware those decisions are being made at all, but they are being made&#8230; even if it&#8217;s not by them (and lest we forget: not making a decision is, in and of itself, a decision).</p><h1>It&#8217;s a Leadership Problem, Not a Marketing One</h1><p>Now, we can finally name what&#8217;s actually happening.</p><p>When marketing fails for a studio, it almost never fails because the social media manager wasn&#8217;t trying hard enough, or because the trailer wasn&#8217;t cut quite right. It fails because <em>nobody in the studio was making strategic marketing decisions early enough for any of those tactics to work.</em> Positioning, audience definition, channel strategy, community architecture, and launch sequencing are all <strong>leadership decisions</strong>, and most studios decide them by default, by accident, or not at all.</p><p>This is the leadership problem. And it&#8217;s specifically a <em>marketing</em> leadership problem, because every studio has plenty of leadership in other domains. The creative director, the technical lead, and the producer are all leading. But there is <em>rarely</em> a person whose job is to strategically think about how this game finds its audience, and to make decisions accordingly with enough lead time to matter.</p><p>And no, the fix is not to hire a CMO. Most studios at this stage cannot afford one and don&#8217;t need one. The fix is to <strong>name the role</strong>, even if the role is held by the founder for a few hours a week. <em>Someone</em> has to own this, the way <em>someone</em> owns engineering, art, design, and production. If nobody owns it, the work that produces a successful launch never gets done.</p><h1>What's Next?</h1><p>Now that I&#8217;ve diagnosed the problem, the rest of this series will walk through the cure.</p><p>In <em><strong>Part 2</strong></em>, we&#8217;ll lay out the six components that make up a working marketing engine: the things a studio needs in place long before launch, and what &#8220;good&#8221; looks like for each.</p><p>In <em><strong>Part 3</strong></em>, we&#8217;ll dig into the numbers underneath the engine: what conversion rates, discovery sources, and revenue patterns actually mean for how you should prioritize your time.</p><p>And in <em><strong>Part 4</strong></em>, we&#8217;ll close with the cadence and the signals: what to do every week to keep the engine running, and how to tell whether it&#8217;s actually working.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8T5Y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40ec6014-c93d-4efd-baef-dc804327fe88_1731x1089.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8T5Y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40ec6014-c93d-4efd-baef-dc804327fe88_1731x1089.png 424w, https://substackcdn.com/image/fetch/$s_!8T5Y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40ec6014-c93d-4efd-baef-dc804327fe88_1731x1089.png 848w, https://substackcdn.com/image/fetch/$s_!8T5Y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40ec6014-c93d-4efd-baef-dc804327fe88_1731x1089.png 1272w, https://substackcdn.com/image/fetch/$s_!8T5Y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40ec6014-c93d-4efd-baef-dc804327fe88_1731x1089.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8T5Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40ec6014-c93d-4efd-baef-dc804327fe88_1731x1089.png" width="1456" height="916" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/40ec6014-c93d-4efd-baef-dc804327fe88_1731x1089.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:916,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8T5Y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40ec6014-c93d-4efd-baef-dc804327fe88_1731x1089.png 424w, https://substackcdn.com/image/fetch/$s_!8T5Y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40ec6014-c93d-4efd-baef-dc804327fe88_1731x1089.png 848w, https://substackcdn.com/image/fetch/$s_!8T5Y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40ec6014-c93d-4efd-baef-dc804327fe88_1731x1089.png 1272w, https://substackcdn.com/image/fetch/$s_!8T5Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40ec6014-c93d-4efd-baef-dc804327fe88_1731x1089.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If you want a head start, I built a free <strong>Game Launch Readiness Scorecard</strong> that diagnoses where your studio sits across all six components of the engine in about four minutes. It exists because so many of the conversations I have with studio founders go better when we both have a shared map of where the gaps are. You can take it at <strong><a href="http://scorecard.spawnpointmarketing.com">scorecard.spawnpointmarketing.com</a></strong>.</p><p>And if you want to talk through the system live, I&#8217;m running a free 60-minute session with Game Dev Assembly on <strong>Tuesday, June 9th at 9:00 AM PT</strong> &#8212; <em>Building a Marketing Engine for Your Game (Without a CMO)</em>. We&#8217;ll go deeper on the engine itself and run a Q&amp;A. <a href="https://www.eventbrite.co.uk/e/building-a-marketing-engine-for-your-game-without-a-cmo-tickets-1988318245396?aff=GDASubstack">Sign up here</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qiqe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef5283ed-86c5-4937-98dd-658e53777293_1200x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qiqe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef5283ed-86c5-4937-98dd-658e53777293_1200x600.png 424w, https://substackcdn.com/image/fetch/$s_!qiqe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef5283ed-86c5-4937-98dd-658e53777293_1200x600.png 848w, https://substackcdn.com/image/fetch/$s_!qiqe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef5283ed-86c5-4937-98dd-658e53777293_1200x600.png 1272w, https://substackcdn.com/image/fetch/$s_!qiqe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef5283ed-86c5-4937-98dd-658e53777293_1200x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qiqe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef5283ed-86c5-4937-98dd-658e53777293_1200x600.png" width="1200" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ef5283ed-86c5-4937-98dd-658e53777293_1200x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:308114,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/197830791?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef5283ed-86c5-4937-98dd-658e53777293_1200x600.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qiqe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef5283ed-86c5-4937-98dd-658e53777293_1200x600.png 424w, https://substackcdn.com/image/fetch/$s_!qiqe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef5283ed-86c5-4937-98dd-658e53777293_1200x600.png 848w, https://substackcdn.com/image/fetch/$s_!qiqe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef5283ed-86c5-4937-98dd-658e53777293_1200x600.png 1272w, https://substackcdn.com/image/fetch/$s_!qiqe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef5283ed-86c5-4937-98dd-658e53777293_1200x600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>See you next week for <em><strong>Part 2</strong></em>.</p><p>GG,</p><p>~Jay</p><div><hr></div><h2>About the Author </h2><p><a href="https://www.linkedin.com/in/jayrooneysf">Jay Rooney</a> is a founder, marketing strategist, writer, and lifelong gamer working at the intersection of game development and growth. He is the founder of <strong><a href="https://spawnpointmarketing.com">Spawn Point Marketing</a></strong>, a fractional CMO practice serving indie and AA game studios, where he helps founders build the marketing systems that turn good games into successful launches.</p><p>He previously co-founded Digi-AI, an AI-native mobile developer he scaled from zero to 700,000 users with no paid advertising, the case study that grounds much of his current work on community-driven, systems-led growth. He teaches graduate marketing communications at <strong>Golden Gate University</strong> in San Francisco.</p><p>His work focuses on pre-production marketing strategy, community building as long-term infrastructure, and the leadership decisions that determine whether a launch succeeds twelve months before it happens. He writes about gaming culture and studio strategy in <em><a href="https://gameandword.substack.com">Game &amp; Word</a></em>, an award-winning newsletter, and publishes the <em><a href="https://spawnpointmarketing.substack.com">Spawn Point Marketing</a></em><a href="https://spawnpointmarketing.substack.com"> Substack</a> on fractional marketing leadership for studios.</p><p>He got his start in the games industry by reviewing games for <em>Level Up Media</em>, and also shipped an indie game as a narrative designer (<em>Tavern Simulator</em>), because he believes the best game marketing comes from people who have sat on the dev side of the table.</p><div><hr></div><h1>Closing - Until Next Friday</h1><p>And there we are, folks! We have kicked this series off with a bang. Did you expect it to be this blunt and juicy? Has it made you step back and think about how you&#8217;re planning and executing marketing during the design phase? </p><p><em><strong>Part 1</strong></em> is the wake-up call. Great games fail because marketing is treated like a last-minute task instead of a core leadership function. Jay has laid out the real problem behind invisible launches, flat wishlists, and games that disappear despite years of hard work. But now that the diagnosis is clear, next week we move into the cure.</p><p>In <em><strong>Part 2</strong></em>, we&#8217;ll break down the six-part marketing engine that successful studios build long before launch day arrives, from community and creator relationships to Steam presence, wishlist momentum, and marketing timing itself.</p><p>Stay tuned for next week&#8217;s issue. This is where the system starts coming together.</p><p>Warm Regards,</p><p><strong>Game Dev Assembly Team</strong></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gamedevnewsletter.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Game Dev Assembly Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[AI, Funding, and the Changing Game Economy]]></title><description><![CDATA[Signals You Should Know]]></description><link>https://gamedevnewsletter.substack.com/p/ai-funding-and-the-changing-game</link><guid isPermaLink="false">https://gamedevnewsletter.substack.com/p/ai-funding-and-the-changing-game</guid><dc:creator><![CDATA[Game Dev Assembly Editors]]></dc:creator><pubDate>Mon, 11 May 2026 15:38:39 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6a655c40-2404-48cc-ba5f-c083c9e986e3_1036x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Editor&#8217;s Note</h1><p>Hi everyone, and welcome to another edition of <strong>Industry Signals</strong> by <strong>Game Dev Assembly</strong>! &#127918;&#10024;The game space is entering a different phase right now. AI is moving <em><strong>deeper</strong></em> into development workflows, funding conditions are <em><strong>tightening</strong></em>, and studios across the industry are being forced to <em><strong>rethink</strong></em> how games are built, staffed, and sustained long-term. There&#8217;s a noticeable shift toward leaner teams, faster production cycles, and more sustainable business models, and the ripple effects are showing up everywhere from <em><strong>tooling</strong></em> to <em><strong>publishing strategy</strong></em>.</p><p>In this week&#8217;s edition, we&#8217;re breaking down the biggest signals shaping where game development appears to be heading next. Let&#8217;s get into it &#128640;</p><h1>&#129302; AI Adoption Is Moving From Experiment to Core Pipeline Infrastructure</h1><p><a href="https://www.gamesradar.com/games/battle-royale/epic-knows-everyones-afraid-ai-is-going-to-take-all-our-jobs-but-fortnite-dev-insists-the-goal-of-ai-is-to-make-us-more-efficient/">Major publishers and platform holders</a> are now publicly positioning AI as <em><strong>embedded production tooling</strong></em> rather than optional <em>research and development</em>.</p><h2>&#128269; Key Signals</h2><ul><li><p>&#128377;&#65039; <strong><a href="https://www.tomsguide.com/ai/we-see-ai-as-a-powerful-tool-to-help-us-in-this-mission-playstation-ceo-lays-out-plan-to-use-ai-for-future-game-development?">Sony PlayStation AI roadmap via Tom&#8217;s Guide</a></strong>: Sony confirmed internal AI tooling for <em><strong>facial animation</strong></em>, <em><strong>QA</strong></em>, <em><strong>modeling</strong></em>, and <em><strong>workflow automation</strong></em> across PlayStation Studios.</p></li><li><p>&#128173; <strong><a href="https://www.pcgamer.com/software/ai/sony-interactive-entertainment-chief-says-ai-will-enable-gaming-experiences-like-never-before-and-i-wonder-how-long-are-these-guys-going-to-talk-about-it-before-we-actually-start-seeing-it/?">PC Gamer coverage of Sony AI strategy</a></strong>: Industry skepticism remains high despite executive optimism.</p></li><li><p>&#128736;&#65039; <strong><a href="https://www.creativebloq.com/3d/video-game-design/the-promise-and-panic-of-unity-ais-open-beta-rollout-explained?">Unity AI Open Beta analysis via Creative Bloq</a></strong>: Unity is aggressively integrating <em><strong>AI directly into editor workflows</strong></em>, signaling tooling competition with Unreal and Godot.</p></li><li><p>&#128200; <strong><a href="https://www.reuters.com/business/gaming-industry-could-unlock-22-billion-profits-ai-driven-cost-cuts-morgan-2026-04-22/">Reuters report on Morgan Stanley AI forecast</a></strong>: Analysts estimate AI could reduce development costs by <strong>~50%</strong> and generate <strong>$22B</strong> in industry profit upside.</p></li></ul><h3>Strategic Interpretation</h3><p>In a nutshell, the industry is no longer debating whether to use <strong>AI</strong>. It&#8217;s now focused on where <em><strong>AI creates the most value across the development pipeline</strong></em>. Studios are balancing automation with the need to maintain creative identity, while smaller teams are increasingly able to compete at a much higher level thanks to <em><strong>faster workflows</strong></em>, <em><strong>leaner production pipelines</strong></em>, and <em><strong>lower development costs</strong></em> enabled by AI tools.</p><p><strong>Expect:</strong></p><ul><li><p>Faster prototyping cycles.</p></li><li><p>Reduced outsourcing spend.</p></li><li><p>Smaller content teams.</p></li><li><p>Increased emphasis on creative direction and systems design over asset throughput.</p></li></ul><div><hr></div><h1>&#128176; The Funding Market Is Favoring Leaner, Mid-Budget, High-ROI Games</h1><p>The strongest investment signal this week is the continued institutional pivot <em>away</em> from bloated AAA risk profiles toward <em><strong>efficient indie and AA production</strong></em>.</p><h2>&#128269; Key Signals</h2><ul><li><p>&#128181; <strong><a href="https://www.gamesradar.com/games/breakout-hits-with-comparatively-modest-budgets-keep-schooling-aaa-so-the-ceo-of-strategy-powerhouse-and-manor-lords-publisher-hooded-horse-is-heading-a-new-usd100-million-fund-for-indies/?">$100M indie fund led by Hooded Horse CEO via GamesRadar</a></strong>: A new <strong>$100M</strong> <strong>fund</strong> is targeting indie and strategy projects with <em><strong>sustainable budgets</strong></em> and <em><strong>breakout potential</strong></em>.</p></li><li><p>&#129534; <strong><a href="https://games.gg/news/game-developers-turn-to-self-funding/?utm_source=chatgpt.com">Game Developers Turn to Self-Funding via Games.gg</a></strong>: Developers are increasingly <em><strong>self-financing projects </strong></em>as publisher capital tightens.</p></li><li><p>&#127959;&#65039; <strong><a href="https://blog.mean.ceo/indie-devs-news-may-2026/?">Indie Devs News May 2026 via MEAN CEO</a></strong>: Studios are moving toward <em><strong>contractor-heavy operating models</strong></em> and <em><strong>lean internal teams</strong></em>.</p></li><li><p>&#128682; <strong><a href="https://www.gamesradar.com/games/simulation/the-stanley-parable-creator-and-minecraft-composers-indie-studio-is-shutting-down-after-one-cozy-sim-because-its-a-particularly-tough-time-for-raising-game-funds/?">Ivy Road shutdown coverage via GamesRadar</a></strong>: Even prestige indie teams with proven talent are struggling to secure financing.</p></li></ul><h3>Strategic Interpretation</h3><p>Investors are becoming far more selective, with growing preference for studios operating in <em><strong>proven niches</strong></em>, maintaining <em><strong>lower burn rates</strong></em>, and <em><strong>shipping games faster</strong></em>. There&#8217;s also stronger demand for projects with <em><strong>evergreen monetization potential</strong></em>, <em><strong>community-driven growth</strong></em>, and <em><strong>PC-first business models</strong></em> that offer longer-tail revenue opportunities and lower distribution risk.</p><p><strong>Genres currently benefiting:</strong></p><ul><li><p>Strategy</p></li><li><p>Survival crafting</p></li><li><p>Roguelites</p></li><li><p>Cozy/lifestyle</p></li><li><p>Extraction/systems-heavy multiplayer</p></li><li><p>Mod-friendly games</p></li></ul><div><hr></div><h1>&#128201; Layoffs Are Still Defining Industry Psychology</h1><p>Despite isolated financial wins, the workforce environment remains <em><strong>unstable</strong></em>.</p><h2>&#128269; Key Signals</h2><ul><li><p>&#128202; <strong><a href="https://www.gamedeveloper.com/business/survey-one-in-four-developers-laid-off-over-the-past-two-years?">2026 State of the Game Industry layoff data via GameDeveloper.com</a></strong>: <strong>28%</strong> of developers experienced layoffs over the past two years. Nearly half remain unemployed.</p></li><li><p>&#127908; <strong><a href="https://gamedevreports.substack.com/p/gdc-the-state-of-the-game-industry-fcf?">GDC 2026 industry trends summary</a></strong>: Designers were among the hardest-hit roles.</p></li><li><p>&#127970; <strong><a href="https://www.pcgamer.com/gaming-industry/mindseye-developer-build-a-rocket-boy-lays-off-even-more-people/?">Build A Rocket Boy layoffs via PC Gamer</a></strong>: Another major restructuring around the troubled <strong>MindsEye</strong> project reinforces investor intolerance for under-performing AAA bets.</p></li><li><p>&#128165; <strong><a href="https://en.wikipedia.org/wiki/2022%E2%80%932026_video_game_industry_layoffs?">Wikipedia summary of 2022&#8211;2026 game industry layoffs</a></strong>: AAA development costs exceeding <strong>$200M</strong> are increasingly <em><strong>unsustainable</strong></em>.</p></li></ul><h3>Strategic Interpretation</h3><p>Studios are optimizing for leaner operations by maintaining <em><strong>smaller permanent teams</strong></em>, relying more on external production partnerships, extending financial runway, and prioritizing safer IP bets alongside reusable live-service ecosystems. As a result, the industry is placing greater value on adaptable, multidisciplinary developers who can operate across multiple areas of production.</p><div><hr></div><h1>&#129513; Unreal Continues Gaining Momentum While Unity Still Repairs Trust</h1><p><strong>Unity&#8217;s AI push</strong> is meaningful, but trust damage from prior pricing controversies continues influencing engine choices.</p><h2>&#128269; Key Signals</h2><ul><li><p>&#128220; <strong><a href="https://en.wikipedia.org/wiki/Unity_%28game_engine%29?">Unity historical licensing backlash overview</a></strong>: Continued migration toward Unreal and Godot is still being discussed in industry analysis.</p></li></ul><h3>Strategic Interpretation</h3><p>The engine landscape is becoming more clearly defined across the industry. <em><strong>Unreal</strong></em> continues to dominate <strong>high-fidelity AAA</strong> and <strong>AA</strong> production with strong enterprise credibility, <em><strong>Godot</strong></em> is gaining momentum among indie developers through its open-source model and growing community trust, while <em><strong>Unity</strong></em> remains highly influential in mobile development as it pushes further into AI-assisted workflows and editor experimentation.</p><div><hr></div><h1>&#127760; Publishers Are Prioritizing Evergreen Franchises and Live Ecosystems</h1><p>The strongest financial performers remain long-tail ecosystems.</p><h2>&#128269; Key Signals</h2><ul><li><p>&#128200; <strong><a href="https://wnhub.io/news/other/item-50768">EA FY26 performance summary</a></strong>: EA cites strong results from <em><strong>FC</strong></em>, <em><strong>Apex Legends</strong></em>, and <em><strong>Battlefield</strong></em>.</p></li></ul><h3>Strategic Interpretation</h3><p>Publishers are increasingly prioritizing games that can <em><strong>generate long-term recurring revenue</strong></em> through seasonal engagement, user-generated content ecosystems, and strong cross-platform retention. Existing player communities have become one of the industry&#8217;s most valuable assets, with publishers favoring projects that can <em><strong>sustain engagement</strong></em> well beyond launch rather than relying solely on one-time sales.</p><p><strong>Greenlight conditions for new IP remain difficult unless:</strong></p><ul><li><p>Development scope is controlled.</p></li><li><p>Marketing is community-native.</p></li><li><p>The concept is streamer/social friendly.</p></li></ul><div><hr></div><h1>&#9878;&#65039; Regulation and Consumer Ownership Pressure Are Growing</h1><p>Game preservation and ownership rights are becoming a bigger <em><strong>political issue</strong></em>.</p><h2>&#128269; Key Signals</h2><ul><li><p>&#128721; <strong><a href="https://en.wikipedia.org/wiki/Stop_Killing_Games?">Stop Killing Games movement overview</a></strong>: EU and California efforts are pushing publishers toward clearer end-of-life obligations for online games.</p></li></ul><h3>Strategic Interpretation</h3><p>The growing focus on consumer ownership and game preservation could push publishers toward stronger <em><strong>offline fallback support</strong></em>, greater <em><strong>accountability around live-service shutdowns</strong></em>, and clearer <em><strong>digital ownership policies</strong></em>. Over time, preservation-friendly design may also become a strategic advantage as regulators and players place increasing pressure on how online games are maintained and retired.</p><div><hr></div><h1>&#128064; Most Important Watchlist Items Over Next 90 Days</h1><p><strong>Watch closely:</strong></p><ul><li><p>AI-native production pipelines.</p></li><li><p>Unity AI adoption metrics.</p></li><li><p>Further consolidation or closures.</p></li><li><p>Funding announcements for mid-budget games.</p></li><li><p>Regulatory movement around live-service shutdowns.</p></li><li><p>Labor organization and unionization activity.</p></li><li><p>Unreal vs Godot adoption in indie space.</p></li></ul><div><hr></div><h1>&#128640; Your Move This Week</h1><ul><li><p>&#129302; Audit where AI could meaningfully reduce production friction in your current workflow.</p></li><li><p>&#128176; Re-evaluate project scope and burn rate against today&#8217;s tougher funding environment.</p></li><li><p>&#127918; Focus on mechanics and community features that encourage long-term retention, not just launch-day traction.</p></li><li><p>&#128736;&#65039; Reassess your engine and tooling strategy based on your studio&#8217;s actual long-term needs.</p></li><li><p>&#127793; Prioritize flexibility, as multidisciplinary skills and lean production models are becoming increasingly valuable across the industry.</p></li><li><p>&#128064; Keep a close eye on AI tooling, funding shifts, and live-service regulation, as these are likely to shape the next major wave of industry change.</p></li></ul><p>Then share your findings with us. Drop a comment in this edition or send us a message when you have done any of the above. Game Dev Assembly is <em><strong>your</strong></em> space; <em><strong>our</strong></em> collective space.</p><div><hr></div><h2>&#127908; The Complete Game Marketing Roadmap: From Idea to Post-Launch Success</h2><p>Most games don&#8217;t fail because they&#8217;re bad. They fail because no one sees them.</p><p>We&#8217;re doing a live session with <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Jordan&quot;,&quot;id&quot;:102345400,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61eff547-5d25-425a-8b09-85dccc018d0a_2000x2000.jpeg&quot;,&quot;uuid&quot;:&quot;19e059ad-32c8-4809-a162-75e37d4a3d53&quot;}" data-component-name="MentionToDOM"></span> from <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;OP Game Marketing&quot;,&quot;id&quot;:2700177,&quot;type&quot;:&quot;pub&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:null,&quot;uuid&quot;:&quot;3ca9abf8-16f8-4365-bfae-684ce5891134&quot;}" data-component-name="MentionToDOM"></span> on how to fix that.</p><p>&#128197; <strong>May 23, 2026 (Saturday)</strong> | &#9200; <strong>10 AM ET</strong> | Free</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.co.uk/e/the-complete-game-marketing-roadmap-from-idea-to-post-launch-success-tickets-1987902954249?aff=gdaNL&quot;,&quot;text&quot;:&quot;BOOK YOUR TICKET&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eventbrite.co.uk/e/the-complete-game-marketing-roadmap-from-idea-to-post-launch-success-tickets-1987902954249?aff=gdaNL"><span>BOOK YOUR TICKET</span></a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bZUo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d835b2-7c09-469e-9062-77e20c52d4ee_1880x940.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bZUo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d835b2-7c09-469e-9062-77e20c52d4ee_1880x940.webp 424w, https://substackcdn.com/image/fetch/$s_!bZUo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d835b2-7c09-469e-9062-77e20c52d4ee_1880x940.webp 848w, https://substackcdn.com/image/fetch/$s_!bZUo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d835b2-7c09-469e-9062-77e20c52d4ee_1880x940.webp 1272w, https://substackcdn.com/image/fetch/$s_!bZUo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d835b2-7c09-469e-9062-77e20c52d4ee_1880x940.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bZUo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d835b2-7c09-469e-9062-77e20c52d4ee_1880x940.webp" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/52d835b2-7c09-469e-9062-77e20c52d4ee_1880x940.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:61606,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/197219943?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d835b2-7c09-469e-9062-77e20c52d4ee_1880x940.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bZUo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d835b2-7c09-469e-9062-77e20c52d4ee_1880x940.webp 424w, https://substackcdn.com/image/fetch/$s_!bZUo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d835b2-7c09-469e-9062-77e20c52d4ee_1880x940.webp 848w, https://substackcdn.com/image/fetch/$s_!bZUo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d835b2-7c09-469e-9062-77e20c52d4ee_1880x940.webp 1272w, https://substackcdn.com/image/fetch/$s_!bZUo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F52d835b2-7c09-469e-9062-77e20c52d4ee_1880x940.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><p>And that&#8217;s it for today. Stay tuned for the next industry signals where we bring you the latest news and deliver it in a meaningful and relevant way. If you feel this edition can benefit your teammates or anyone you know in the games industry, feel free to pass it on.</p><p><strong>Warm Regards,</strong></p><p><strong>Game Dev Assembly Team</strong></p>]]></content:encoded></item><item><title><![CDATA[From Player to Creator: Building Games from Scratch with Unity]]></title><description><![CDATA[My Game Developer Journey]]></description><link>https://gamedevnewsletter.substack.com/p/from-player-to-creator-building-games-from-scratch-with-unity</link><guid isPermaLink="false">https://gamedevnewsletter.substack.com/p/from-player-to-creator-building-games-from-scratch-with-unity</guid><dc:creator><![CDATA[Game Dev Assembly Editors]]></dc:creator><pubDate>Wed, 06 May 2026 12:19:54 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/51c31ad7-73b8-4a18-8c97-c0fd9aa348b8_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Editor&#8217;s Note</h1><p>Good day everyone! &#128075;&#127918; How are we all doing? Welcome to yet another <strong>Game Dev Assembly</strong> edition, and this one is truly magical &#10024; What does it really take to build a game from scratch? For Vishnu, it started with <em><strong>curiosity</strong></em>, a <em><strong>YouTube video</strong></em>, and <em><strong>zero experience in Unity</strong></em>. What followed was a journey filled with experimentation, failed optimizations, frozen screens, late-night debugging &#9749;&#128187;, and eventually, published games on the Play Store. All of this happened because he decided to stop consuming and start creating. If you want to learn how he built two games with Unity, dive in and read the latest issue&#128377;&#65039;</p><div><hr></div><h4>Table of Contents</h4><ol><li><p><a href="https://gamedevnewsletter.substack.com/i/196551184/how-it-all-started">How It All Started</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/196551184/my-first-unity-game">My First Unity Game</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/196551184/where-i-got-stuck">Where I Got Stuck</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/196551184/my-second-unity-game">My Second Unity Game</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/196551184/things-i-wish-i-knew-before-i-started">Things I Wish I Knew Before I Started</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/196551184/practical-advice-for-beginners">Practical Advice for Beginners</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/196551184/list-of-tools-and-resources-i-used-in-my-journey">List of Tools and Resources I Used in My Journey</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/196551184/parting-words">Parting Words</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/196551184/about-the-author">About the Author</a></p></li></ol><div><hr></div><h2>How It All Started</h2><p>Since childhood, I&#8217;ve been very fond of playing games and used to spend hours doing it. When I started my career as a developer, I wanted to create a game of my own. That&#8217;s when I thought, <em>&#8216;Hey let&#8217;s try to make one!&#8217;</em> </p><p>So in 2023, I built my first trial game in Kotlin language. It&#8217;s just a simple game developed using Kotlin code in Android Studio IDE. During that stage, I understood that it wasn&#8217;t the right approach in creating a mobile game. It was difficult to add graphics as the whole game depended on the code. The drawbacks of the game were:</p><ul><li><p>It wasn&#8217;t responsive to different mobile sizes</p></li><li><p>It wasn&#8217;t easy to add graphics</p></li><li><p>It was completely dependent on code, so the code became complex</p></li><li><p>Integrating with other features were a bit difficult</p></li></ul><p>Then I researched how to create a high-quality mobile game. This helped me understand there are multiple game engines to build such games easily. One of the most common game engine is <a href="https://unity.com/">Unity</a>. There are many other engines, but <a href="https://unity.com/">Unity</a> is the most selected one by developers and is beginner-friendly.</p><p>I had no experience in <a href="https://unity.com/">Unity</a> or C#, which is the backend code that&#8217;s compatible with <a href="https://unity.com/">Unity</a>. So I started learning about Unity until I realized it&#8217;s better to try something out in it than watching learning videos. Once you try <a href="https://unity.com/">Unity</a>, you can learn on the go.</p><p>And because of this, my first two games were born. </p><h2>My First Unity Game</h2><p>My first Unity game was <a href="https://play.google.com/store/apps/details?id=com.DestinyTech.GodSpeed">Godspeed</a>. It&#8217;s an endless runner game similar to subway surfers/temple run. But what makes it unique from others is that it <strong>has a career feature</strong> where players can try to complete 20 exciting levels. The journey of building <a href="https://play.google.com/store/apps/details?id=com.DestinyTech.GodSpeed&amp;pli=1">Godspeed</a> from scratch, for someone who has zero knowledge in <a href="https://unity.com/">Unity</a>, was simple. I learned how to make this game using a YouTube video by <a href="https://www.youtube.com/@JimmyVegasUnity">Jimmy Vegas</a>. This video clearly explains how to build a game from scratch.</p><h4>&#128312;Choosing Whether To Build For Computer or Mobile</h4><p>First, you need to finalize whether you&#8217;re building a computer or mobile game, and whether it is a 2D or 3D game. <a href="https://unity.com/">Unity</a> has multiple templates that you can select based on your requirements. Once you select the template, Unity prepares the project and handles all dependency and compatibility configurations (things we need not be concerned about). I selected the 3D mobile template. What I learned from this game is that we have <em>everything</em> available <em><strong>free of cost</strong></em> to create a simple game.</p><h4>&#128312;The Design Challenge</h4><p>For the design, I needed good-quality graphics, from the environments to the obstacles, characters, and audio. I used the <a href="https://assetstore.unity.com/">Unity Asset Store</a>, where you can import assets directly into Unity for free (though paid options are also available).</p><h4>&#128312;Main Character and Animations</h4><p>For the main character, I used <a href="https://www.mixamo.com/">Mixamo</a>. Since my game is a running game, I needed a character with a running animation. <a href="https://www.mixamo.com/">Mixamo</a> made this incredibly easy. You can download characters, attach animations like running, walking, jumping, or cheering, and use them directly in your game, all for free.</p><p>Next, I wanted the character to actually move, not just play an animation. That&#8217;s where a C# script comes in. I created a script and attached it to the character so it would move forward. Even though I have coding experience, I had no experience in C#, so I used <a href="https://chatgpt.com/?utm_source=microsoft&amp;utm_medium=paid_search&amp;utm_campaign=MSFT_C_SEM_BBR_Core_CHT_BAU_ACQ_PER_MIX_ALL_EMEA_GB_EN_110625&amp;c_id=570613430&amp;c_agid=1181976989901497&amp;c_crid=&amp;c_kwid=kwd-73874005955178:loc-188&amp;c_ims=&amp;c_pms=40860&amp;c_nw=o&amp;c_dvc=c&amp;msclkid=ea606e736f8a1464480907884da3d846">ChatGPT</a> to generate the script.</p><h4>&#128312;All About UI</h4><p>Then came the user interface. In Unity, all UI elements sit inside something called a <a href="https://docs.unity.com/en-us/unity-studio/develop/ui-creator/canvas">Canvas</a>. This is essentially the front end; the part users see and interact with. When a user clicks a button, the action is handled by backend logic written in C#. Connecting the frontend and backend is straightforward in Unity, mostly involving simple drag-and-drop.</p><h4>&#128312;Handling Data</h4><p>For storing player data and scores, I used <a href="https://firebase.google.com/docs/database/">Firebase Realtime Database</a>. I chose Firebase because it&#8217;s beginner-friendly and integrates easily with Unity. It stores data in a simple key-value format, which works well for games.</p><h4>&#128312;Revenue: Something Nobody Talks About</h4><p>One common misconception I had to learn early on is about revenue. We don&#8217;t earn money from downloads. Revenue comes from in-app purchases or ads. I integrated <a href="https://unity.com/products/unity-ads">Unity Ads</a> into the game using a C# script (again with help from ChatGPT). Once integrated, Unity Ads handles everything, from fetching ads to displaying them.</p><h4>&#128312;Game Testing</h4><p>Testing was another important step. While Unity allows you to test features within the editor, real insights only come when you test the game on an actual device. This is where you truly understand performance issues, identify bugs, and see how the game behaves in real-world conditions. Something that works perfectly in Unity might not work the same way on a phone.</p><p>Finally, deployment turned out to be much simpler than I expected. I created a <a href="https://developer.android.com/distribute/console">Google Developer Console</a> account (a one-time $25 fee), set up my app with screenshots and descriptions, and uploaded the game as an <code>.aab</code> file from Unity. That&#8217;s all it took to get the game onto the Play Store.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!z1IV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf6184b9-6f81-49d1-99a6-11da28d8404d_512x512.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!z1IV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf6184b9-6f81-49d1-99a6-11da28d8404d_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!z1IV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf6184b9-6f81-49d1-99a6-11da28d8404d_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!z1IV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf6184b9-6f81-49d1-99a6-11da28d8404d_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!z1IV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf6184b9-6f81-49d1-99a6-11da28d8404d_512x512.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!z1IV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf6184b9-6f81-49d1-99a6-11da28d8404d_512x512.png" width="512" height="512" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cf6184b9-6f81-49d1-99a6-11da28d8404d_512x512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:512,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:105833,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/196551184?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf6184b9-6f81-49d1-99a6-11da28d8404d_512x512.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!z1IV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf6184b9-6f81-49d1-99a6-11da28d8404d_512x512.png 424w, https://substackcdn.com/image/fetch/$s_!z1IV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf6184b9-6f81-49d1-99a6-11da28d8404d_512x512.png 848w, https://substackcdn.com/image/fetch/$s_!z1IV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf6184b9-6f81-49d1-99a6-11da28d8404d_512x512.png 1272w, https://substackcdn.com/image/fetch/$s_!z1IV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf6184b9-6f81-49d1-99a6-11da28d8404d_512x512.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Godspeed</figcaption></figure></div><h3>Where I Got Stuck</h3><ul><li><p><strong>Design</strong>: I spent hours dragging assets from the Unity Asset Store into my game, testing what looked good without any real plan. That&#8217;s when I realized that features don&#8217;t matter if the game doesn&#8217;t <em>look</em> good. I had two choices. Either I use ready-made assets (fast but limiting) or create my own (powerful but skill-heavy). Since I had no 3D experience, I stuck with the Asset Store.</p></li><li><p><strong>Maintenance</strong>: After publishing, players started finding bugs I never saw. That&#8217;s when it hit me that you don&#8217;t truly test a game until real people play it. Godspeed had too many assets and too little optimization. I was experimenting, not refining. Looking back, optimization is everything.</p></li><li><p><strong>Performance</strong>: The game ran perfectly on my phone, but froze on my friend&#8217;s. His device couldn&#8217;t handle it. Too many assets, inefficient code. Even small things mattered, like using <code>Update()</code>, which runs ~60 times per second, for tasks that didn&#8217;t need it. Those mistakes added up quickly. Fixing them made the game lighter and more stable.</p></li><li><p><strong>Data Reloading</strong>: Then came another question of what happens if a player deletes the game? Without a login system, all their data is gone. I decided to integrate Google Play sign-in so player data could be restored. It took time and effort, and honestly, for a simple game like mine, it wasn&#8217;t strictly necessary. But I did it anyway because I wanted the experience to feel complete.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RRU9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedc867d8-d9bb-4f54-ba19-ceb58a2445f2_1182x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RRU9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedc867d8-d9bb-4f54-ba19-ceb58a2445f2_1182x630.png 424w, https://substackcdn.com/image/fetch/$s_!RRU9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedc867d8-d9bb-4f54-ba19-ceb58a2445f2_1182x630.png 848w, https://substackcdn.com/image/fetch/$s_!RRU9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedc867d8-d9bb-4f54-ba19-ceb58a2445f2_1182x630.png 1272w, https://substackcdn.com/image/fetch/$s_!RRU9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedc867d8-d9bb-4f54-ba19-ceb58a2445f2_1182x630.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RRU9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedc867d8-d9bb-4f54-ba19-ceb58a2445f2_1182x630.png" width="1182" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/edc867d8-d9bb-4f54-ba19-ceb58a2445f2_1182x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1182,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:912841,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/196551184?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedc867d8-d9bb-4f54-ba19-ceb58a2445f2_1182x630.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RRU9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedc867d8-d9bb-4f54-ba19-ceb58a2445f2_1182x630.png 424w, https://substackcdn.com/image/fetch/$s_!RRU9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedc867d8-d9bb-4f54-ba19-ceb58a2445f2_1182x630.png 848w, https://substackcdn.com/image/fetch/$s_!RRU9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedc867d8-d9bb-4f54-ba19-ceb58a2445f2_1182x630.png 1272w, https://substackcdn.com/image/fetch/$s_!RRU9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fedc867d8-d9bb-4f54-ba19-ceb58a2445f2_1182x630.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Godspeed Clips</figcaption></figure></div><h2>My Second Unity Game</h2><p>This is when <a href="https://play.google.com/store/apps/details?id=com.DestinyTech.EggRush">Egg Rush</a> came in. This time, I wasn&#8217;t starting from scratch; I was starting from <em><strong>experience</strong></em>.</p><p>One thing I had learned by now is that the most important part of a game is the idea. A game can be very simple and still be a huge hit. What matters is how it makes the player feel. They need to feel addicted, entertained, and excited to play again.</p><p>That&#8217;s how <a href="https://play.google.com/store/apps/details?id=com.DestinyTech.EggRush">Egg Rush</a> was born. It&#8217;s simple, but fun. Five chickens randomly lay eggs, and the player catches them. Players can compete with others worldwide, making it competitive. On top of that, it has 60 levels of fun challenges.</p><p>I followed the same approach as <a href="https://play.google.com/store/apps/details?id=com.DestinyTech.GodSpeed&amp;pli=1">Godspeed</a>, starting with a 3D mobile template in <a href="https://unity.com/">Unity</a>. I used the <a href="https://assetstore.unity.com/">Unity Asset Store</a> for environments and audio. Since I couldn&#8217;t find a suitable animated character for free, I created the chicken using <a href="https://www.meshy.ai/">Meshy AI</a>. For UI button images, I used <a href="https://leonardo.ai/">Leonardo AI</a>. The C# scripts were created with the help of <a href="https://chatgpt.com/?utm_source=microsoft&amp;utm_medium=paid_search&amp;utm_campaign=MSFT_C_SEM_BBR_Core_CHT_BAU_ACQ_PER_MIX_ALL_EMEA_GB_EN_110625&amp;c_id=570613430&amp;c_agid=1173180896198081&amp;c_crid=&amp;c_kwid=kwd-73324252226493:loc-188&amp;c_ims=&amp;c_pms=40860&amp;c_nw=o&amp;c_dvc=c&amp;msclkid=acce98e96988145b2a2bf11241beb077">ChatGPT</a>. For the database, I switched to <a href="https://firebase.google.com/docs/firestore/">Firebase Firestore</a>, and for ads, I integrated <a href="https://unity.com/products/unity-ads">Unity Ads</a>.</p><p>But this time, I focused on what I didn&#8217;t do before: <em><strong>optimization</strong></em>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SQf3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F899e7ca6-451f-41b0-9533-7ec4339bd234_2340x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SQf3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F899e7ca6-451f-41b0-9533-7ec4339bd234_2340x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SQf3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F899e7ca6-451f-41b0-9533-7ec4339bd234_2340x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SQf3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F899e7ca6-451f-41b0-9533-7ec4339bd234_2340x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SQf3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F899e7ca6-451f-41b0-9533-7ec4339bd234_2340x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SQf3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F899e7ca6-451f-41b0-9533-7ec4339bd234_2340x1080.jpeg" width="1456" height="672" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/899e7ca6-451f-41b0-9533-7ec4339bd234_2340x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:672,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1466886,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/196551184?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F899e7ca6-451f-41b0-9533-7ec4339bd234_2340x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SQf3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F899e7ca6-451f-41b0-9533-7ec4339bd234_2340x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SQf3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F899e7ca6-451f-41b0-9533-7ec4339bd234_2340x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SQf3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F899e7ca6-451f-41b0-9533-7ec4339bd234_2340x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SQf3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F899e7ca6-451f-41b0-9533-7ec4339bd234_2340x1080.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Egg Rush</figcaption></figure></div><p>I tested the game on multiple devices before publishing, making sure it didn&#8217;t lag or get stuck. I added assets carefully, one by one, and removed anything unnecessary. I optimized the code as much as possible, using the <code>Update()</code> method only when absolutely required, and ensuring no condition was running more times than needed.</p><p>Switching from <a href="https://firebase.google.com/docs/database/">Firebase Realtime DB</a> to <a href="https://firebase.google.com/docs/firestore/">Firestore</a> made a big difference. Earlier, to show the top 100 players and the current user&#8217;s rank, I had to download and process all the data on the device. Now, Firestore handles it with powerful queries on the server side, making it faster, cleaner, and with less memory usage.</p><p>I also paid attention to smaller details. If a game object had any unnecessary component, I removed it. These small optimizations may seem minor, but together they make a huge difference.</p><p>One major improvement was using object pooling. Earlier, in Godspeed, objects were constantly created and destroyed, which affected performance. In Egg Rush, I reused objects instead. For example, instead of creating and deleting eggs repeatedly, I created a set of eggs at the start and reused them; disabling and reactivating them as needed. This significantly improved performance.</p><p>After all these changes, the game felt much lighter. When I tested it across multiple devices, especially low-spec ones, the difference was clear. I published <a href="https://play.google.com/store/apps/details?id=com.DestinyTech.EggRush">Egg Rush on the Play Store in 2026</a>. And this time, it wasn&#8217;t just about <em>building a game</em>; it was about <em><strong>building it better</strong></em>.</p><h2>Things I Wish I Knew Before I Started</h2><p>Looking back at this journey, I realized that many of the things I once believed about game development weren&#8217;t actually true. The biggest misconceptions are:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3mhG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe3b82cd-8853-465b-8df5-ff380cbb64ec_1702x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3mhG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe3b82cd-8853-465b-8df5-ff380cbb64ec_1702x630.png 424w, https://substackcdn.com/image/fetch/$s_!3mhG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe3b82cd-8853-465b-8df5-ff380cbb64ec_1702x630.png 848w, https://substackcdn.com/image/fetch/$s_!3mhG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe3b82cd-8853-465b-8df5-ff380cbb64ec_1702x630.png 1272w, https://substackcdn.com/image/fetch/$s_!3mhG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe3b82cd-8853-465b-8df5-ff380cbb64ec_1702x630.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3mhG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe3b82cd-8853-465b-8df5-ff380cbb64ec_1702x630.png" width="1456" height="539" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/be3b82cd-8853-465b-8df5-ff380cbb64ec_1702x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:539,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:179129,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/196551184?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe3b82cd-8853-465b-8df5-ff380cbb64ec_1702x630.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3mhG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe3b82cd-8853-465b-8df5-ff380cbb64ec_1702x630.png 424w, https://substackcdn.com/image/fetch/$s_!3mhG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe3b82cd-8853-465b-8df5-ff380cbb64ec_1702x630.png 848w, https://substackcdn.com/image/fetch/$s_!3mhG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe3b82cd-8853-465b-8df5-ff380cbb64ec_1702x630.png 1272w, https://substackcdn.com/image/fetch/$s_!3mhG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe3b82cd-8853-465b-8df5-ff380cbb64ec_1702x630.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Myth #1</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Tsik!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0d2caf-c3dc-40a5-b5c7-cb8531178c19_1702x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Tsik!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0d2caf-c3dc-40a5-b5c7-cb8531178c19_1702x630.png 424w, https://substackcdn.com/image/fetch/$s_!Tsik!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0d2caf-c3dc-40a5-b5c7-cb8531178c19_1702x630.png 848w, https://substackcdn.com/image/fetch/$s_!Tsik!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0d2caf-c3dc-40a5-b5c7-cb8531178c19_1702x630.png 1272w, https://substackcdn.com/image/fetch/$s_!Tsik!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0d2caf-c3dc-40a5-b5c7-cb8531178c19_1702x630.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Tsik!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0d2caf-c3dc-40a5-b5c7-cb8531178c19_1702x630.png" width="1456" height="539" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a0d2caf-c3dc-40a5-b5c7-cb8531178c19_1702x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:539,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:157969,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/196551184?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0d2caf-c3dc-40a5-b5c7-cb8531178c19_1702x630.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Tsik!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0d2caf-c3dc-40a5-b5c7-cb8531178c19_1702x630.png 424w, https://substackcdn.com/image/fetch/$s_!Tsik!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0d2caf-c3dc-40a5-b5c7-cb8531178c19_1702x630.png 848w, https://substackcdn.com/image/fetch/$s_!Tsik!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0d2caf-c3dc-40a5-b5c7-cb8531178c19_1702x630.png 1272w, https://substackcdn.com/image/fetch/$s_!Tsik!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0d2caf-c3dc-40a5-b5c7-cb8531178c19_1702x630.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Myth #2</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ubNW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28322175-8169-4a74-8bee-b7431ed218ab_1702x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ubNW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28322175-8169-4a74-8bee-b7431ed218ab_1702x630.png 424w, https://substackcdn.com/image/fetch/$s_!ubNW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28322175-8169-4a74-8bee-b7431ed218ab_1702x630.png 848w, https://substackcdn.com/image/fetch/$s_!ubNW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28322175-8169-4a74-8bee-b7431ed218ab_1702x630.png 1272w, https://substackcdn.com/image/fetch/$s_!ubNW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28322175-8169-4a74-8bee-b7431ed218ab_1702x630.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ubNW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28322175-8169-4a74-8bee-b7431ed218ab_1702x630.png" width="1456" height="539" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/28322175-8169-4a74-8bee-b7431ed218ab_1702x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:539,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:175223,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/196551184?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28322175-8169-4a74-8bee-b7431ed218ab_1702x630.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ubNW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28322175-8169-4a74-8bee-b7431ed218ab_1702x630.png 424w, https://substackcdn.com/image/fetch/$s_!ubNW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28322175-8169-4a74-8bee-b7431ed218ab_1702x630.png 848w, https://substackcdn.com/image/fetch/$s_!ubNW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28322175-8169-4a74-8bee-b7431ed218ab_1702x630.png 1272w, https://substackcdn.com/image/fetch/$s_!ubNW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28322175-8169-4a74-8bee-b7431ed218ab_1702x630.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Myth #3</figcaption></figure></div><h3>Practical Advice for Beginners</h3><p>As a beginner, don&#8217;t start by creating a <em>big game</em>. <strong>Start simple.</strong> Make a small game first. Learn from it. Experience it. Then move on to something bigger.</p><p>The reason is if you begin with a big project, you&#8217;ll likely get stuck in the middle without fully understanding the basics or the standard approach. As the game grows, it quickly becomes complex, and once that happens, maintenance becomes very difficult.</p><p>One more thing I learned along the way is to try to log and record every issue you face during development. It may not seem important at the time, but later, it helps you avoid getting stuck in the same place again. Even though we have AI to resolve issues quickly, some problems still take time. Finding the exact solution isn&#8217;t always instant, and those recorded learnings make all the difference.</p><h3>List of Tools and Resources I Used in My Journey</h3><p>If you enjoyed my story and can relate and benefit from it, you can also use the following tools and resources. The best part is they&#8217;re <strong>FREE</strong>. The only thing is that you&#8217;ll need an efficient and more powerful computer to run Unity Game Engine and a Developer Console (for Play Store only; $25 one-time fee).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sihU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb965d1cb-4b35-4d4b-8db8-05f87adab7cd_1702x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sihU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb965d1cb-4b35-4d4b-8db8-05f87adab7cd_1702x630.png 424w, https://substackcdn.com/image/fetch/$s_!sihU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb965d1cb-4b35-4d4b-8db8-05f87adab7cd_1702x630.png 848w, https://substackcdn.com/image/fetch/$s_!sihU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb965d1cb-4b35-4d4b-8db8-05f87adab7cd_1702x630.png 1272w, https://substackcdn.com/image/fetch/$s_!sihU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb965d1cb-4b35-4d4b-8db8-05f87adab7cd_1702x630.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sihU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb965d1cb-4b35-4d4b-8db8-05f87adab7cd_1702x630.png" width="1456" height="539" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b965d1cb-4b35-4d4b-8db8-05f87adab7cd_1702x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:539,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:247447,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/196551184?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb965d1cb-4b35-4d4b-8db8-05f87adab7cd_1702x630.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sihU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb965d1cb-4b35-4d4b-8db8-05f87adab7cd_1702x630.png 424w, https://substackcdn.com/image/fetch/$s_!sihU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb965d1cb-4b35-4d4b-8db8-05f87adab7cd_1702x630.png 848w, https://substackcdn.com/image/fetch/$s_!sihU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb965d1cb-4b35-4d4b-8db8-05f87adab7cd_1702x630.png 1272w, https://substackcdn.com/image/fetch/$s_!sihU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb965d1cb-4b35-4d4b-8db8-05f87adab7cd_1702x630.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Tools and Resources to Build Your Game</figcaption></figure></div><h2>Parting Words</h2><p>To be <em>honest</em>, my journey of game development is not a successful one. My first game was not a hit, yet I chose to develop another one. And now my second game is also not a hit yet. But I continue to aim to market it and make it successful.</p><p>For me, game development isn&#8217;t just about revenue, but <em>passion</em>. Something that I do with all my heart. When I see someone playing the game I had developed, it gives me the same joy I felt when I played hundreds of games in my childhood, knowing that, someday, some kid is going to enjoy their childhood playing my game.</p><p>So to all the game devs out there, <em>find your motivation</em>. It should come from within ourselves. People may doubt us and make us question our worth, but what matters is our passion to create something. If you lack motivation, just think why you had started. If the game is a failure, maybe try something <em>different</em>. The only way we are going to achieve success is through trial and error.</p><p>Just make it exist first, and you can always make it better.</p><p>As a wise panda once said, <em>&#8220;There is no secret ingredient. It&#8217;s just you. You have to believe in yourself. That&#8217;s the secret.&#8221;</em> </p><p>&#128150; Thanks for reading.</p><div><hr></div><h2>About the Author</h2><p>I&#8217;m <a href="https://www.linkedin.com/in/vishnu-u-pillai-826342196/">Vishnu U Pillai</a>, and I love coding and exploring. I&#8217;m a <em><strong>Computer Science Engineer</strong></em> currently working as a <em><strong>Senior Software Engineer</strong></em> at <strong><a href="https://tech.allianz.com/en.html">Allianz Technology</a></strong> (Trivandrum, Kerala). I am primarily a <em><strong>Backend Developer</strong></em> specializing in Java. I&#8217;m also an indie game developer, with published games including <em><strong><a href="https://play.google.com/store/apps/details?id=com.DestinyTech.GodSpeed&amp;pli=1">Godspeed</a></strong></em> and <em><strong><a href="https://play.google.com/store/apps/details?id=com.DestinyTech.EggRush">Egg Rush</a></strong></em>, and the founder of the online fashion brand <em><strong><a href="https://www.instagram.com/aalila.design/">Aalila</a></strong></em>.</p><p>From childhood, I have always been very fond of playing games. I used to spend hours playing computer and mobile games. Over time, I wanted to create a game of my own; an <em>actual product</em> of my own. An idea that someone would love and feel entertained by; something that would make their time special, just like many games did for me.</p><p>While I haven&#8217;t achieved any major notable milestones yet, I see my journey itself as meaningful. If receiving prizes in coding contests at college tech fests counts, then yes! More importantly, creating three games, one application, and launching an online clothing business feels like a big achievement for me personally. I&#8217;m aiming to achieve even more in the near future, and I&#8217;m happy to part of Game Dev Assembly&#8217;s community to help me get there.</p><p>Please check out my games and give them follow: </p><h4>&#129370; Egg Rush</h4><p>Egg Rush is a fast-paced arcade game that puts your reflexes to the test.</p><p>Five chickens sit high above the ground, laying eggs &#8212; and it&#8217;s your mission to catch them before they hit the ground.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://play.google.com/store/apps/details?id=com.DestinyTech.EggRush&amp;pcampaignid=gda_newsletter&quot;,&quot;text&quot;:&quot;Download Egg Rush on Google Play&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://play.google.com/store/apps/details?id=com.DestinyTech.EggRush&amp;pcampaignid=gda_newsletter"><span>Download Egg Rush on Google Play</span></a></p><h4>&#7123;&#127939;&#127995;&#8205;&#9792;&#65039;&#8205;&#10145;&#65039;Godspeed</h4><p>Godspeed is a high-octane 3D endless runner game where every second counts and survival is your only goal.</p><p>Swipe left, right to dodge deadly obstacles and keep moving at breakneck speed. And collect coins as you run!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://play.google.com/store/apps/details?id=com.DestinyTech.GodSpeed&amp;pcampaignid=gda_newsletter&quot;,&quot;text&quot;:&quot;Download Godspeed on Google Play&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://play.google.com/store/apps/details?id=com.DestinyTech.GodSpeed&amp;pcampaignid=gda_newsletter"><span>Download Godspeed on Google Play</span></a></p><div><hr></div><h1>Closing - Until the Next Edition</h1><p>And that&#8217;s a wrap, folks. How did you find Vishnu&#8217;s journey? Was it helpful? Does it make you think of your own game development projects? Do you think Vishnu is on the money when he talks about having <em><strong>love</strong></em>, <em><strong>passion</strong></em>, and <em><strong>motivation</strong></em> for building games? </p><p>Every game starts with a <em><strong>simple idea</strong></em>.</p><p>All it takes is curiosity, the courage to try, and the willingness to keep going even when things don&#8217;t work the first time. Vishnu&#8217;s journey reminds us that creation rarely begins with expertise. It begins with passion, experimentation, and persistence &#127918;&#10024;</p><p>Whether you&#8217;re building games, writing code, designing worlds, or simply exploring a new idea, this issue is a reminder that you don&#8217;t have to start perfectly. Feel free to drop your comments, and like and share this issue. And if you want to share your own story, get in touch with us. </p><p>Until next time, keep building, keep learning, and keep creating &#128640;</p><div><hr></div><h2>WAIT! There&#8217;s more&#8230;</h2><p>We have an exciting event lined up for you. And it&#8217;s <strong>FREE </strong>to attend! Are you ready, peeps? We&#8217;re bringing Jordan in the house who has spent years working in the indie space and has launched a marketing agency to help games take off and attract players.</p><p>After reading Umut and Berkay&#8217;s story, you will realize marketing your game is an absolute must, and Jordan will break this down in a simplified way.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!A7pK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8799ddb0-3141-40c9-b2e8-41d657369aa5_1880x940.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!A7pK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8799ddb0-3141-40c9-b2e8-41d657369aa5_1880x940.webp 424w, https://substackcdn.com/image/fetch/$s_!A7pK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8799ddb0-3141-40c9-b2e8-41d657369aa5_1880x940.webp 848w, https://substackcdn.com/image/fetch/$s_!A7pK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8799ddb0-3141-40c9-b2e8-41d657369aa5_1880x940.webp 1272w, https://substackcdn.com/image/fetch/$s_!A7pK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8799ddb0-3141-40c9-b2e8-41d657369aa5_1880x940.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!A7pK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8799ddb0-3141-40c9-b2e8-41d657369aa5_1880x940.webp" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8799ddb0-3141-40c9-b2e8-41d657369aa5_1880x940.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:61606,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/196551184?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8799ddb0-3141-40c9-b2e8-41d657369aa5_1880x940.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!A7pK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8799ddb0-3141-40c9-b2e8-41d657369aa5_1880x940.webp 424w, https://substackcdn.com/image/fetch/$s_!A7pK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8799ddb0-3141-40c9-b2e8-41d657369aa5_1880x940.webp 848w, https://substackcdn.com/image/fetch/$s_!A7pK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8799ddb0-3141-40c9-b2e8-41d657369aa5_1880x940.webp 1272w, https://substackcdn.com/image/fetch/$s_!A7pK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8799ddb0-3141-40c9-b2e8-41d657369aa5_1880x940.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.co.uk/e/the-complete-game-marketing-roadmap-from-idea-to-post-launch-success-tickets-1987902954249?aff=gdaNL&quot;,&quot;text&quot;:&quot;GET YOUR FREE TICKET&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eventbrite.co.uk/e/the-complete-game-marketing-roadmap-from-idea-to-post-launch-success-tickets-1987902954249?aff=gdaNL"><span>GET YOUR FREE TICKET</span></a></p><p style="text-align: center;"><strong>Our hosts at Game Dev Assembly and Jordan look forward to greeting you and holding a </strong><em><strong>game-changing</strong></em><strong> session! Get it? ;) Sign up fast before tickets run out!</strong></p><div><hr></div><p style="text-align: center;"></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gamedevnewsletter.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Game Dev Assembly Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The New Power Shift in Game Development]]></title><description><![CDATA[Signals You Should Know]]></description><link>https://gamedevnewsletter.substack.com/p/the-new-power-shift-in-game-development</link><guid isPermaLink="false">https://gamedevnewsletter.substack.com/p/the-new-power-shift-in-game-development</guid><dc:creator><![CDATA[Game Dev Assembly Editors]]></dc:creator><pubDate>Sat, 02 May 2026 13:02:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!PCYw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3894930e-afd7-4607-9279-9190063bff96_1036x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Editor&#8217;s Note</h1><p>Howdy folks, and welcome to yet another edition of <strong>Game Dev Assembly</strong> industry signals &#127918;&#10024; I hope you&#8217;re all having a fab weekend. We&#8217;re diving into how power in the industry is moving from platforms to <em><strong>creators</strong></em>, and what that means for how games actually break through. We&#8217;re breaking down what&#8217;s happening beneath the surface &#128071;</p><p>From creators driving discovery and games designed for shareability, to faster player attention, mid-scope wins, and why building in public is becoming the norm, we&#8217;re not here to throw headlines at you, but <strong>connect the dots so you can make smarter decisions as a developer</strong>. Let&#8217;s get into it &#128640;</p><div><hr></div><h1>&#129489;&#8205;&#128187; Creators Are Becoming the New Publishers</h1><p>We&#8217;re seeing more games grow because of <em><strong>individual creators</strong></em>, not marketing teams.</p><p>Take <a href="https://en.wikipedia.org/wiki/Markiplier">Markiplier</a>. When he played <a href="https://store.steampowered.com/app/1966720/Lethal_Company/">Lethal Company</a>, the game saw massive spikes in attention: <em><strong>clips</strong></em>, <em><strong>memes</strong></em>, and <em><strong>streams</strong></em> followed almost instantly. Or look at how <a href="https://www.youtube.com/@caseoh_">CaseOh</a> has driven visibility for smaller, chaotic indie titles just through raw reactions. These creators aren&#8217;t just <em>covering</em> games. They&#8217;re <em><strong>deciding which games break through</strong></em>.</p><p>Some benchmarks to understand the shift:</p><ul><li><p>A single mid-tier creator (100K&#8211;500K subs) can drive <em><strong>10K&#8211;50K views per video</strong></em></p></li><li><p>Viral TikTok clips regularly exceed <em><strong>100K&#8211;1M+ views</strong></em> even for unknown games</p></li><li><p>Steam traffic is now heavily influenced by <strong>external sources (social and creators)</strong></p></li></ul><p>One creator can <em><strong>outperform</strong></em> an entire marketing campaign.</p><div><hr></div><h1>&#127909; &#8220;Playable Spectacle&#8221; Is Beating Traditional Design</h1><p>Some of the most talked about games right now aren&#8217;t just fun to play, but fun to <em><strong>watch</strong></em><strong> </strong>too. Games like <a href="https://store.steampowered.com/app/2881650/Content_Warning/">Content Warning</a> and <a href="https://store.steampowered.com/app/1966720/Lethal_Company/">Lethal Company</a> exploded because they generate chaos, player reactions, and unscripted moments. These are <em><strong>clip machines</strong></em>.</p><p>Why that matters:</p><ul><li><p>Short-form platforms reward <em><strong>high reaction moments in &lt;15 seconds</strong></em></p></li><li><p>Videos with strong hooks in the first <em><strong>3 seconds</strong></em> perform significantly better</p></li><li><p><em><strong>Shareable gameplay</strong></em> leads to exponential organic reach</p></li></ul><p>That&#8217;s why they dominate platforms like <a href="https://www.tiktok.com/">TikTok</a> and <a href="https://www.youtube.com/">YouTube</a>.</p><p>If your game doesn&#8217;t <em><strong>create moments</strong></em>, it won&#8217;t create <em><strong>reach</strong></em>.</p><div><hr></div><h1>&#129513; Mid-Scope Games Are Quietly Making a Comeback</h1><p>Not everything needs to be AAA or tiny indie. Games like <a href="https://store.steampowered.com/app/1868140/DAVE_THE_DIVER/">Dave the Diver</a> sit right in the middle with its <em><strong>focused scope</strong></em>, <em><strong>clear identity</strong></em>, and <em><strong>strong execution</strong></em>.</p><p>It wasn&#8217;t trying to do everything. It just did <em><strong>one experience really well</strong></em>, and that resonated. Similarly, <a href="https://store.steampowered.com/app/1562430/DREDGE/">Dredge</a> succeeded with a tight gameplay loop, a unique tone, and controlled scope.</p><p>Both these games show that you don&#8217;t need massive scale to win. Why this works:</p><ul><li><p>Lower development cost</p></li><li><p>Faster production timelines</p></li><li><p>Stronger focus on a single experience</p></li></ul><p>Meanwhile, on Steam:</p><ul><li><p><em><strong>~14,000+ games</strong></em><strong> </strong>release annually</p></li><li><p>The majority earn <em><strong>under $1,000 revenue</strong></em></p></li></ul><p> This means:</p><ul><li><p><em><strong>Over-scoping</strong></em> leads to higher risk</p></li><li><p><em><strong>Focused scope</strong></em> results in a higher chance of <em><strong>completion</strong></em> and <em><strong>success</strong></em>.</p></li></ul><p>Tight and <em><strong>well-defined games</strong></em> outperform bloated ones.</p><div><hr></div><h1>&#128260; Live Iteration Is Replacing Long Dev Cycles</h1><p>Developers are no longer disappearing for years. They&#8217;re building <em><strong>with players</strong></em>. Look at how <a href="https://store.steampowered.com/app/1145360/Hades/">Hades (by Supergiant Games)</a> used early access: <em><strong>constant updates</strong></em>, <em><strong>player feedback loops</strong></em>, and <em><strong>iterative improvements</strong></em>.</p><p>Or how <a href="https://baldursgate3.game/">Baldur&#8217;s Gate 3</a> built momentum long before launch through extended early access and community input.</p><p>Why this works:</p><ul><li><p>Early builds generate <em><strong>initial wishlists and feedback</strong></em></p></li><li><p><em><strong>Frequent updates</strong></em> keep communities engaged</p></li><li><p>Iteration reduces the risk of building the <em>wrong thing</em></p></li></ul><p>Games with active communities can generate <em><strong>thousands of wishlists pre-launch</strong></em>, and regular updates increase <em><strong>retention</strong></em> and <em><strong>visibility</strong></em>.</p><p>The earlier you <em><strong>involve players</strong></em>, the better your outcome.</p><div><hr></div><h1>&#129504; Player Attention Is Fragmenting Faster Than Ever</h1><p>Players are jumping between games more than ever. Which is why games like <a href="https://store.steampowered.com/app/2379780/Balatro/">Balatro</a> work so well. They have an <em><strong>immediate hook</strong></em>, <em><strong>fast gameplay loop</strong></em>, and <em><strong>quick satisfaction</strong></em>. You don&#8217;t need hours to <em>get it</em>. You get it in seconds.</p><p>Some benchmarks to understand this: </p><ul><li><p>Players often decide within the <strong>first </strong><em><strong>5&#8211;10 minutes</strong></em> whether to continue</p></li><li><p>Drop-off rates spike early if the hook <em><strong>isn&#8217;t clear</strong></em></p></li><li><p><em><strong>First-session experience</strong></em> is now critical</p></li></ul><p>Your first <em><strong>five minutes</strong></em> matter more than your last <em><strong>five hours</strong></em>.</p><div><hr></div><h1>&#128736;&#65039; Tooling Is Lowering the Floor&#8230;</h1><p>&#8230; but <em>raising the bar</em>.</p><p>Yes, tools are making development easier. But that also means <em><strong>more competition</strong></em>. Which is why only games that stand out, like <a href="https://store.steampowered.com/app/1966720/Lethal_Company/">Lethal Company</a>, cut through. They&#8217;re memorable, shareable, and different.</p><p>Steam alone reflects this:</p><ul><li><p>Thousands of <em><strong>new titles</strong></em> every year</p></li><li><p>Increasing difficulty in <em><strong>standing out</strong></em></p></li></ul><p>Making games is <em><strong>easier</strong></em> than ever. Standing out is <em><strong>harder</strong></em> than ever.</p><div><hr></div><h1>&#129513; What This All Adds Up To</h1><p>Let&#8217;s connect it:</p><ul><li><p>Creators are <em><strong>driving discovery</strong></em></p></li><li><p>Games should be <em><strong>designed for sharing</strong></em></p></li><li><p>Players need to <em><strong>decide faster</strong></em></p></li><li><p>Devs benefit from <em><strong>iterating publicly</strong></em></p></li></ul><p>In a nutshell, games need to be <em><strong>seen</strong></em>, <em><strong>shared</strong></em>, and <em><strong>talked about</strong></em>.</p><div><hr></div><h1>&#128640; Your Move This Week</h1><p>Try one of these:</p><ul><li><p>Ask: <em>&#8220;Would someone <strong>clip</strong> this moment?&#8221;</em></p></li><li><p>Improve your <em><strong>first</strong></em> 5 minutes</p></li><li><p>Reach out to one creator in your <em><strong>niche</strong></em></p></li><li><p>Turn one mechanic into a <em><strong>shareable clip</strong></em></p></li></ul><p>Then share with us what happens. That&#8217;s it. Drop a comment in this edition or send us a message when you have done any of the above. Game Dev Assembly is <em><strong>your</strong></em> space; <em><strong>our</strong></em> collective space.</p><div><hr></div><h2>&#127908; The Complete Game Marketing Roadmap: From Idea to Post-Launch Success</h2><p>Most games don&#8217;t fail because they&#8217;re bad.<br>They fail because no one sees them.</p><p>We&#8217;re doing a live session with <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Jordan&quot;,&quot;id&quot;:102345400,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61eff547-5d25-425a-8b09-85dccc018d0a_2000x2000.jpeg&quot;,&quot;uuid&quot;:&quot;19e059ad-32c8-4809-a162-75e37d4a3d53&quot;}" data-component-name="MentionToDOM"></span> from <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;OP Game Marketing&quot;,&quot;id&quot;:2700177,&quot;type&quot;:&quot;pub&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:null,&quot;uuid&quot;:&quot;3ca9abf8-16f8-4365-bfae-684ce5891134&quot;}" data-component-name="MentionToDOM"></span> on how to fix that.</p><p>&#128197; <strong>May 23, 2026 (Saturday)</strong> | &#9200; <strong>10 AM ET</strong> | Free</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.co.uk/e/the-complete-game-marketing-roadmap-from-idea-to-post-launch-success-tickets-1987902954249?aff=gdaNL&quot;,&quot;text&quot;:&quot;BOOK YOUR TICKET&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eventbrite.co.uk/e/the-complete-game-marketing-roadmap-from-idea-to-post-launch-success-tickets-1987902954249?aff=gdaNL"><span>BOOK YOUR TICKET</span></a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kNlt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa840a024-ab12-4162-ac3f-81efd705a63d_1880x940.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kNlt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa840a024-ab12-4162-ac3f-81efd705a63d_1880x940.webp 424w, https://substackcdn.com/image/fetch/$s_!kNlt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa840a024-ab12-4162-ac3f-81efd705a63d_1880x940.webp 848w, https://substackcdn.com/image/fetch/$s_!kNlt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa840a024-ab12-4162-ac3f-81efd705a63d_1880x940.webp 1272w, https://substackcdn.com/image/fetch/$s_!kNlt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa840a024-ab12-4162-ac3f-81efd705a63d_1880x940.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kNlt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa840a024-ab12-4162-ac3f-81efd705a63d_1880x940.webp" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a840a024-ab12-4162-ac3f-81efd705a63d_1880x940.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:61606,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/196044341?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa840a024-ab12-4162-ac3f-81efd705a63d_1880x940.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kNlt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa840a024-ab12-4162-ac3f-81efd705a63d_1880x940.webp 424w, https://substackcdn.com/image/fetch/$s_!kNlt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa840a024-ab12-4162-ac3f-81efd705a63d_1880x940.webp 848w, https://substackcdn.com/image/fetch/$s_!kNlt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa840a024-ab12-4162-ac3f-81efd705a63d_1880x940.webp 1272w, https://substackcdn.com/image/fetch/$s_!kNlt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa840a024-ab12-4162-ac3f-81efd705a63d_1880x940.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><p>And that&#8217;s it for today. Stay tuned for the next industry signals by us where we bring you the latest news and deliver it in a meaningful and relevant way.</p><p><strong>Warm Regards,</strong></p><p><strong>Game Dev Assembly Team</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PCYw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3894930e-afd7-4607-9279-9190063bff96_1036x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PCYw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3894930e-afd7-4607-9279-9190063bff96_1036x630.png 424w, https://substackcdn.com/image/fetch/$s_!PCYw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3894930e-afd7-4607-9279-9190063bff96_1036x630.png 848w, https://substackcdn.com/image/fetch/$s_!PCYw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3894930e-afd7-4607-9279-9190063bff96_1036x630.png 1272w, https://substackcdn.com/image/fetch/$s_!PCYw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3894930e-afd7-4607-9279-9190063bff96_1036x630.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PCYw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3894930e-afd7-4607-9279-9190063bff96_1036x630.png" width="1036" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3894930e-afd7-4607-9279-9190063bff96_1036x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1036,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:402022,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/196044341?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3894930e-afd7-4607-9279-9190063bff96_1036x630.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PCYw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3894930e-afd7-4607-9279-9190063bff96_1036x630.png 424w, https://substackcdn.com/image/fetch/$s_!PCYw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3894930e-afd7-4607-9279-9190063bff96_1036x630.png 848w, https://substackcdn.com/image/fetch/$s_!PCYw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3894930e-afd7-4607-9279-9190063bff96_1036x630.png 1272w, https://substackcdn.com/image/fetch/$s_!PCYw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3894930e-afd7-4607-9279-9190063bff96_1036x630.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gamedevnewsletter.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Game Dev Assembly Newsletter! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[We Spent Two Years Building the Wrong Game]]></title><description><![CDATA[Low retention, confused players, and a hard decision to walk away. Discover how two indie developers turned failure into a smarter, faster way to build games.]]></description><link>https://gamedevnewsletter.substack.com/p/we-spent-two-years-building-the-wrong-game-what-we-learned-building-darkest-path</link><guid isPermaLink="false">https://gamedevnewsletter.substack.com/p/we-spent-two-years-building-the-wrong-game-what-we-learned-building-darkest-path</guid><dc:creator><![CDATA[Game Dev Assembly Editors]]></dc:creator><pubDate>Tue, 28 Apr 2026 12:40:50 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/0a19aaa9-f86a-4ab9-90fd-7dc64b105775_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Editor&#8217;s Note</h1><p>Hello everyone, and welcome back to another edition of <strong>Game Dev Assembly</strong>! &#127918;Indie developers might think they lack what it takes when their games fail. But what if it&#8217;s actually because they&#8217;ve spent a long time building the <em>wrong game</em>? &#129300; </p><p>This week&#8217;s story hits close. Two developers&#8212;<strong>Umut</strong> and <strong>Berkay</strong>&#8212;spent two years on one project that <em>should</em> have worked&#8230; but it <em>didn&#8217;t</em>. It had low retention, confused players, and a slow realization that something wasn&#8217;t right. And then, they walked away.</p><p>What do you think they did next? &#128064; What followed was a completely different way of thinking about development&#8212;<em><strong>faster decisions</strong></em>, <em><strong>sharper focus</strong></em>, and building something players <em><strong>instantly understand</strong></em>. This is the story behind the lessons that came from getting it <strong>wrong</strong> the first time. If you&#8217;re curious, keep reading this issue. We promise you&#8217;ll like this one &#128155;</p><div><hr></div><h4>Table of Contents</h4><ol><li><p><a href="https://gamedevnewsletter.substack.com/i/195636238/a-story-of-two-developers">A Story of Two Developers</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/195636238/an-interview-with-umut-and-berkay">An Interview with Umut and Berkay</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/195636238/about-megakil-studios-and-darkest-path">About MegaKil Studios and Darkest Path</a></p></li></ol><div><hr></div><h2>A Story of Two Developers</h2><p>When we first started out as developers, we knew very little. We were just a <em>two-person</em> team, and neither of us were seasoned professionals at the time. I (Umut) was learning to code using base <strong><a href="https://unity.com/">Unity</a></strong>, and my artist friend (Berkay) was figuring out professional digital art workflows using <strong><a href="https://krita.org/en/">Krita</a></strong>. Like many, we assumed the mobile market would be the <em>&#8216;easy&#8217;</em> starting point. Every day, we saw the hyper-casual trend dominating the market. We watched <em>&#8216;copy-paste&#8217;</em> games with incredibly simple mechanics get millions of downloads. They looked so simple to make that we wrongly assumed if we brought a high-quality project to that space, we would easily stand out and succeed. We decided to build a mobile game, but instead of doing a simple hyper-casual title, we went with an idle game called <strong><a href="https://apps.apple.com/tr/app/glowup-idle/id6752940545?l=tr">Glowup Idle</a></strong>.</p><p>We fell into the classic indie trap: <em><strong>massive <a href="https://en.wikipedia.org/wiki/Feature_creep">feature creep</a></strong></em>. Originally, <strong><a href="https://apps.apple.com/tr/app/glowup-idle/id6752940545?l=tr">Glowup Idle</a></strong> was just a simple <em>&#8216;click to earn&#8217;</em> prototype. But as we looked at top-grossing games on the market, things started to spiral. We wanted to be competitive, so we expanded it into a full life-simulator. The absolute turning point where complexity went too far was when we added a full <em><strong><a href="https://en.wikipedia.org/wiki/Gacha_game">gacha</a></strong></em> system. Suddenly, we had three distinct gameplay areas that had to interconnect perfectly. Drawing all the <a href="https://en.wikipedia.org/wiki/Gacha_game">gacha </a>characters, balancing them, and trying to explain these layered systems to a casual player became a complete nightmare. What should have been a quick project took us around two years to develop.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uHhK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94196850-63a4-4b65-92ef-56905bc3cf59_1614x2874.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uHhK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94196850-63a4-4b65-92ef-56905bc3cf59_1614x2874.png 424w, https://substackcdn.com/image/fetch/$s_!uHhK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94196850-63a4-4b65-92ef-56905bc3cf59_1614x2874.png 848w, https://substackcdn.com/image/fetch/$s_!uHhK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94196850-63a4-4b65-92ef-56905bc3cf59_1614x2874.png 1272w, https://substackcdn.com/image/fetch/$s_!uHhK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94196850-63a4-4b65-92ef-56905bc3cf59_1614x2874.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uHhK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94196850-63a4-4b65-92ef-56905bc3cf59_1614x2874.png" width="727.9971313476562" height="1296.4948911981269" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/94196850-63a4-4b65-92ef-56905bc3cf59_1614x2874.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:2593,&quot;width&quot;:1456,&quot;resizeWidth&quot;:727.9971313476562,&quot;bytes&quot;:6503072,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/195636238?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94196850-63a4-4b65-92ef-56905bc3cf59_1614x2874.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uHhK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94196850-63a4-4b65-92ef-56905bc3cf59_1614x2874.png 424w, https://substackcdn.com/image/fetch/$s_!uHhK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94196850-63a4-4b65-92ef-56905bc3cf59_1614x2874.png 848w, https://substackcdn.com/image/fetch/$s_!uHhK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94196850-63a4-4b65-92ef-56905bc3cf59_1614x2874.png 1272w, https://substackcdn.com/image/fetch/$s_!uHhK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F94196850-63a4-4b65-92ef-56905bc3cf59_1614x2874.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When we finally launched, the metrics were terrible. Our <em><strong>Day-1</strong></em> retention was a dismal <strong>16%</strong>, and by <em><strong>Day-7</strong></em>, it had plummeted to around <strong>1%</strong>. As our analytics showed, players were dropping off immediately after the tutorial. The game had three different core areas supported by <a href="https://en.wikipedia.org/wiki/Gacha_game">gacha</a> elements, and players simply couldn&#8217;t figure out what to do because the cognitive load was too high. Hardcore players understood it, but the general mobile audience didn&#8217;t even want to try.</p><p>While waiting for those tests, we started prototyping a <em><strong>dark fantasy FPS</strong></em>. Why a dark fantasy FPS? My partner and I were constantly seeing these <em>&#8216;fake ads&#8217;</em> or misleading mobile commercials for dark fantasy games on social media. They generated massive interest, but the actual games were terrible or didn&#8217;t <em>even</em> exist. We looked at each other and asked, <em>&#8216;Why don&#8217;t we just make a real, high-quality version of what these ads are promising?&#8217;</em> We knew the hunger for that visceral, <em><strong><a href="https://store.steampowered.com/login/?redir=agecheck%2Fapp%2F1002300%2F&amp;redir_ssl=1">Fear &amp; Hunger</a></strong></em> and <em><strong><a href="https://store.steampowered.com/agecheck/app/502280/">Berserk</a></strong></em> aesthetic was real; otherwise, those fake ads wouldn&#8217;t be so popular. We wanted to fill that exact gap. That was the birth of <strong><a href="https://store.steampowered.com/app/4590680/Darkest_Path/">Darkest Path</a></strong>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0j5z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7eb7b0b0-1143-4773-90f2-0def22ceefc3_1232x706.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0j5z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7eb7b0b0-1143-4773-90f2-0def22ceefc3_1232x706.png 424w, https://substackcdn.com/image/fetch/$s_!0j5z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7eb7b0b0-1143-4773-90f2-0def22ceefc3_1232x706.png 848w, https://substackcdn.com/image/fetch/$s_!0j5z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7eb7b0b0-1143-4773-90f2-0def22ceefc3_1232x706.png 1272w, https://substackcdn.com/image/fetch/$s_!0j5z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7eb7b0b0-1143-4773-90f2-0def22ceefc3_1232x706.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0j5z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7eb7b0b0-1143-4773-90f2-0def22ceefc3_1232x706.png" width="1232" height="706" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7eb7b0b0-1143-4773-90f2-0def22ceefc3_1232x706.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:706,&quot;width&quot;:1232,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:797689,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/195636238?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7eb7b0b0-1143-4773-90f2-0def22ceefc3_1232x706.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0j5z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7eb7b0b0-1143-4773-90f2-0def22ceefc3_1232x706.png 424w, https://substackcdn.com/image/fetch/$s_!0j5z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7eb7b0b0-1143-4773-90f2-0def22ceefc3_1232x706.png 848w, https://substackcdn.com/image/fetch/$s_!0j5z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7eb7b0b0-1143-4773-90f2-0def22ceefc3_1232x706.png 1272w, https://substackcdn.com/image/fetch/$s_!0j5z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7eb7b0b0-1143-4773-90f2-0def22ceefc3_1232x706.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When the mobile deal fell through, we pivoted 100% to <strong><a href="https://store.steampowered.com/app/4590680/Darkest_Path/">Darkest Path</a></strong>. Our biggest hesitation was turning our backs on two years of grueling work. Throwing away a completed project is a massive mental risk for any indie duo. But we ultimately decided to chalk it up as an invaluable learning experience. If we had stayed, we would have been fighting a losing battle. The pivot was a clean break into a genre we were truly passionate about.</p><p>Thanks to the lessons from <em><strong><a href="https://apps.apple.com/tr/app/glowup-idle/id6752940545?l=tr">Glowup</a></strong></em>, we moved fast and sharp. We created a very clear <strong>Game Design Document</strong> from day one. Instead of building complex meta-systems, we focused on extremely fast iteration cycles. We built naked, simple prototypes and immediately had people test them. With our improved coding and <em><strong><a href="https://docs.krita.org/en/tutorials/common_workflows.html">Krita</a></strong></em><a href="https://docs.krita.org/en/tutorials/common_workflows.html"> </a><em><strong><a href="https://docs.krita.org/en/tutorials/common_workflows.html">workflows</a></strong></em>, we integrated feedback in hours rather than weeks, establishing a <em>&#8216;modern-retro&#8217; </em>aesthetic. Technically, this means we take gritty, high-quality <em><strong>2D pixel art sprites</strong></em> and place them inside a <em><strong>3D Unity environment</strong></em>. We then apply custom shaders and modern dynamic lighting. It gives you that nostalgic, heavy aesthetic, but with the visual pop and deep shadows of modern rendering.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZiJz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85935814-9740-42af-b685-63d703774be6_426x240.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZiJz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85935814-9740-42af-b685-63d703774be6_426x240.gif 424w, https://substackcdn.com/image/fetch/$s_!ZiJz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85935814-9740-42af-b685-63d703774be6_426x240.gif 848w, https://substackcdn.com/image/fetch/$s_!ZiJz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85935814-9740-42af-b685-63d703774be6_426x240.gif 1272w, https://substackcdn.com/image/fetch/$s_!ZiJz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85935814-9740-42af-b685-63d703774be6_426x240.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZiJz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85935814-9740-42af-b685-63d703774be6_426x240.gif" width="727" height="409.5774647887324" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/85935814-9740-42af-b685-63d703774be6_426x240.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:240,&quot;width&quot;:426,&quot;resizeWidth&quot;:727,&quot;bytes&quot;:3241900,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/195636238?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85935814-9740-42af-b685-63d703774be6_426x240.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZiJz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85935814-9740-42af-b685-63d703774be6_426x240.gif 424w, https://substackcdn.com/image/fetch/$s_!ZiJz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85935814-9740-42af-b685-63d703774be6_426x240.gif 848w, https://substackcdn.com/image/fetch/$s_!ZiJz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85935814-9740-42af-b685-63d703774be6_426x240.gif 1272w, https://substackcdn.com/image/fetch/$s_!ZiJz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85935814-9740-42af-b685-63d703774be6_426x240.gif 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div><hr></div><h2>An Interview with Umut and Berkay</h2><p><span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Game Dev Assembly Editors&quot;,&quot;id&quot;:141751007,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8f28b6d-493f-402a-80f4-a2ab8196e349_300x300.png&quot;,&quot;uuid&quot;:&quot;e046a53b-ee67-4bc7-8a2e-3a038db46a3b&quot;}" data-component-name="MentionToDOM"></span> had the splendid opportunity to speak with <strong>Umut</strong> and <strong>Berkay</strong> of <em><strong>MegaKil Studios</strong></em> to further learn about their journey from failure to success.</p><p><em><strong>&#127908; What&#8217;s one thing you believed during your first game that turned out to be wrong?</strong></em></p><p>We believed the mobile market was an easier entry point and that deep mechanics would guarantee success. We were wrong. Mobile players rarely give you time for complex systems. Mobile players generally want instant gratification and a very frictionless onboarding experience. PC players, however, actively seek out steep learning curves and deep mastery. In <em><a href="https://apps.apple.com/tr/app/glowup-idle/id6752940545?l=tr">Glowup</a></em>, we presented mobile players with layered stat trees, and they completely ignored them, whereas a PC audience would have spent hours optimizing those exact same trees.</p><p><em><strong>&#127908; What&#8217;s been the hardest system or feature to get right?</strong></em></p><p>For <em><a href="https://store.steampowered.com/app/4590680/Darkest_Path/">Darkest Path</a></em>, the biggest challenge is <em>&#8216;game feel.&#8217;</em> Making the player feel the heavy impact of hitting 2D sprite enemies in a 3D perspective is difficult. We spent months&#8212;it felt like a year!&#8212;learning <em>&#8216;game juice.&#8217;</em> Before these improvements, hitting an enemy felt like swinging a sword through a ghost; there was no weight. We fixed this by dialing in very specific hitstops (freezing the frame for just a few milliseconds on impact), adding sharp, directional camera shakes that match the weapon&#8217;s weight, and layering audio&#8212;combining the <em>swoosh</em> of the blade with a heavy, meaty thud.</p><p><em><strong>&#127908; Have you had to cut anything you were personally attached to?</strong></em></p><p>Yes! Early on, we had an <em>&#8216;epilepsy crisis sphere&#8217;</em> arena transition for the first boss. It was an overwhelming, chaotic blast of neon colors and flashing assets that completely took over the screen. Initially, it felt cool because it was so aggressive and shocking. But we quickly realized that <em><a href="https://store.steampowered.com/app/4590680/Darkest_Path/">Darkest Path</a></em> is about oppressive, dark cosmic horror, not a cyberpunk rave. It completely broke the immersion. Now, our rule is simple: if a feature doesn&#8217;t directly serve the core gameplay loop or the grim atmosphere, it gets cut, no matter how much time we spent building it.</p><p><em><strong>&#127908; What are you most uncertain about going into launch?</strong></em></p><p>The sheer uncertainty of the PC market. You can predict your baseline sales using wishlist conversion rates and genre benchmarks. The <em>&#8216;chaos&#8217;</em> is the Steam algorithm suddenly picking up your game, or a massive streamer randomly playing it. To reduce uncertainty, we are focusing heavily on building a dedicated organic community in our <a href="https://discord.com/invite/afcskwwKGe">Discord</a> early on, rather than relying solely on the storefront.</p><p><em><strong>&#127908; If the game fails, what do you think the reason would be?</strong></em></p><p>It would likely be due to <em>visibility</em> rather than quality. Cutting through the noise to reach the specific niche of retro-shooter and cosmic horror fans is our biggest challenge. To solve visibility, we are focusing intensely on organic grassroots marketing. We&#8217;ve noticed that even just sharing raw screenshots from our development process gathers incredible attention online. When people see that unfiltered, dark aesthetic, they immediately engage with it. It makes us feel very confident that we are successfully reaching our desired niche audience. We are learning that this kind of raw, authentic developer interaction works far better for us than polished, corporate-style marketing.</p><p><em><strong>&#127908; Now that the Steam page for <a href="https://store.steampowered.com/app/4590680/Darkest_Path/">Darkest Path</a> is live, when did you first start testing the game with real players?</strong></em></p><p>With <em><a href="https://apps.apple.com/tr/app/glowup-idle/id6752940545?l=tr">Glowup Idle</a></em>, we didn&#8217;t start real-world testing until maybe six months into development. It was a huge mistake. For <em><a href="https://store.steampowered.com/app/4590680/Darkest_Path/">Darkest Path</a></em>, we changed our philosophy entirely; we had a playable prototype in the hands of testers within the very first month. We didn&#8217;t wait for &#8216;<em>pretty&#8217;</em> graphics; we wanted to know if the core movement and shooting felt right from day one.</p><p><em><strong>&#127908; What&#8217;s one thing you would test much earlier now in any new project?</strong></em></p><p>Flow and immediate clarity. Since this is a rogue-like, the game needs to pull you in instantly. You shouldn&#8217;t need a manual to understand your first ten seconds of gameplay. I&#8217;d test how quickly a player understands their immediate objective and whether the mechanics create an instant <em>&#8216;just one more run&#8217;</em> desire. If they aren&#8217;t hooked in the first minute, the rest of the systems don&#8217;t matter.</p><p><em><strong>&#127908; What signals gave you confidence that <a href="https://store.steampowered.com/app/4590680/Darkest_Path/">Darkest Path</a> was worth pursuing over fixing Glowup Idle?</strong></em></p><p>It was the <em>&#8216;intuition&#8217;</em> factor. In <em><a href="https://apps.apple.com/tr/app/glowup-idle/id6752940545?l=tr">Glowup</a></em>, even though it was a mobile game, players often felt lost among the complex meta-systems. But when I showed <em><a href="https://store.steampowered.com/app/4590680/Darkest_Path/">Darkest Path</a></em> to my mother, who isn&#8217;t a gamer at all, she understood exactly what to do just by looking at the screen. Seeing someone with zero gaming background engage with the mechanics naturally was the ultimate signal that we had found the right path.</p><p><em><strong>&#127908; Did you consider continuing both projects in parallel, or was the pivot a clean break? </strong></em></p><p>We certainly considered it, but we had to be honest with ourselves. We are a two-person team, and the development of <em><a href="https://apps.apple.com/tr/app/glowup-idle/id6752940545?l=tr">Glowup</a></em> was an exhausting, two-year journey. We were burnt out on those systems. We decided on a clean break to give <em><a href="https://store.steampowered.com/app/4590680/Darkest_Path/">Darkest Path</a></em> 100% of our focus. <em><a href="https://apps.apple.com/tr/app/glowup-idle/id6752940545?l=tr">Glowup</a></em> is on the shelf for now; we have plans for its future. But right now, our obsession is the abyss.</p><p><em><strong>&#127908; What would have made you stick with mobile game instead?</strong></em></p><p>If the mobile market prioritized the <em>&#8216;art of game creation&#8217;</em> over pure commercial metrics and aggressive monetization, we might have stayed. We realized we wanted to build an experience, not a commercial machine. PC is where the players who value atmosphere and mechanical grit live, so that&#8217;s where we had to go.</p><p><em><strong>&#127908; What&#8217;s a specific before-and-after example of a mechanic that improved dramatically with game feel changes?</strong></em></p><p>Definitely the gore and blood system. I spent months trying different systems to make combat feel visceral, but nothing felt <em>&#8216;dirty&#8217;</em> enough. For a long time, we developed without it; in fact, our current trailers don&#8217;t even feature the new system yet. But recently, we finally nailed it. The impact of seeing blood splatter realistically against those 2D pixel art sprites in a 3D space has completely transformed the satisfaction of every kill. It&#8217;s night and day.</p><p><em><strong>&#127908; What mistakes did you make early when trying to improve game feel?</strong></em></p><p>Overdoing it. At one point, I put too many effects on every single action. Screen shakes, flashes, particles&#8212;it became a <em>&#8216;visual soup&#8217;</em> where you couldn&#8217;t see the enemies anymore. I learned that game feel isn&#8217;t about more effects; it&#8217;s about refined ones. It&#8217;s about placing the right impact in the right millisecond.</p><p><em><strong>&#127908; If a developer has weak-feeling combat right now, what are the first 2&#8211;3 things they should fix?</strong></em></p><p>There are so many options in the <em>&#8216;game feel bible&#8217;</em> that it&#8217;s hard to pick just two. My advice? Try everything. Experiment with hitstops, camera jolts, and audio layering all at once, then start stripping away what doesn&#8217;t fit. The key is to find the soul of your combat through trial and error until it feels like the weapon is an extension of your own hand.</p><p><em><strong>&#127908; How has your development workflow changed after your first project?</strong></em></p><p>We moved from <em>Horizontal Growth</em> to <em>Vertical Focus</em>. In our first project, we tried to build fifty systems at once, and they were all mediocre. Now, we build one <em>Vertical Slice</em>&#8212;a single room, a single weapon, a single enemy&#8212;and we make it feel incredible before we move on to the next thing.</p><p><em><strong>&#127908; What specific metrics do you pay attention to now that you ignored before?</strong></em></p><p>In mobile, I was obsessed with CPI (Cost Per Install) and Day-1 Retention. Now, I don&#8217;t care about those cold numbers. I care about the discussions in our <em><a href="https://discord.com/channels/1495765729922908190/1495793390531641486">Discord</a></em>. I look at how people react to our screenshots and GIFs. Are they talking about the atmosphere? Are they sharing the boss animations? Human engagement is our new North Star.</p><p><em><strong>&#127908; What are some parting words you have for other game developers looking to build a solid game and launch it on Steam?</strong></em></p><p>Don&#8217;t build the game you think the market wants. Build the game you want to play so badly that it keeps you up at night. If you can make the core loop undeniably good and stay true to your vision, the audience will find you. Stay grim, and keep building.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MuO3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90243467-cbaa-452d-bb42-9df10200f7e0_2559x1439.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MuO3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90243467-cbaa-452d-bb42-9df10200f7e0_2559x1439.png 424w, https://substackcdn.com/image/fetch/$s_!MuO3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90243467-cbaa-452d-bb42-9df10200f7e0_2559x1439.png 848w, https://substackcdn.com/image/fetch/$s_!MuO3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90243467-cbaa-452d-bb42-9df10200f7e0_2559x1439.png 1272w, https://substackcdn.com/image/fetch/$s_!MuO3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90243467-cbaa-452d-bb42-9df10200f7e0_2559x1439.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MuO3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90243467-cbaa-452d-bb42-9df10200f7e0_2559x1439.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/90243467-cbaa-452d-bb42-9df10200f7e0_2559x1439.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6203787,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/195636238?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90243467-cbaa-452d-bb42-9df10200f7e0_2559x1439.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MuO3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90243467-cbaa-452d-bb42-9df10200f7e0_2559x1439.png 424w, https://substackcdn.com/image/fetch/$s_!MuO3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90243467-cbaa-452d-bb42-9df10200f7e0_2559x1439.png 848w, https://substackcdn.com/image/fetch/$s_!MuO3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90243467-cbaa-452d-bb42-9df10200f7e0_2559x1439.png 1272w, https://substackcdn.com/image/fetch/$s_!MuO3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90243467-cbaa-452d-bb42-9df10200f7e0_2559x1439.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2><a href="https://gamedevnewsletter.substack.com/i/195636238/about-megakil-studios-and-darkest-path">About MegaKil Studios and </a><em><a href="https://gamedevnewsletter.substack.com/i/195636238/about-megakil-studios-and-darkest-path">Darkest Path</a></em></h2><p><em><strong>MegaKil Studios</strong></em> is an independent game development duo based in Turkey, co-founded by <strong>Umut</strong> (<em>Lead Programmer &amp; Technical Artist</em>) and <strong>Berkay</strong> (<em>Lead Artist &amp; Animator</em>). The studio specializes in blending modern-retro aesthetics with deep, mechanics-driven gameplay.</p><p>The duo began their journey in the mobile market, spending two years developing the complex idle-simulator <em><strong><a href="https://apps.apple.com/tr/app/glowup-idle/id6752940545?l=tr">Glowup Idle</a></strong></em>. This experience provided them with invaluable lessons in player retention, systems architecture, and the importance of <em>&#8216;game feel.&#8217;</em> Today, MegaKil Studios has pivoted entirely to the PC market, focusing on atmospheric experiences that respect the player&#8217;s hunger for challenge and grit.</p><p>They are currently developing <em><strong><a href="https://store.steampowered.com/app/4590680/Darkest_Path/">Darkest Path</a></strong></em>, a visceral 2.5D action roguelike FPS inspired by the oppressive atmospheres of cosmic horror and dark fantasy. By combining <strong>Unity C#</strong> expertise with <strong>custom shader work</strong> and <strong>high-fidelity 2D pixel art</strong>, the team aims to deliver raw, high-impact gaming experiences that bridge the gap between nostalgic aesthetics and modern rendering.</p><p>You can get the latest updates on the <em><strong>Darkest Path</strong></em> via <a href="https://x.com/DarkestPath2">X</a>, <a href="https://www.youtube.com/@DarkestPath">YouTube</a>, and <a href="https://discord.com/invite/afcskwwKGe">Discord</a>.</p><blockquote><p>&#127918; <strong>Wishlist Spotlight: Darkest Path</strong><br><em>A 2.5D roguelike FPS blending retro aesthetics with cosmic horror. Explore shifting nightmare realms and master different character classes in this dark fantasy experience.</em></p></blockquote><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://store.steampowered.com/app/4590680/Darkest_Path/&quot;,&quot;text&quot;:&quot;Wishlist Darkest Path on Steam&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://store.steampowered.com/app/4590680/Darkest_Path/"><span>Wishlist Darkest Path on Steam</span></a></p><p><em>Note: The interview responses were provided collaboratively by Umut and Berkay.</em></p><div><hr></div><h1>Closing - Until the Next Edition</h1><p>And that&#8217;s a wrap for today, folks &#127918;</p><p>If this story resonated with you, you&#8217;re probably not alone. A lot of us have been there&#8212;spending months (or years) building something, only to realize it&#8217;s not quite landing the way we hoped. What stood out to us in this issue is the courage it takes to step back, rethink, and start again&#8230; <em>even when it&#8217;s hard!</em></p><p>If you know someone who&#8217;s deep in their own dev journey right now&#8212;maybe stuck, maybe questioning things&#8212;send this their way. It might be exactly what they need to hear &#128155;</p><p>We&#8217;ve got more developer stories like this coming up&#8212;real journeys, real lessons, and the kind of behind-the-scenes thinking you don&#8217;t usually get to see &#128064;</p><p>And of course, we&#8217;ll be bringing back our game dev challenges soon too &#129504;&#9876;&#65039; so you can put your own thinking to the test. Until then, keep building, keep experimenting, and don&#8217;t be afraid to pivot when something doesn&#8217;t feel right.</p><p>Catch you in the next one.</p><p>Warm Regards,</p><p><strong>Game Dev Assembly Team</strong></p><div><hr></div><h2>There&#8217;s more to the story&#8230;</h2><p>We have an exciting event lined up for you. And it&#8217;s <strong>FREE </strong>to attend! Are you ready, peeps? We&#8217;re bringing Jordan in the house who has spent years working in the indie space and has launched a marketing agency to help games take off and attract players.</p><p>After reading Umut and Berkay&#8217;s story, you will realize marketing your game is an absolute must, and Jordan will break this down in a simplified way.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!43AM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa618eea-90f3-40a1-9cf2-093eafd7a1e5_1880x940.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!43AM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa618eea-90f3-40a1-9cf2-093eafd7a1e5_1880x940.webp 424w, https://substackcdn.com/image/fetch/$s_!43AM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa618eea-90f3-40a1-9cf2-093eafd7a1e5_1880x940.webp 848w, https://substackcdn.com/image/fetch/$s_!43AM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa618eea-90f3-40a1-9cf2-093eafd7a1e5_1880x940.webp 1272w, https://substackcdn.com/image/fetch/$s_!43AM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa618eea-90f3-40a1-9cf2-093eafd7a1e5_1880x940.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!43AM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa618eea-90f3-40a1-9cf2-093eafd7a1e5_1880x940.webp" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aa618eea-90f3-40a1-9cf2-093eafd7a1e5_1880x940.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:61606,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/195636238?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa618eea-90f3-40a1-9cf2-093eafd7a1e5_1880x940.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!43AM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa618eea-90f3-40a1-9cf2-093eafd7a1e5_1880x940.webp 424w, https://substackcdn.com/image/fetch/$s_!43AM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa618eea-90f3-40a1-9cf2-093eafd7a1e5_1880x940.webp 848w, https://substackcdn.com/image/fetch/$s_!43AM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa618eea-90f3-40a1-9cf2-093eafd7a1e5_1880x940.webp 1272w, https://substackcdn.com/image/fetch/$s_!43AM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa618eea-90f3-40a1-9cf2-093eafd7a1e5_1880x940.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.co.uk/e/the-complete-game-marketing-roadmap-from-idea-to-post-launch-success-tickets-1987902954249?aff=gdaNL&quot;,&quot;text&quot;:&quot;GET YOUR FREE TICKET&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eventbrite.co.uk/e/the-complete-game-marketing-roadmap-from-idea-to-post-launch-success-tickets-1987902954249?aff=gdaNL"><span>GET YOUR FREE TICKET</span></a></p><p style="text-align: center;"><strong>Our hosts at Game Dev Assembly and Jordan look forward to greeting you and holding a </strong><em><strong>game-changing</strong></em><strong> session! Get it? ;) Sign up fast before tickets run out! </strong></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gamedevnewsletter.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Game Dev Assembly Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The Game Industry Is Not “Recovering”]]></title><description><![CDATA[The game industry isn&#8217;t recovering as much as headlines suggest. A closer look at layoffs, studio closures, and funding trends reveals what&#8217;s really happening.]]></description><link>https://gamedevnewsletter.substack.com/p/the-game-industry-is-not-recovering</link><guid isPermaLink="false">https://gamedevnewsletter.substack.com/p/the-game-industry-is-not-recovering</guid><dc:creator><![CDATA[Game Dev Assembly Editors]]></dc:creator><pubDate>Fri, 24 Apr 2026 18:22:49 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!tat6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b92c6a-a241-4a3a-835f-2d18f673e204_1036x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Editor&#8217;s Note</h1><p>Hi everyone! &#128075; Welcome to <strong>Game Dev Assembly&#8217;s</strong> industry signals edition &#127918;&#10024; I hope you&#8217;re all having a fab week. Why not add the cherry on top this Friday &#127826; and check out the latest scoop in the industry? Because it doesn&#8217;t move loudly anymore&#8230;</p><p>It shifts under the surface, through layoffs, tool changes, funding decisions, and the kinds of games that suddenly start working.</p><p>Most people miss it.</p><p>This week, we&#8217;re breaking down the signals behind the noise &#128071; We don&#8217;t provide random news, but put it into context for you so you can take action. </p><div><hr></div><h1>&#128201; The Industry Didn&#8217;t Shrink&#8230;</h1><p>&#8230;it got cut down to <em><strong>reality</strong></em>. Read that again. </p><p>Let&#8217;s stop calling it a <em><strong>rough patch</strong></em>. Over the last ~2 years, <strong>10,000+ game industry jobs have been cut</strong> across companies like <a href="https://www.microsoft.com/en-gb">Microsoft</a>, <a href="https://www.ea.com/en-gb">Electronic Arts</a>, and <a href="https://unity.com/">Unity Technologies</a>. You can track ongoing layoffs <a href="https://layoffs.fyi/">here</a>. </p><p>But this isn&#8217;t a downturn. It&#8217;s a <em><strong>reset</strong></em>. Studios over-hired during the pandemic boom when budgets ballooned and timelines stretched. Now? We have fewer projects, smaller teams, and less risk tolerance.</p><p>In a nutshell, if your value depends on <em>being part of a big team</em>, you&#8217;re exposed. Efficiency is now more valuable than scale.</p><div><hr></div><h1>&#129504; AI Isn&#8217;t Coming&#8230;</h1><p>&#8230; it&#8217;s already inside your pipeline. </p><p>People are still debating AI like it&#8217;s optional. Meanwhile, teams are already using tools from <a href="https://openai.com/">OpenAI</a> inside pipelines connected to <a href="https://unity.com/">Unity</a> and <a href="https://www.unrealengine.com/">Unreal Engine</a>.</p><p>Not theoretically, but <em><strong>daily</strong></em>. And no, it&#8217;s not replacing devs. It&#8217;s doing something more dangerous, which is that it&#8217;s <em><strong>making smaller teams viable</strong></em>. </p><p>A solo dev today can generate placeholder assets instantly, write and debug code faster, and prototype entire systems in days. Some example tools you can explore are <a href="https://openai.com/">OpenAI</a>, <a href="https://unity.com/features/ai">Unity AI</a>, and <a href="https://www.unrealengine.com/ai?lang=en-US">Unreal Engine AI</a>. </p><p>In a nutshell, it&#8217;s no longer about who has the biggest team, but who can iterate the fastest. <em><strong>Speed</strong></em> is now a competitive advantage.</p><div><hr></div><h1>&#127919; Indie Games Aren&#8217;t Winning Because They&#8217;re Indie&#8230;</h1><p>&#8230; they&#8217;re winning because they&#8217;re <em><strong>clear</strong></em>.</p><p>Look at games like <a href="https://www.playbalatro.com/">Balatro</a> and <a href="https://store.steampowered.com/app/1966720/Lethal_Company/">Lethal Company</a>. They didn&#8217;t win with a massive scope, cutting-edge graphics, or years of production. They won with a <em><strong>strong core loop</strong></em>, <em><strong>immediate understanding</strong></em>, and high <em><strong>re-playability</strong></em>. Do you want proof?<br>Check Steam&#8217;s <a href="https://store.steampowered.com/charts/">top sellers and trending charts</a>. </p><p>Also, there are over <strong><a href="https://app.sensortower.com/vgi/">14,000+ games released on Steam annually</a>, </strong>and the majority make <strong><a href="https://app.sensortower.com/vgi/">under $1,000 revenue</a>. </strong>So what actually cuts through? <strong>It&#8217;s not </strong>polish or the effort, but<em> <strong>clarity</strong></em>. If your game takes more than 10 seconds to &#8220;get,&#8221; it&#8217;s already <em><strong>losing</strong></em>.</p><div><hr></div><h1>&#128226; Marketing Is No Longer a Phase&#8230;</h1><p>&#8230; it&#8217;s the game.</p><p>Most devs still think they&#8217;ll market their game when it&#8217;s ready. That&#8217;s why most games launch to silence. Discovery today is happening on <a href="https://www.tiktok.com/explore">TikTok</a>, <a href="https://www.youtube.com/?gl=GB&amp;hl=en-GB">YouTube</a>, and <a href="https://www.reddit.com/">Reddit</a>. Not storefronts, press, or ads. Wishlists don&#8217;t come from <em>launch days</em> anymore. They come from <em><strong>consistent visibility</strong></em>. The devs winning right now are posting rough clips, sharing failures, and building audiences early.</p><p>If you&#8217;re not <em><strong>building attention</strong></em> while building your game, you&#8217;re <em><strong>invisible</strong></em>.</p><div><hr></div><h1>&#127914; Events Won&#8217;t Save You</h1><p>Yes, <a href="https://gdconf.com/">Game Developers Conference</a> and <a href="https://www.summergamefest.com/">Summer Game Fest</a> still matter. But not in the way people think. They don&#8217;t create momentum, but <em><strong>amplify</strong></em><strong> </strong>it instead.<strong> </strong>Explore event coverage <a href="https://gdconf.com/">here</a> and <a href="https://www.summergamefest.com/">here</a>. </p><p>If no one knows your game before the event, then no one will care during it either. Events are <em><strong>multipliers</strong></em><strong>, </strong>not <em>starting points</em>.</p><div><hr></div><h1>&#128176; Funding Didn&#8217;t Disappear&#8230;</h1><p>&#8230; it got smarter. </p><p>Money is still out there, but it&#8217;s not chasing ideas anymore. It&#8217;s chasing traction, proof, and audience. Publishers now expect playable demos, wishlists, and community signals. </p><p>In a nutshell, <em><strong>the pitch deck era is fading</strong></em><strong>. </strong>Now it&#8217;s about showing that people already care. <em><strong>Traction</strong></em><strong> </strong>is the new currency.</p><div><hr></div><h2>&#129513; So What&#8217;s Actually Changed?</h2><p>Let&#8217;s simplify it:</p><p><strong>Old Game Industry:</strong></p><ul><li><p>Big teams win</p></li><li><p>Marketing comes later</p></li><li><p>Funding comes early</p></li></ul><p><strong>New Game Industry:</strong></p><ul><li><p>Fast teams win</p></li><li><p>Marketing is continuous</p></li><li><p>Funding follows traction</p></li></ul><div><hr></div><h2>&#128640; Your Reality Check</h2><p>Right now, you have two choices:</p><p style="text-align: center;"><strong>Build quietly and hope people show up later</strong></p><p style="text-align: center;"><em>(They won&#8217;t.)</em></p><p style="text-align: center;"><strong>Build, share, and test in public</strong></p><p style="text-align: center;"><em>(This is what&#8217;s working.)</em></p><div><hr></div><h2>&#9889; Your Move This Week</h2><p>We want you to take action:</p><ul><li><p>Post <em><strong>one clip</strong></em> of your game</p></li><li><p>Show one <em><strong>broken system</strong></em></p></li><li><p>Ask one <em><strong>real question</strong></em> publicly</p></li><li><p><em><strong>Test your hook</strong></em> on strangers</p></li></ul><p>That&#8217;s it. And drop a comment in this edition or send us a message when you have done any of the above. Game Dev Assembly is <em><strong>your</strong></em> space; <em><strong>our</strong></em> collective space. </p><div><hr></div><h2>&#127908; The Complete Game Marketing Roadmap: From Idea to Post-Launch Success</h2><p>Most games don&#8217;t fail because they&#8217;re bad.<br>They fail because no one sees them.</p><p>We&#8217;re doing a live session with <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Jordan&quot;,&quot;id&quot;:102345400,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61eff547-5d25-425a-8b09-85dccc018d0a_2000x2000.jpeg&quot;,&quot;uuid&quot;:&quot;19e059ad-32c8-4809-a162-75e37d4a3d53&quot;}" data-component-name="MentionToDOM"></span> from <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;OP Game Marketing&quot;,&quot;id&quot;:2700177,&quot;type&quot;:&quot;pub&quot;,&quot;url&quot;:&quot;https://open.substack.com/pub/opgamemarketing&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c91da7c3-ad1c-4037-a907-840322d5a4a8_500x500.png&quot;,&quot;uuid&quot;:&quot;3ca9abf8-16f8-4365-bfae-684ce5891134&quot;}" data-component-name="MentionToDOM"></span> on how to fix that.</p><p>&#128197; <strong>May 23, 2026 (Saturday)</strong> | &#9200; <strong>10 AM ET</strong> | Free</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.co.uk/e/the-complete-game-marketing-roadmap-from-idea-to-post-launch-success-tickets-1987902954249?aff=gdaNL&quot;,&quot;text&quot;:&quot;Reserve a Spot&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eventbrite.co.uk/e/the-complete-game-marketing-roadmap-from-idea-to-post-launch-success-tickets-1987902954249?aff=gdaNL"><span>Reserve a Spot</span></a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fhBk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4e879a9-8407-499e-af08-69e0bc5434f9_1200x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fhBk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4e879a9-8407-499e-af08-69e0bc5434f9_1200x600.png 424w, https://substackcdn.com/image/fetch/$s_!fhBk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4e879a9-8407-499e-af08-69e0bc5434f9_1200x600.png 848w, https://substackcdn.com/image/fetch/$s_!fhBk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4e879a9-8407-499e-af08-69e0bc5434f9_1200x600.png 1272w, https://substackcdn.com/image/fetch/$s_!fhBk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4e879a9-8407-499e-af08-69e0bc5434f9_1200x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fhBk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4e879a9-8407-499e-af08-69e0bc5434f9_1200x600.png" width="1200" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c4e879a9-8407-499e-af08-69e0bc5434f9_1200x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:287958,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/195370458?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4e879a9-8407-499e-af08-69e0bc5434f9_1200x600.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fhBk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4e879a9-8407-499e-af08-69e0bc5434f9_1200x600.png 424w, https://substackcdn.com/image/fetch/$s_!fhBk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4e879a9-8407-499e-af08-69e0bc5434f9_1200x600.png 848w, https://substackcdn.com/image/fetch/$s_!fhBk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4e879a9-8407-499e-af08-69e0bc5434f9_1200x600.png 1272w, https://substackcdn.com/image/fetch/$s_!fhBk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc4e879a9-8407-499e-af08-69e0bc5434f9_1200x600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><p>And that&#8217;s it for today. Stay tuned for the next industry signals by us where we bring you the latest news and deliver it in a meaningful and relevant way. </p><p><strong>Warm Regards,</strong></p><p><strong>Game Dev Assembly Team</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tat6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b92c6a-a241-4a3a-835f-2d18f673e204_1036x630.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tat6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b92c6a-a241-4a3a-835f-2d18f673e204_1036x630.png 424w, https://substackcdn.com/image/fetch/$s_!tat6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b92c6a-a241-4a3a-835f-2d18f673e204_1036x630.png 848w, https://substackcdn.com/image/fetch/$s_!tat6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b92c6a-a241-4a3a-835f-2d18f673e204_1036x630.png 1272w, https://substackcdn.com/image/fetch/$s_!tat6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b92c6a-a241-4a3a-835f-2d18f673e204_1036x630.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tat6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b92c6a-a241-4a3a-835f-2d18f673e204_1036x630.png" width="1036" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/28b92c6a-a241-4a3a-835f-2d18f673e204_1036x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1036,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:402022,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/195370458?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b92c6a-a241-4a3a-835f-2d18f673e204_1036x630.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tat6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b92c6a-a241-4a3a-835f-2d18f673e204_1036x630.png 424w, https://substackcdn.com/image/fetch/$s_!tat6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b92c6a-a241-4a3a-835f-2d18f673e204_1036x630.png 848w, https://substackcdn.com/image/fetch/$s_!tat6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b92c6a-a241-4a3a-835f-2d18f673e204_1036x630.png 1272w, https://substackcdn.com/image/fetch/$s_!tat6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28b92c6a-a241-4a3a-835f-2d18f673e204_1036x630.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gamedevnewsletter.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Game Dev Assembly Newsletter! Subscribe for free to receive new posts and support our work so we can continue being the gift that keeps on giving.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Game Dev Challenge: 30 Days. $0 Budget. 1,000 Players. What’s Your Plan?]]></title><description><![CDATA[Weekly prompts to get your juices flowing]]></description><link>https://gamedevnewsletter.substack.com/p/game-dev-challenge-30-days-0-budget</link><guid isPermaLink="false">https://gamedevnewsletter.substack.com/p/game-dev-challenge-30-days-0-budget</guid><dc:creator><![CDATA[Shazeen Iqbal]]></dc:creator><pubDate>Wed, 22 Apr 2026 09:13:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!luhv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ed8fa4-186a-455e-a702-6ad5a17f3711_4480x2520.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi everyone &#128075; How are you all doing? It&#8217;s <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Shazeen Iqbal&quot;,&quot;id&quot;:433560826,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b7d47e23-e5da-4baf-a0eb-d801d318badd_1026x1026.jpeg&quot;,&quot;uuid&quot;:&quot;f69c015a-6b12-4f0c-8ad8-a46a633cc0a0&quot;}" data-component-name="MentionToDOM"></span> and we&#8217;re back with another <strong>Game Dev Challenge</strong>.</p><p>This week, we&#8217;re shaking things up where we challenge you to think outside the box when it comes to marketing your indie game.</p><p>Chances are, you&#8217;ve built (or are building) a game and wondered: <em>how do I actually get players to care and buy it? </em>So we&#8217;ve put together a juicy challenge, built around real constraints, to push you to solve exactly that.</p><p>We&#8217;re also featuring some of the best responses from last week&#8217;s challenge, shared by developers who approached the problem from creative and unexpected angles. There&#8217;s a lot to learn from how others think, so jump in, share your take, and see what ideas you can spark (or borrow). Let&#8217;s go &#128640;</p><div><hr></div><h2><strong>&#129513; THIS WEEK&#8217;S CHALLENGE</strong></h2><p>You&#8217;ve spent <strong>2 years</strong> building your <strong>indie game</strong>. You finally <em><strong>launch</strong></em> it.</p><p>It&#8217;s <em><strong>polished</strong></em>. It <em><strong>plays well</strong></em>. The small number of players who find it <em><strong>love it</strong></em>.</p><p>But there&#8217;s <strong>a problem</strong>. Almost <em><strong>no one is seeing it</strong></em>. You don&#8217;t have a <em><strong>marketing budget</strong></em>. You don&#8217;t have a <em><strong>big following</strong></em>. And you don&#8217;t want to rely on luck or <em><strong>&#8220;hoping it goes viral.&#8221;</strong></em></p><p>You have:</p><ul><li><p><strong>30</strong> days</p></li><li><p><strong>$0</strong> budget</p></li><li><p>Your existing game build</p></li><li><p>Full internet access</p></li></ul><p>&#127919; Your goal:<strong> Get your first 1,000 real players.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xmxv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cf78d05-40ab-49dd-8fa5-1fff8302489c_2400x2400.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xmxv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cf78d05-40ab-49dd-8fa5-1fff8302489c_2400x2400.png 424w, https://substackcdn.com/image/fetch/$s_!xmxv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cf78d05-40ab-49dd-8fa5-1fff8302489c_2400x2400.png 848w, https://substackcdn.com/image/fetch/$s_!xmxv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cf78d05-40ab-49dd-8fa5-1fff8302489c_2400x2400.png 1272w, https://substackcdn.com/image/fetch/$s_!xmxv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cf78d05-40ab-49dd-8fa5-1fff8302489c_2400x2400.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xmxv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cf78d05-40ab-49dd-8fa5-1fff8302489c_2400x2400.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2cf78d05-40ab-49dd-8fa5-1fff8302489c_2400x2400.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1024746,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/194710864?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cf78d05-40ab-49dd-8fa5-1fff8302489c_2400x2400.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xmxv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cf78d05-40ab-49dd-8fa5-1fff8302489c_2400x2400.png 424w, https://substackcdn.com/image/fetch/$s_!xmxv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cf78d05-40ab-49dd-8fa5-1fff8302489c_2400x2400.png 848w, https://substackcdn.com/image/fetch/$s_!xmxv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cf78d05-40ab-49dd-8fa5-1fff8302489c_2400x2400.png 1272w, https://substackcdn.com/image/fetch/$s_!xmxv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cf78d05-40ab-49dd-8fa5-1fff8302489c_2400x2400.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2 style="text-align: center;"><strong>&#9997;&#65039;&#128161; </strong>Share your thoughts:</h2><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://gamedevassembly.com/pages/weekly-game-dev-challenge-submission-page&quot;,&quot;text&quot;:&quot;SUBMIT YOUR ANSWER&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://gamedevassembly.com/pages/weekly-game-dev-challenge-submission-page"><span>SUBMIT YOUR ANSWER</span></a></p><h4 style="text-align: center;">The best responses will be featured with your name and game dev role in the next edition. </h4><div><hr></div><h3>Last Week&#8217;s Game Dev Challenge Winners</h3><p><strong>A quick recap:</strong></p><blockquote><p>Your combat system felt great&#8230; until players min-maxed it and found a broken combo that trivialized everything.</p><p>Now everyone&#8217;s using it.</p><p>You can&#8217;t nerf it. You can&#8217;t remove it.</p><p><em><strong>What do you do?</strong></em></p></blockquote><h4>&#128161; The best responses:</h4><blockquote><p><em>&#8220;Introduce new types of enemies that can avoid this strategy. Maybe they attack from far away, maybe they parry attacks for a few seconds after first suffering damage, maybe they&#8217;re just tanky and big enough to stand between you and other enemies long enough for them to overwhelm you.</em></p><p><em>Make incentives for using other strategies, basically.&#8221;</em></p></blockquote><p><strong>&#8212; Rachel Villa</strong></p><blockquote><p><em>&#8220;Let them break it. It&#8217;s the coolest part of a system, finding broken builds.</em></p><p><em>Next patch, bring in something that requires them to change strategies. Don&#8217;t nerf their broken builds&#8212;they&#8217;re having fun. Build the next step that lets them get creative and break that as well.</em></p><p><em>Turn it into a core feature: theorycrafting to make something truly unique.</em></p><p><em>Look at Path of Exile&#8212;people love finding absolutely bonkers broken builds.&#8221;</em></p></blockquote><p><strong>&#8212; Jon, Solo Dev</strong></p><p>Have Rachel and Jon&#8217;s perspectives inspired you to think about the challenge differently? Did you think along similar lines, or from a different angle entirely? Leave your comments below!</p><div><hr></div><h2>&#128257; NEXT WEEK</h2><p>We&#8217;ll break down:</p><ul><li><p>The most interesting responses to this week&#8217;s challenge </p></li><li><p>A brand new game dev challenge</p></li><li><p>What experienced devs tend to do differently</p></li></ul><p>&#128073; Don&#8217;t forget to subscribe and find out who the winners are and what the next set of challenges and competitions will be&#8230;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://gamedevnewsletter.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://gamedevnewsletter.substack.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>&#128172; YOUR TURN</h2><p>Share your approach to this week&#8217;s challenge. I&#8217;m looking forward to reading your thoughts on indie game dev marketing&#8230;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://gamedevassembly.com/pages/weekly-game-dev-challenge-submission-page&quot;,&quot;text&quot;:&quot;SUBMIT YOUR ANSWER&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://gamedevassembly.com/pages/weekly-game-dev-challenge-submission-page"><span>SUBMIT YOUR ANSWER</span></a></p><div><hr></div><h2>WAIT! There&#8217;s more&#8230;</h2><p>If you didn&#8217;t think the game dev challenge to solve a problem in indie game marketing was enough, we have an exciting event lined up for you. Yes, <em><strong>you</strong></em>, <em><strong>you</strong></em>, and <em><strong>you!</strong></em> All of <strong>us!</strong> And it&#8217;s <strong>FREE </strong>to attend! Are you ready, peeps? We&#8217;re bringing Jordan in the house who has spent years working in the indie space and has launched a marketing agency to help games take off and attract players. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WBhb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F526a339b-6b4a-491e-b993-318db26d7c0b_1200x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WBhb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F526a339b-6b4a-491e-b993-318db26d7c0b_1200x600.png 424w, https://substackcdn.com/image/fetch/$s_!WBhb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F526a339b-6b4a-491e-b993-318db26d7c0b_1200x600.png 848w, https://substackcdn.com/image/fetch/$s_!WBhb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F526a339b-6b4a-491e-b993-318db26d7c0b_1200x600.png 1272w, https://substackcdn.com/image/fetch/$s_!WBhb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F526a339b-6b4a-491e-b993-318db26d7c0b_1200x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WBhb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F526a339b-6b4a-491e-b993-318db26d7c0b_1200x600.png" width="1200" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/526a339b-6b4a-491e-b993-318db26d7c0b_1200x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:287958,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/194710864?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F526a339b-6b4a-491e-b993-318db26d7c0b_1200x600.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WBhb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F526a339b-6b4a-491e-b993-318db26d7c0b_1200x600.png 424w, https://substackcdn.com/image/fetch/$s_!WBhb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F526a339b-6b4a-491e-b993-318db26d7c0b_1200x600.png 848w, https://substackcdn.com/image/fetch/$s_!WBhb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F526a339b-6b4a-491e-b993-318db26d7c0b_1200x600.png 1272w, https://substackcdn.com/image/fetch/$s_!WBhb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F526a339b-6b4a-491e-b993-318db26d7c0b_1200x600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.co.uk/e/the-complete-game-marketing-roadmap-from-idea-to-post-launch-success-tickets-1987902954249?aff=gdaNL&quot;,&quot;text&quot;:&quot;GET YOUR FREE TICKET&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eventbrite.co.uk/e/the-complete-game-marketing-roadmap-from-idea-to-post-launch-success-tickets-1987902954249?aff=gdaNL"><span>GET YOUR FREE TICKET</span></a></p><p style="text-align: center;"><strong>Our hosts at Game Dev Assembly and Jordan look forward to greeting you and holding a </strong><em><strong>game-changing</strong></em><strong> session! Get it? ;) Sign up fast before tickets run out! </strong></p><div><hr></div><h2>&#128640; Want to be featured?</h2><p>If you&#8217;re working on a game and have:</p><ul><li><p>A system that broke (and how you fixed it)</p></li><li><p>A design decision that changed your approach</p></li><li><p>A production problem you had to rethink</p></li></ul><p>&#128073; We&#8217;d love to feature your story in <a href="https://gamedevnewsletter.substack.com/">Game Dev Assembly</a>.</p><div class="directMessage button" data-attrs="{&quot;userId&quot;:433560826,&quot;userName&quot;:&quot;Shazeen Iqbal&quot;,&quot;canDm&quot;:null,&quot;dmUpgradeOptions&quot;:null,&quot;isEditorNode&quot;:true}" data-component-name="DirectMessageToDOM"></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VmWG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d88c111-18e0-4de6-8369-ba790c342d71_1440x1920.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VmWG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d88c111-18e0-4de6-8369-ba790c342d71_1440x1920.webp 424w, https://substackcdn.com/image/fetch/$s_!VmWG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d88c111-18e0-4de6-8369-ba790c342d71_1440x1920.webp 848w, https://substackcdn.com/image/fetch/$s_!VmWG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d88c111-18e0-4de6-8369-ba790c342d71_1440x1920.webp 1272w, https://substackcdn.com/image/fetch/$s_!VmWG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d88c111-18e0-4de6-8369-ba790c342d71_1440x1920.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VmWG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d88c111-18e0-4de6-8369-ba790c342d71_1440x1920.webp" width="1440" height="1920" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9d88c111-18e0-4de6-8369-ba790c342d71_1440x1920.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1920,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:283810,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/194710864?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d88c111-18e0-4de6-8369-ba790c342d71_1440x1920.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VmWG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d88c111-18e0-4de6-8369-ba790c342d71_1440x1920.webp 424w, https://substackcdn.com/image/fetch/$s_!VmWG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d88c111-18e0-4de6-8369-ba790c342d71_1440x1920.webp 848w, https://substackcdn.com/image/fetch/$s_!VmWG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d88c111-18e0-4de6-8369-ba790c342d71_1440x1920.webp 1272w, https://substackcdn.com/image/fetch/$s_!VmWG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9d88c111-18e0-4de6-8369-ba790c342d71_1440x1920.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>Here&#8217;s a thought&#8230;</h2><h4>What if we designed for feeling, not just explanation?</h4><p>We spend a lot of time thinking about what we ship and how we present it. The build itself, gameplay clips, screenshots, and store pages. Most of it ends up doing the same thing. It explains.</p><p>That&#8217;s useful, but it&#8217;s not always what makes something stick. What&#8217;s often missing is a feeling before someone even engages. A sense of tone, presence, or perspective.</p><p>I came across a project called <a href="https://www.kickstarter.com/projects/1887074969/otis-1?ref=7nue2h">Otis</a> that leans into that idea. It&#8217;s designed as a cinematic AI companion, built around the voice and presence of an elder figure rather than a neutral assistant. The focus isn&#8217;t just on what it says, but on how it feels to interact with it.</p><p>The focus shifts away from speed and toward creating a sense of presence.</p><p>It&#8217;s an interesting direction to think about, especially now, when people are becoming more selective about what&#8217;s worth their attention and what they scroll past.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!luhv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ed8fa4-186a-455e-a702-6ad5a17f3711_4480x2520.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!luhv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ed8fa4-186a-455e-a702-6ad5a17f3711_4480x2520.png 424w, https://substackcdn.com/image/fetch/$s_!luhv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ed8fa4-186a-455e-a702-6ad5a17f3711_4480x2520.png 848w, https://substackcdn.com/image/fetch/$s_!luhv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ed8fa4-186a-455e-a702-6ad5a17f3711_4480x2520.png 1272w, https://substackcdn.com/image/fetch/$s_!luhv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ed8fa4-186a-455e-a702-6ad5a17f3711_4480x2520.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!luhv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ed8fa4-186a-455e-a702-6ad5a17f3711_4480x2520.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/42ed8fa4-186a-455e-a702-6ad5a17f3711_4480x2520.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:7725384,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/194710864?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ed8fa4-186a-455e-a702-6ad5a17f3711_4480x2520.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!luhv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ed8fa4-186a-455e-a702-6ad5a17f3711_4480x2520.png 424w, https://substackcdn.com/image/fetch/$s_!luhv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ed8fa4-186a-455e-a702-6ad5a17f3711_4480x2520.png 848w, https://substackcdn.com/image/fetch/$s_!luhv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ed8fa4-186a-455e-a702-6ad5a17f3711_4480x2520.png 1272w, https://substackcdn.com/image/fetch/$s_!luhv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42ed8fa4-186a-455e-a702-6ad5a17f3711_4480x2520.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[Managing Complex Scenes in Unreal Engine]]></title><description><![CDATA[Brian is a writer, director, and VFX supervisor across film, TV, and real-time production, and brings you a perspective shaped by games and virtual production.]]></description><link>https://gamedevnewsletter.substack.com/p/managing-complex-scenes-in-unreal</link><guid isPermaLink="false">https://gamedevnewsletter.substack.com/p/managing-complex-scenes-in-unreal</guid><dc:creator><![CDATA[Game Dev Assembly Editors]]></dc:creator><pubDate>Thu, 16 Apr 2026 16:24:41 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6db2d866-e21f-4297-8fd9-61bc68ef7670_2400x1260.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Editor&#8217;s Note</h1><p>Howdy everyone &#128075; I hope you&#8217;re having a fab week. Welcome back to Game Dev Assembly. &#127918;</p><p>There&#8217;s a point in every project where things start feeling heavy. And it&#8217;s because everything is <em>there</em>. More assets, more systems, more ideas layered on top of each other until even simple tasks take longer than they should. This newsletter issue is about <em>cutting</em> through that.</p><p>Brian Rossney is a writer, director, and VFX supervisor working across film, TV, and real-time production, and he brings you a perspective shaped by both games and virtual production. He walks you through how Data Layers bring structure back into the process so that artists, designers, and gameplay systems can all coexist in the same world, without getting in each other&#8217;s way.</p><p>If your scenes are starting to feel crowded or you just want a cleaner way to build, this one&#8217;s worth your time. Dive in &#128071;</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gamedevnewsletter.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Game Dev Assembly Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h4>Table of Contents</h4><ol><li><p><a href="https://gamedevnewsletter.substack.com/i/193831207/introduction-to-data-layers">Introduction to Data Layers</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/193831207/tips-for-cleaner-level-workflows">Tips for Cleaner Level Workflows</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/193831207/about-the-author">About the Author</a></p></li></ol><div><hr></div><h2>Introduction to Data Layers</h2><p><a href="https://en.wikipedia.org/wiki/Game_world">Game worlds</a> don&#8217;t usually become complex all at once.</p><p>They tend to grow slowly the way old attics do. You start with a few careful objects, then drift into clutter as missions expand, artists add details, and new ideas take root. Before long, the editor feels crowded, and even simple tasks require a small expedition. That&#8217;s where <a href="https://www.unrealengine.com/">Unreal Engine</a>&#8217;s <strong><a href="https://dev.epicgames.com/documentation/unreal-engine/BlueprintAPI/DataLayers">Data Layers</a></strong> come in and offer a welcome sense of order. They sort this space that&#8217;s growing into clear and manageable sections that you can control with a single click, turning a messy room into a well-run workshop.</p><p>At the core, each <a href="https://dev.epicgames.com/documentation/unreal-engine/BlueprintAPI/DataLayers">Data Layer</a> acts as a container. Anything placed inside remains tied to that layer, which <a href="https://dev.epicgames.com/documentation/unreal-engine/world-partition-in-unreal-engine?application_version=5.0">keeps the world orderly</a>. Artists can keep <em>set dressing</em> in one layer, <em>lighting</em> in another, and <em>mission-specific pieces</em> in their own groups. This reduces visual noise and <a href="https://dev.epicgames.com/documentation/unreal-engine/level-editor-in-unreal-engine?application_version=5.0">makes the editor easier to navigate</a>, and instead of everything living in one overwhelming space, your world becomes segmented and intentional. A lighting artist can <a href="https://dev.epicgames.com/documentation/unreal-engine/actors-and-geometry-in-unreal-engine?application_version=5.0">turn off everything except illumination</a>. A designer can focus purely on combat elements where, instead of constantly navigating decorative objects, each person sees only what matters to them.</p><p>Isolation becomes simple instead of tedious. You would achieve less noise and more clarity.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MqPa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eeb1b9a-4373-4128-84a7-1c66843522fd_939x1108.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MqPa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eeb1b9a-4373-4128-84a7-1c66843522fd_939x1108.png 424w, https://substackcdn.com/image/fetch/$s_!MqPa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eeb1b9a-4373-4128-84a7-1c66843522fd_939x1108.png 848w, https://substackcdn.com/image/fetch/$s_!MqPa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eeb1b9a-4373-4128-84a7-1c66843522fd_939x1108.png 1272w, https://substackcdn.com/image/fetch/$s_!MqPa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eeb1b9a-4373-4128-84a7-1c66843522fd_939x1108.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MqPa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eeb1b9a-4373-4128-84a7-1c66843522fd_939x1108.png" width="939" height="1108" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4eeb1b9a-4373-4128-84a7-1c66843522fd_939x1108.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1108,&quot;width&quot;:939,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:125730,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/193831207?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eeb1b9a-4373-4128-84a7-1c66843522fd_939x1108.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MqPa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eeb1b9a-4373-4128-84a7-1c66843522fd_939x1108.png 424w, https://substackcdn.com/image/fetch/$s_!MqPa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eeb1b9a-4373-4128-84a7-1c66843522fd_939x1108.png 848w, https://substackcdn.com/image/fetch/$s_!MqPa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eeb1b9a-4373-4128-84a7-1c66843522fd_939x1108.png 1272w, https://substackcdn.com/image/fetch/$s_!MqPa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4eeb1b9a-4373-4128-84a7-1c66843522fd_939x1108.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Data Layers</figcaption></figure></div><p>As projects grow, so do teams, and you can imagine what can occur from there. Friction is a given. In that case, you can see that <a href="https://dev.epicgames.com/documentation/unreal-engine/world-partition---data-layers-in-unreal-engine?application_version=5.0">Data Layers help teams avoid stepping on each other&#8217;s work</a>. A cinematic artist may have a layer dedicated to a sequence, while a gameplay designer keeps encounter logic in a separate one. Because changes remain contained, there&#8217;s less overlap, fewer conflicts, and <a href="https://dev.epicgames.com/documentation/unreal-engine/collaboration-and-version-control-in-unreal-engine?application_version=5.0">smoother source control merges</a>. Everyone works in the same world, but not on top of each other. Each role sees only the part of the world it needs, without wading through a forest of unrelated objects.</p><p>A major advantage of Data Layers is the ability to control variation. Many games require alternate versions of the same location, such as intact and ruined states, seasonal changes, or different mission phases. Instead of duplicating the entire map, developers can place each variant in its own layer. Only the active layer appears during play, while the others remain unloaded. This <a href="https://dev.epicgames.com/documentation/unreal-engine/world-partition-in-unreal-engine?application_version=5.0">keeps memory usage efficient</a> and prevents inconsistencies between level copies.</p><p><a href="https://dev.epicgames.com/documentation/unreal-engine/blueprints-visual-scripting-in-unreal-engine?application_version=5.0">Blueprints deepen the usefulness of this system</a>. Unreal Engine allows Data Layers to be activated or deactivated through Blueprint logic, which means level changes can respond to gameplay events. A mission trigger can load a destroyed street the moment a bomb goes off. A quest flag can switch a town from night to day. A cinematic cue can reveal hidden elements by activating their layer. <a href="https://dev.epicgames.com/documentation/unreal-engine/BlueprintAPI?application_version=5.0">Blueprint nodes handle these operations with straightforward calls</a>, so the process remains readable even in large projects.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PDKF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F439cf4d6-fe42-4d6f-aeff-b3be1d1380f5_1380x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PDKF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F439cf4d6-fe42-4d6f-aeff-b3be1d1380f5_1380x600.png 424w, https://substackcdn.com/image/fetch/$s_!PDKF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F439cf4d6-fe42-4d6f-aeff-b3be1d1380f5_1380x600.png 848w, https://substackcdn.com/image/fetch/$s_!PDKF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F439cf4d6-fe42-4d6f-aeff-b3be1d1380f5_1380x600.png 1272w, https://substackcdn.com/image/fetch/$s_!PDKF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F439cf4d6-fe42-4d6f-aeff-b3be1d1380f5_1380x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PDKF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F439cf4d6-fe42-4d6f-aeff-b3be1d1380f5_1380x600.png" width="727.9971313476562" height="316.5204918902853" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/439cf4d6-fe42-4d6f-aeff-b3be1d1380f5_1380x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:600,&quot;width&quot;:1380,&quot;resizeWidth&quot;:727.9971313476562,&quot;bytes&quot;:131314,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/193831207?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F439cf4d6-fe42-4d6f-aeff-b3be1d1380f5_1380x600.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PDKF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F439cf4d6-fe42-4d6f-aeff-b3be1d1380f5_1380x600.png 424w, https://substackcdn.com/image/fetch/$s_!PDKF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F439cf4d6-fe42-4d6f-aeff-b3be1d1380f5_1380x600.png 848w, https://substackcdn.com/image/fetch/$s_!PDKF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F439cf4d6-fe42-4d6f-aeff-b3be1d1380f5_1380x600.png 1272w, https://substackcdn.com/image/fetch/$s_!PDKF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F439cf4d6-fe42-4d6f-aeff-b3be1d1380f5_1380x600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Using Blueprints for Data Layers</figcaption></figure></div><p>In the <a href="https://dev.epicgames.com/documentation/unreal-engine/world-partition---data-layers-in-unreal-engine?application_version=5.4">Epic Games Help</a> doc example in the above picture, they&#8217;ve used keybindings as a use case.</p><p>But this can easily be a trigger volume or a level instance.</p><p>This link between <a href="https://dev.epicgames.com/documentation/unreal-engine/BlueprintAPI/DataLayers">Data Layers</a> and gameplay gives designers strong control over how environments evolve. Instead of relying on heavy map transitions, the world changes smoothly within the same level. Combined with cleaner editing and reduced clutter, <a href="https://dev.epicgames.com/documentation/unreal-engine/BlueprintAPI/DataLayers">Data Layers</a> have become a quiet but powerful tool that keeps development focused and organized.</p><h2><strong>Tips for Cleaner Level Workflows</strong></h2><p>Here are five practical approaches you can use right away. Each one is meant to be simple to try out and recall later: </p><h4>1. Build a &#8216;Work Layers&#8217; preset before you start dressing a level</h4><p>Create a few empty Data Layers at the start of each map. For example, Lighting, Set Dressing, Gameplay, Cinematics, Audio. Assign new actors to the correct layer as you place them. This keeps the scene clean from the first hour instead of fixing it later.</p><h4>2. Use the Outliner filter to audit your layers once a week</h4><p>Open the <strong>Outliner</strong>, sort by <strong>Data Layer</strong>, and look for objects marked as <strong>Unassigned</strong>. Move them to the correct layer. This habit prevents large clumps of loose actors from gathering over time.</p><h4>3. Add a simple Blueprint manager that controls all major environment states</h4><p>Create an <strong>Actor</strong> called <code>LayerController</code>. Inside it, place Blueprint nodes that load or unload named <strong>Data Layers</strong>. Call these functions from mission triggers or overlaps. This becomes the central hub for handling all environmental changes.</p><h4>4. Set up paired layers for quick variations</h4><p>For locations that switch between two states, create pairs such as <code>Town_Day</code> and <code>Town_Night</code> or <code>Street_Intact</code> and <code>Street_Ruined</code>. Keep names clear and consistent. With this pattern in place, swapping states feels almost instantaneous.</p><h4>5. Test performance by toggling whole layers while the game runs in the editor</h4><p>Play in the editor, open the <strong>Data Layer</strong> panel, and hide groups of content one by one. Watch the frame rate. This helps you identify whether foliage, effects, or props are the main source of slowdown without digging through individual actors.</p><p>And that&#8217;s it folks. If you have any questions or stories to share around this, feel free to drop your comment and I&#8217;ll get back to you. Stay tuned for more content from me in Game Dev Assembly soon! </p><div><hr></div><h3>About the Author</h3><p><strong><a href="https://www.linkedin.com/in/brianrossney/">Brian Rossney</a></strong> is an Irish writer, director, and VFX supervisor working across film, television, and real-time production. He is the founder of <strong><a href="https://www.redspiderstudios.com/">Red Spider Studios</a></strong> and serves as <strong>VFX</strong> and <strong>Immersive Technology Supervisor</strong> with <strong><a href="https://www.zanzibarfilms.net/">Zanzibar Films</a></strong>.</p><p>He has supervised visual effects on productions including <em>Christmas in Notting Hill</em>, <em>Love of the Irish</em>, and <em>A Royal Corgi Christmas</em>. He is currently the in-house VFX Previz Artist on <em>Wednesday</em> for MGM.</p><p>His work focuses on real-time workflows for previs, virtual production, and character creation. He has worked on the PC game <em>Lunar Strike</em>, processing facial motion capture, re-targeting performance data, and advising on MetaHuman workflows. He has also built multi-camera virtual studios in Unreal Engine for live global productions.</p><p>Rossney is the author of <em>Reimagining Characters with Unreal Engine&#8217;s MetaHuman Creator</em>, with this second edition reflecting his continued work in real-time storytelling and production workflows.</p><h1>Closing - Until the Next Edition</h1><p>And that&#8217;s it for today, folks! &#127918;&#10024; If you liked this issue and think it will benefit your teammates or someone in the games or film industry, please share it with them and invite them to Game Dev Assembly. The great thing about this issue is that it appeals to both game developers and filmmakers, and opens people&#8217;s eyes to how much creativity and technicality is involved behind the scenes.</p><p>In the next editions, we&#8217;re going to post a game dev challenge &#129504;&#9876;&#65039; So if you&#8217;re feeling competitive and want to test your problem-solving abilities, stay tuned for the next prompt we&#8217;ll drop on Saturday!</p><p>And it doesn&#8217;t end there! &#128640; We&#8217;ve got the latest industry news and announcements coming up too. Catch you on the other side &#128064; Stay awesome, and we look forward to engaging with you more very soon!</p><p>Warm Regards,</p><p>Game Dev Assembly Team</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://gamedevnewsletter.substack.com/survey/6842204&quot;,&quot;text&quot;:&quot;Let us know your feedback.&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://gamedevnewsletter.substack.com/survey/6842204"><span>Let us know your feedback.</span></a></p><div><hr></div><p style="text-align: center;"><em><strong>&#128226; Advertise with us<br></strong></em><br><em>Interested in sponsoring this newsletter and reaching a highly engaged audience of tech professionals? Simply email us and our team will get in touch with next steps.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;mailto:gamedevnewsletter@packt.com&quot;,&quot;text&quot;:&quot;Email Us&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="mailto:gamedevnewsletter@packt.com"><span>Email Us</span></a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gamedevnewsletter.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Game Dev Assembly Newsletter! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Game Dev Challenge: Players Just Broke Your System. How Will You Fix It?]]></title><description><![CDATA[Weekly prompts to get your juices flowing]]></description><link>https://gamedevnewsletter.substack.com/p/game-dev-challenge-players-just-broke</link><guid isPermaLink="false">https://gamedevnewsletter.substack.com/p/game-dev-challenge-players-just-broke</guid><dc:creator><![CDATA[Shazeen Iqbal]]></dc:creator><pubDate>Sat, 04 Apr 2026 22:53:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Uwp2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92da5e85-4361-4579-aa52-a2d569c4b443_4480x2520.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi dear readers. &#128075; It&#8217;s <a href="https://www.linkedin.com/in/shazeen-iqbal/">Shazeen</a> from <a href="https://www.linkedin.com/company/game-dev-assembly/">Game Dev Assembly</a>&#8212;your resident newsletter hostess! How are you all doing? </p><p>I&#8217;m kicking off something new to get you involved in solving real game development problems with me. I want to hear from you just as much as the challenges we post, because <a href="https://gamedevnewsletter.substack.com/">this space</a> is <strong>all about us</strong>.</p><p>So roll up your sleeves and get ready for your first challenge. The best answers will be featured in our <a href="https://gamedevnewsletter.substack.com/">next issue</a>, along with your <em><strong>names</strong></em> and <em><strong>social media profiles</strong></em>.</p><div><hr></div><h2>&#129513; THIS WEEK&#8217;S CHALLENGE</h2><p>You build a combat system that feels balanced and fun in testing. Every playstyle works, nothing feels overpowered&#8212;until real players get their hands on it and quickly find a way to <em><strong>break it</strong></em>.</p><p>By combining a few mechanics&#8212;like stacking damage effects and attacking really fast&#8212;they create a setup that melts enemies in seconds. Suddenly, everyone is using the same strategy, and the variety you designed <em><strong>disappears</strong></em>.</p><p>The problem is, you can&#8217;t just remove or heavily nerf this combo. It&#8217;s based on your core system working <em><strong>exactly as intended</strong></em>.</p><p>So now you&#8217;re stuck with a challenge: <strong>how do you adjust or redesign the system so it still feels fun and fair, but doesn&#8217;t fall apart when players push it to the limit?</strong></p><h4 style="text-align: center;"><strong>Share your answer in a reply to this post &#9997;&#65039;&#128161;&#128172;</strong></h4><div><hr></div><h2>&#128640; Want to be featured?</h2><p>If you&#8217;re working on a game and have:</p><ul><li><p>A system that broke (and how you fixed it)</p></li><li><p>A design decision that changed your approach</p></li><li><p>A production problem you had to rethink</p></li></ul><p>&#128073; We&#8217;d love to feature your story in <a href="https://gamedevnewsletter.substack.com/">Game Dev Assembly</a>.</p><div class="directMessage button" data-attrs="{&quot;userId&quot;:433560826,&quot;userName&quot;:&quot;Shazeen Iqbal&quot;,&quot;canDm&quot;:null,&quot;dmUpgradeOptions&quot;:null,&quot;isEditorNode&quot;:true}" data-component-name="DirectMessageToDOM"></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0ieU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff596a3a3-43db-49be-a91f-2d203b7891b9_1440x1920.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0ieU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff596a3a3-43db-49be-a91f-2d203b7891b9_1440x1920.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0ieU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff596a3a3-43db-49be-a91f-2d203b7891b9_1440x1920.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0ieU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff596a3a3-43db-49be-a91f-2d203b7891b9_1440x1920.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0ieU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff596a3a3-43db-49be-a91f-2d203b7891b9_1440x1920.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0ieU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff596a3a3-43db-49be-a91f-2d203b7891b9_1440x1920.jpeg" width="1440" height="1920" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f596a3a3-43db-49be-a91f-2d203b7891b9_1440x1920.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1920,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1049000,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/193207844?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff596a3a3-43db-49be-a91f-2d203b7891b9_1440x1920.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0ieU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff596a3a3-43db-49be-a91f-2d203b7891b9_1440x1920.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0ieU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff596a3a3-43db-49be-a91f-2d203b7891b9_1440x1920.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0ieU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff596a3a3-43db-49be-a91f-2d203b7891b9_1440x1920.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0ieU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff596a3a3-43db-49be-a91f-2d203b7891b9_1440x1920.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>&#128257; NEXT WEEK</h2><p>We&#8217;ll break down:</p><ul><li><p>The most interesting responses to this challenge </p></li><li><p>Patterns across how developers like yourselves approach system design</p></li><li><p>What experienced devs tend to do differently</p></li></ul><p>&#128073; Don&#8217;t forget to subscribe and find out who the winners are and what the next set of challenges and competitions will be&#8230;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://gamedevnewsletter.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://gamedevnewsletter.substack.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>&#128172; YOUR TURN</h2><p>Reply by commenting what your approach to this week&#8217;s challenge is. I&#8217;m looking forward to reading your thoughts.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Uwp2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92da5e85-4361-4579-aa52-a2d569c4b443_4480x2520.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Uwp2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92da5e85-4361-4579-aa52-a2d569c4b443_4480x2520.png 424w, https://substackcdn.com/image/fetch/$s_!Uwp2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92da5e85-4361-4579-aa52-a2d569c4b443_4480x2520.png 848w, https://substackcdn.com/image/fetch/$s_!Uwp2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92da5e85-4361-4579-aa52-a2d569c4b443_4480x2520.png 1272w, https://substackcdn.com/image/fetch/$s_!Uwp2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92da5e85-4361-4579-aa52-a2d569c4b443_4480x2520.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Uwp2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92da5e85-4361-4579-aa52-a2d569c4b443_4480x2520.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/92da5e85-4361-4579-aa52-a2d569c4b443_4480x2520.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:9890040,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/193207844?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92da5e85-4361-4579-aa52-a2d569c4b443_4480x2520.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Uwp2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92da5e85-4361-4579-aa52-a2d569c4b443_4480x2520.png 424w, https://substackcdn.com/image/fetch/$s_!Uwp2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92da5e85-4361-4579-aa52-a2d569c4b443_4480x2520.png 848w, https://substackcdn.com/image/fetch/$s_!Uwp2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92da5e85-4361-4579-aa52-a2d569c4b443_4480x2520.png 1272w, https://substackcdn.com/image/fetch/$s_!Uwp2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92da5e85-4361-4579-aa52-a2d569c4b443_4480x2520.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[Don’t Fight First-Person Shooter (FPS) Clipping: Fix It with SubViewports in Godot 4]]></title><description><![CDATA[Fix FPS weapon clipping in Godot 4 using SubViewports. Learn a simple, scalable solution that avoids hacks and keeps attachments rendering cleanly.]]></description><link>https://gamedevnewsletter.substack.com/p/dont-fight-fps-clipping-fix-it-with-subviewports-godot4</link><guid isPermaLink="false">https://gamedevnewsletter.substack.com/p/dont-fight-fps-clipping-fix-it-with-subviewports-godot4</guid><dc:creator><![CDATA[Game Dev Assembly Editors]]></dc:creator><pubDate>Thu, 26 Mar 2026 13:26:06 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/f3e84dd0-50ef-42e8-a58f-ec8d16377d92_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Editor&#8217;s Note</h1><p>Howdy everyone! Welcome to yet another Game Dev Assembly issue. &#128640;&#127918; </p><p>Most first-person shooter devs hit clipping issues and immediately reach for complicated fixes, like collision hacks, camera tricks, and animation band-aids. &#129301;&#128736;&#65039; </p><p><em><strong>This isn&#8217;t</strong></em><strong> </strong><em><strong>that</strong></em><strong>.</strong> </p><blockquote><p>Justin shows a cleaner way: <strong>don&#8217;t fight the problem but change how it&#8217;s rendered.</strong> </p></blockquote><p>Using <strong>SubViewports</strong>, he sidesteps the problem entirely with a solution that&#8217;s simple, scalable, and already sitting inside the engine. No overengineering. No fragile workarounds. Just a smart use of the tools you already have. This is the kind of dev thinking we like&#8212;<strong>practical, production-ready, and a little bit sneaky. &#128527; </strong>Dive in and also check out the latest industry headlines, game events, tips, and much more!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gamedevnewsletter.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h4>Table of Contents</h4><ol><li><p><a href="https://gamedevnewsletter.substack.com/i/191999888/introduction">Introduction</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/191999888/quick-godot-tips">Quick Godot Tips</a></p><ol><li><p>External Code Editors for Godot</p></li><li><p>Global Services with Autoloads</p></li></ol></li><li><p><a href="https://gamedevnewsletter.substack.com/i/191999888/debugging-via-remote-scene-tree">Debugging via Remote Scene Tree</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/191999888/managing-multiple-godot-versions-via-terminal">Managing Multiple Godot Versions via Terminal</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/191999888/debugging-collision-shapes-visually">Debugging Collision Shapes Visually</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/191999888/about-the-author">About the Author</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/191999888/top-dev-headlines-march-2026">Top Dev Headlines (March 2026)</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/191999888/upcoming-game-events">Upcoming Game Events</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/191999888/tool-of-the-week-renderdoc">Tool of the Week</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/191999888/game-dev-jobs-board">Game Dev Jobs Board</a></p></li></ol><div><hr></div><h2>Introduction</h2><p>Hey everyone! It&#8217;s Justin from Emberwell Games, and I&#8217;m excited to be writing my first article for Game Dev Assembly! While prototyping an FPS (First-Person Shooter) in Godot, I learned of a few helpful nodes to prevent character attachments (weapons, items, etc.) from clipping through objects in the environment. Let&#8217;s dive in!</p><p>Have you heard about the <a href="https://docs.godotengine.org/en/stable/classes/class_subviewport.html">SubViewport</a> and <a href="https://docs.godotengine.org/en/stable/classes/class_subviewportcontainer.html">SubViewportContainer</a> nodes? These nodes effectively overlay a view onto the screen using their own camera that renders on a different layer than the main camera. We can use this to ensure attachments never clip into objects in the environment. I&#8217;ll be using a modified version of the awesome <a href="https://github.com/KenneyNL/Starter-Kit-FPS">FPS Starter Kit</a> by <a href="https://kenney.nl/">Kenney</a> to demonstrate.</p><ol><li><p>Create a <strong>SubViewportContainer</strong> node at the root and anchor it to <em>full rect</em> to cover the window. We need the container itself to take over the screen, so make sure the <strong>Stretch</strong> property is enabled:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XogS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3f4f249-e8a5-4cd0-9761-0ebace96dc26_571x453.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XogS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3f4f249-e8a5-4cd0-9761-0ebace96dc26_571x453.png 424w, https://substackcdn.com/image/fetch/$s_!XogS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3f4f249-e8a5-4cd0-9761-0ebace96dc26_571x453.png 848w, https://substackcdn.com/image/fetch/$s_!XogS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3f4f249-e8a5-4cd0-9761-0ebace96dc26_571x453.png 1272w, https://substackcdn.com/image/fetch/$s_!XogS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3f4f249-e8a5-4cd0-9761-0ebace96dc26_571x453.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XogS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3f4f249-e8a5-4cd0-9761-0ebace96dc26_571x453.png" width="571" height="453" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d3f4f249-e8a5-4cd0-9761-0ebace96dc26_571x453.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:453,&quot;width&quot;:571,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:65673,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/191999888?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3f4f249-e8a5-4cd0-9761-0ebace96dc26_571x453.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XogS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3f4f249-e8a5-4cd0-9761-0ebace96dc26_571x453.png 424w, https://substackcdn.com/image/fetch/$s_!XogS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3f4f249-e8a5-4cd0-9761-0ebace96dc26_571x453.png 848w, https://substackcdn.com/image/fetch/$s_!XogS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3f4f249-e8a5-4cd0-9761-0ebace96dc26_571x453.png 1272w, https://substackcdn.com/image/fetch/$s_!XogS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3f4f249-e8a5-4cd0-9761-0ebace96dc26_571x453.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p style="text-align: justify;"></p></li><li><p style="text-align: justify;">Create a <strong>SubViewport</strong> node as a child of <strong>SubViewportContainer</strong>, then create a <strong>Camera3D</strong> node as a child of the <strong>SubViewport</strong> node:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kkFD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96897cb4-da92-4435-9374-c8f466eb0756_624x568.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kkFD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96897cb4-da92-4435-9374-c8f466eb0756_624x568.png 424w, https://substackcdn.com/image/fetch/$s_!kkFD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96897cb4-da92-4435-9374-c8f466eb0756_624x568.png 848w, https://substackcdn.com/image/fetch/$s_!kkFD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96897cb4-da92-4435-9374-c8f466eb0756_624x568.png 1272w, https://substackcdn.com/image/fetch/$s_!kkFD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96897cb4-da92-4435-9374-c8f466eb0756_624x568.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kkFD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96897cb4-da92-4435-9374-c8f466eb0756_624x568.png" width="624" height="568" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96897cb4-da92-4435-9374-c8f466eb0756_624x568.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:568,&quot;width&quot;:624,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:196962,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/191999888?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96897cb4-da92-4435-9374-c8f466eb0756_624x568.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kkFD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96897cb4-da92-4435-9374-c8f466eb0756_624x568.png 424w, https://substackcdn.com/image/fetch/$s_!kkFD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96897cb4-da92-4435-9374-c8f466eb0756_624x568.png 848w, https://substackcdn.com/image/fetch/$s_!kkFD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96897cb4-da92-4435-9374-c8f466eb0756_624x568.png 1272w, https://substackcdn.com/image/fetch/$s_!kkFD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96897cb4-da92-4435-9374-c8f466eb0756_624x568.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p style="text-align: justify;">The SubViewport shouldn&#8217;t render the world environment, so enable <strong>Transparent BG</strong>: </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jwZx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96c392df-3b74-4c71-a8f4-e76ac61c19f9_587x395.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jwZx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96c392df-3b74-4c71-a8f4-e76ac61c19f9_587x395.png 424w, https://substackcdn.com/image/fetch/$s_!jwZx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96c392df-3b74-4c71-a8f4-e76ac61c19f9_587x395.png 848w, https://substackcdn.com/image/fetch/$s_!jwZx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96c392df-3b74-4c71-a8f4-e76ac61c19f9_587x395.png 1272w, https://substackcdn.com/image/fetch/$s_!jwZx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96c392df-3b74-4c71-a8f4-e76ac61c19f9_587x395.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jwZx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96c392df-3b74-4c71-a8f4-e76ac61c19f9_587x395.png" width="587" height="395" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96c392df-3b74-4c71-a8f4-e76ac61c19f9_587x395.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:395,&quot;width&quot;:587,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:61866,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/191999888?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96c392df-3b74-4c71-a8f4-e76ac61c19f9_587x395.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jwZx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96c392df-3b74-4c71-a8f4-e76ac61c19f9_587x395.png 424w, https://substackcdn.com/image/fetch/$s_!jwZx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96c392df-3b74-4c71-a8f4-e76ac61c19f9_587x395.png 848w, https://substackcdn.com/image/fetch/$s_!jwZx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96c392df-3b74-4c71-a8f4-e76ac61c19f9_587x395.png 1272w, https://substackcdn.com/image/fetch/$s_!jwZx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96c392df-3b74-4c71-a8f4-e76ac61c19f9_587x395.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p style="text-align: justify;">We only want the attachment camera to render player attachments, so disable all its <strong>Cull Mask</strong> layers except for just one. I&#8217;ll use mask <strong>2</strong>. Remember which layer you left enabled, as we&#8217;ll need it for the next step!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!z5GM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4968b6a9-bf5b-4912-95e7-b081d249dc90_624x512.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!z5GM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4968b6a9-bf5b-4912-95e7-b081d249dc90_624x512.png 424w, https://substackcdn.com/image/fetch/$s_!z5GM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4968b6a9-bf5b-4912-95e7-b081d249dc90_624x512.png 848w, https://substackcdn.com/image/fetch/$s_!z5GM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4968b6a9-bf5b-4912-95e7-b081d249dc90_624x512.png 1272w, https://substackcdn.com/image/fetch/$s_!z5GM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4968b6a9-bf5b-4912-95e7-b081d249dc90_624x512.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!z5GM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4968b6a9-bf5b-4912-95e7-b081d249dc90_624x512.png" width="624" height="512" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4968b6a9-bf5b-4912-95e7-b081d249dc90_624x512.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:624,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:110932,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/191999888?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4968b6a9-bf5b-4912-95e7-b081d249dc90_624x512.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!z5GM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4968b6a9-bf5b-4912-95e7-b081d249dc90_624x512.png 424w, https://substackcdn.com/image/fetch/$s_!z5GM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4968b6a9-bf5b-4912-95e7-b081d249dc90_624x512.png 848w, https://substackcdn.com/image/fetch/$s_!z5GM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4968b6a9-bf5b-4912-95e7-b081d249dc90_624x512.png 1272w, https://substackcdn.com/image/fetch/$s_!z5GM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4968b6a9-bf5b-4912-95e7-b081d249dc90_624x512.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p></li><li><p style="text-align: justify;">Although we enabled <strong>Transparent BG</strong>, that only prevents the world environment from rendering in the <strong>SubViewport</strong>, but it will still render other objects in the scene. To fix this, select your attachment mesh and set all of its visual mesh nodes to the enabled <strong>Cull Mask</strong> you set on the attachment camera <strong>Cull Mask</strong> (layer <strong>2</strong> in this case):</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vSDW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faab66d2d-ed27-467e-848f-f8a6d7587d3b_624x408.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vSDW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faab66d2d-ed27-467e-848f-f8a6d7587d3b_624x408.png 424w, https://substackcdn.com/image/fetch/$s_!vSDW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faab66d2d-ed27-467e-848f-f8a6d7587d3b_624x408.png 848w, https://substackcdn.com/image/fetch/$s_!vSDW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faab66d2d-ed27-467e-848f-f8a6d7587d3b_624x408.png 1272w, https://substackcdn.com/image/fetch/$s_!vSDW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faab66d2d-ed27-467e-848f-f8a6d7587d3b_624x408.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vSDW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faab66d2d-ed27-467e-848f-f8a6d7587d3b_624x408.png" width="624" height="408" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aab66d2d-ed27-467e-848f-f8a6d7587d3b_624x408.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:408,&quot;width&quot;:624,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:58344,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/191999888?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faab66d2d-ed27-467e-848f-f8a6d7587d3b_624x408.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vSDW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faab66d2d-ed27-467e-848f-f8a6d7587d3b_624x408.png 424w, https://substackcdn.com/image/fetch/$s_!vSDW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faab66d2d-ed27-467e-848f-f8a6d7587d3b_624x408.png 848w, https://substackcdn.com/image/fetch/$s_!vSDW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faab66d2d-ed27-467e-848f-f8a6d7587d3b_624x408.png 1272w, https://substackcdn.com/image/fetch/$s_!vSDW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faab66d2d-ed27-467e-848f-f8a6d7587d3b_624x408.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p></li><li><p style="text-align: justify;">We want the attachment camera transform to match that of the main player camera. We can add a <strong><a href="https://docs.godotengine.org/en/stable/classes/class_remotetransform3d.html">RemoteTransform3D</a></strong> node as a child to the main camera and set the <strong>Remote Path</strong> to the attachment camera within the <strong>SubViewport</strong>. This will force the main camera to have the same <strong>Transform</strong> as the attachment camera to keep them in sync:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kmNp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1b5b02c-8b31-4174-bc79-6faf8c10a463_581x457.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kmNp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1b5b02c-8b31-4174-bc79-6faf8c10a463_581x457.png 424w, https://substackcdn.com/image/fetch/$s_!kmNp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1b5b02c-8b31-4174-bc79-6faf8c10a463_581x457.png 848w, https://substackcdn.com/image/fetch/$s_!kmNp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1b5b02c-8b31-4174-bc79-6faf8c10a463_581x457.png 1272w, https://substackcdn.com/image/fetch/$s_!kmNp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1b5b02c-8b31-4174-bc79-6faf8c10a463_581x457.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kmNp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1b5b02c-8b31-4174-bc79-6faf8c10a463_581x457.png" width="581" height="457" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d1b5b02c-8b31-4174-bc79-6faf8c10a463_581x457.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:457,&quot;width&quot;:581,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:66547,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/191999888?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1b5b02c-8b31-4174-bc79-6faf8c10a463_581x457.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kmNp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1b5b02c-8b31-4174-bc79-6faf8c10a463_581x457.png 424w, https://substackcdn.com/image/fetch/$s_!kmNp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1b5b02c-8b31-4174-bc79-6faf8c10a463_581x457.png 848w, https://substackcdn.com/image/fetch/$s_!kmNp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1b5b02c-8b31-4174-bc79-6faf8c10a463_581x457.png 1272w, https://substackcdn.com/image/fetch/$s_!kmNp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1b5b02c-8b31-4174-bc79-6faf8c10a463_581x457.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li></ol><p>And that&#8217;s all! Now you don&#8217;t have to worry about attachment clipping as you can see here:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jerm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7fbfdb7-e2c3-4f47-91c5-8fbf3321dee0_724x437.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jerm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7fbfdb7-e2c3-4f47-91c5-8fbf3321dee0_724x437.png 424w, https://substackcdn.com/image/fetch/$s_!jerm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7fbfdb7-e2c3-4f47-91c5-8fbf3321dee0_724x437.png 848w, https://substackcdn.com/image/fetch/$s_!jerm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7fbfdb7-e2c3-4f47-91c5-8fbf3321dee0_724x437.png 1272w, https://substackcdn.com/image/fetch/$s_!jerm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7fbfdb7-e2c3-4f47-91c5-8fbf3321dee0_724x437.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jerm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7fbfdb7-e2c3-4f47-91c5-8fbf3321dee0_724x437.png" width="724" height="437" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e7fbfdb7-e2c3-4f47-91c5-8fbf3321dee0_724x437.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:437,&quot;width&quot;:724,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:209944,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/191999888?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7fbfdb7-e2c3-4f47-91c5-8fbf3321dee0_724x437.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jerm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7fbfdb7-e2c3-4f47-91c5-8fbf3321dee0_724x437.png 424w, https://substackcdn.com/image/fetch/$s_!jerm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7fbfdb7-e2c3-4f47-91c5-8fbf3321dee0_724x437.png 848w, https://substackcdn.com/image/fetch/$s_!jerm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7fbfdb7-e2c3-4f47-91c5-8fbf3321dee0_724x437.png 1272w, https://substackcdn.com/image/fetch/$s_!jerm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7fbfdb7-e2c3-4f47-91c5-8fbf3321dee0_724x437.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Quick Godot Tips</strong></h2><p>Here are some general tips suitable for all experience levels.</p><h3>External Code Editors for Godot</h3><p>The built-in code editor in Godot is great for writing GDScript, but there are several external editors you can use that are helpful if you want great C# and VIM motion support. Check out <a href="https://www.jetbrains.com/rider/">JetBrains Rider</a> and Visual Studio Code with the <a href="https://marketplace.visualstudio.com/items?itemName=geequlim.godot-tools">godot-tools</a> extension. If you prefer another editor, check the <a href="https://docs.godotengine.org/en/stable/tutorials/editor/external_editor.html">external editor docs</a> to learn how to integrate with it.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6JT8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a3d3ed2-16cf-4f24-a1a9-b389d3ce1554_624x205.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6JT8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a3d3ed2-16cf-4f24-a1a9-b389d3ce1554_624x205.png 424w, https://substackcdn.com/image/fetch/$s_!6JT8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a3d3ed2-16cf-4f24-a1a9-b389d3ce1554_624x205.png 848w, https://substackcdn.com/image/fetch/$s_!6JT8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a3d3ed2-16cf-4f24-a1a9-b389d3ce1554_624x205.png 1272w, https://substackcdn.com/image/fetch/$s_!6JT8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a3d3ed2-16cf-4f24-a1a9-b389d3ce1554_624x205.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6JT8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a3d3ed2-16cf-4f24-a1a9-b389d3ce1554_624x205.png" width="624" height="205" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a3d3ed2-16cf-4f24-a1a9-b389d3ce1554_624x205.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:205,&quot;width&quot;:624,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:23907,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/191999888?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a3d3ed2-16cf-4f24-a1a9-b389d3ce1554_624x205.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6JT8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a3d3ed2-16cf-4f24-a1a9-b389d3ce1554_624x205.png 424w, https://substackcdn.com/image/fetch/$s_!6JT8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a3d3ed2-16cf-4f24-a1a9-b389d3ce1554_624x205.png 848w, https://substackcdn.com/image/fetch/$s_!6JT8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a3d3ed2-16cf-4f24-a1a9-b389d3ce1554_624x205.png 1272w, https://substackcdn.com/image/fetch/$s_!6JT8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a3d3ed2-16cf-4f24-a1a9-b389d3ce1554_624x205.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3>Global Services with Autoloads</h3><p>If you find yourself trying to reference a particular node script across your project, consider making a global service that can be referenced anywhere in your project using <a href="https://docs.godotengine.org/en/stable/tutorials/scripting/singletons_autoload.html">Autoloads in Godot</a>. This could be used for your <em>save</em> and <em>settings</em> service or audio manager, for example.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RhwF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91c6db64-d617-441a-b110-da54edb900ae_624x345.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RhwF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91c6db64-d617-441a-b110-da54edb900ae_624x345.png 424w, https://substackcdn.com/image/fetch/$s_!RhwF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91c6db64-d617-441a-b110-da54edb900ae_624x345.png 848w, https://substackcdn.com/image/fetch/$s_!RhwF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91c6db64-d617-441a-b110-da54edb900ae_624x345.png 1272w, https://substackcdn.com/image/fetch/$s_!RhwF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91c6db64-d617-441a-b110-da54edb900ae_624x345.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RhwF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91c6db64-d617-441a-b110-da54edb900ae_624x345.png" width="624" height="345" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/91c6db64-d617-441a-b110-da54edb900ae_624x345.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:345,&quot;width&quot;:624,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:56049,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/191999888?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91c6db64-d617-441a-b110-da54edb900ae_624x345.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RhwF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91c6db64-d617-441a-b110-da54edb900ae_624x345.png 424w, https://substackcdn.com/image/fetch/$s_!RhwF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91c6db64-d617-441a-b110-da54edb900ae_624x345.png 848w, https://substackcdn.com/image/fetch/$s_!RhwF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91c6db64-d617-441a-b110-da54edb900ae_624x345.png 1272w, https://substackcdn.com/image/fetch/$s_!RhwF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F91c6db64-d617-441a-b110-da54edb900ae_624x345.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Debugging via Remote Scene Tree</h3><p>If you&#8217;re familiar with Unity or Unreal, you might be missing the ability to easily see all of the node properties at runtime. Fear not, this is possible in Godot by referencing the <strong>Remote Scene Tree</strong>! Simply run your game and navigate to the <strong>Remote</strong> tab under <strong>Scene</strong>, and click on any node to view and modify its runtime values.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XhN2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73254937-aaf3-4b5d-a053-76711c72cb10_624x438.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XhN2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73254937-aaf3-4b5d-a053-76711c72cb10_624x438.png 424w, https://substackcdn.com/image/fetch/$s_!XhN2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73254937-aaf3-4b5d-a053-76711c72cb10_624x438.png 848w, https://substackcdn.com/image/fetch/$s_!XhN2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73254937-aaf3-4b5d-a053-76711c72cb10_624x438.png 1272w, https://substackcdn.com/image/fetch/$s_!XhN2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73254937-aaf3-4b5d-a053-76711c72cb10_624x438.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XhN2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73254937-aaf3-4b5d-a053-76711c72cb10_624x438.png" width="624" height="438" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/73254937-aaf3-4b5d-a053-76711c72cb10_624x438.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:438,&quot;width&quot;:624,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:203871,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/191999888?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73254937-aaf3-4b5d-a053-76711c72cb10_624x438.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XhN2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73254937-aaf3-4b5d-a053-76711c72cb10_624x438.png 424w, https://substackcdn.com/image/fetch/$s_!XhN2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73254937-aaf3-4b5d-a053-76711c72cb10_624x438.png 848w, https://substackcdn.com/image/fetch/$s_!XhN2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73254937-aaf3-4b5d-a053-76711c72cb10_624x438.png 1272w, https://substackcdn.com/image/fetch/$s_!XhN2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73254937-aaf3-4b5d-a053-76711c72cb10_624x438.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Managing Multiple Godot Versions via Terminal</h3><p>Did you know you can manage multiple versions of Godot on Windows, macOS, and Linux via the terminal? Well, it&#8217;s possible with the open source tool GodotEnv by <strong>Chickensoft Games</strong>! Once it&#8217;s installed as a global .NET tool, you can use commands like <code>godotenv godot install 4.5</code> and get Godot without even opening a browser. (disclaimer: I&#8217;m a contributor)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9Bl3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8e5cbb9-2332-4cd8-8b47-f127de63db44_624x371.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9Bl3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8e5cbb9-2332-4cd8-8b47-f127de63db44_624x371.png 424w, https://substackcdn.com/image/fetch/$s_!9Bl3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8e5cbb9-2332-4cd8-8b47-f127de63db44_624x371.png 848w, https://substackcdn.com/image/fetch/$s_!9Bl3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8e5cbb9-2332-4cd8-8b47-f127de63db44_624x371.png 1272w, https://substackcdn.com/image/fetch/$s_!9Bl3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8e5cbb9-2332-4cd8-8b47-f127de63db44_624x371.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9Bl3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8e5cbb9-2332-4cd8-8b47-f127de63db44_624x371.png" width="624" height="371" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8e5cbb9-2332-4cd8-8b47-f127de63db44_624x371.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:371,&quot;width&quot;:624,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:77890,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/191999888?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8e5cbb9-2332-4cd8-8b47-f127de63db44_624x371.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9Bl3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8e5cbb9-2332-4cd8-8b47-f127de63db44_624x371.png 424w, https://substackcdn.com/image/fetch/$s_!9Bl3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8e5cbb9-2332-4cd8-8b47-f127de63db44_624x371.png 848w, https://substackcdn.com/image/fetch/$s_!9Bl3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8e5cbb9-2332-4cd8-8b47-f127de63db44_624x371.png 1272w, https://substackcdn.com/image/fetch/$s_!9Bl3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8e5cbb9-2332-4cd8-8b47-f127de63db44_624x371.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Debugging Collision Shapes Visually</h3><p>If you find yourself debugging issues that seem to be related to collisions, it&#8217;s good to know that Godot has a debug feature that will make collision shapes visible while running the game. In the menu, go to <strong>Debug -&gt; Visible Collision Shapes</strong>.</p><p>I hope you found this helpful. Take care and stay awesome!</p><div><hr></div><h2>About the Author</h2><p><strong>Justin Horner</strong> built his first game engine in high school and <em>never</em> stopped. He is a programmer, UI/UX designer, and educator who has shipped VR experiences and tools at Meta Reality Labs. Outside of game development, he is also a songwriter and a rock/metal guitarist. You can connect with him on <a href="https://www.x.com/justinhhorner">X</a>, and <a href="https://www.linkedin.com/in/justinhhorner/">LinkedIn</a>.</p><div><hr></div><h1>Top Dev Headlines (March 2026)</h1><ul><li><p><strong><a href="https://www.gamesindustry.biz/epic-games-lays-off-over-1000-employees-following-downturn-in-fortnite-engagement">Epic Games lays off over 1,000 employees amid Fortnite slowdown</a>: <a href="https://www.epicgames.com/site/en-US/home">Epic Games</a></strong> has cut more than <a href="https://www.gamesindustry.biz/epic-games-lays-off-over-1000-employees-following-downturn-in-fortnite-engagement">1,000 jobs</a> following a decline in <a href="https://store.epicgames.com/en-US/p/fortnite">Fortnite</a> engagement. The move reflects broader industry pressure to reduce costs and refocus on core revenue drivers, as studios adjust to shifting player behavior and post-pandemic market conditions. Check out a <strong><a href="https://landing.packtpub.com/gaming-jobs-in-usa-and-canada/">list of 150+ active game industry roles</a></strong> across 50+ companies in the US and Canada that we curated for you to download: <a href="https://landing.packtpub.com/gaming-jobs-in-usa-and-canada/">Click Here to Download Active Gaming Jobs List - March 2026</a> </p></li><li><p><strong><a href="https://www.gamespress.com/en-US/UK-games-dev-sector-suffers-sharpest-recorded-decline-as-TIGA-calls-on">UK games industry sees sharpest recorded decline, warns TIGA</a>: </strong>The UK games development sector has experienced its steepest recorded downturn, according to <a href="https://tiga.org/">TIGA</a>. The report highlights falling investment, studio closures, and job losses, with calls for stronger government support to stabilize growth and maintain the <a href="https://www.gamespress.com/en-US/UK-games-dev-sector-suffers-sharpest-recorded-decline-as-TIGA-calls-on">UK&#8217;s global competitiveness</a>.</p></li><li><p><strong><a href="https://www.gamesindustry.biz/the-dlss-5-backlash-is-not-going-away-opinion">Nvidia faces backlash as AI focus sparks concerns over gaming priorities</a>: </strong>Nvidia is facing growing criticism from both developers and players, with concerns that its strategic shift toward <a href="https://en.wikipedia.org/wiki/Artificial_intelligence">AI</a> has come at the expense of its gaming ecosystem. Critics argue that this shift is <a href="https://www.gamesindustry.biz/the-dlss-5-backlash-is-not-going-away-opinion">impacting performance expectations, tooling priorities, and overall trust in Nvidia&#8217;s long-standing gaming focus</a>.</p></li><li><p><strong><a href="https://wnhub.io/news/Generative_AI/item-50403">Capcom commits to avoiding generative AI assets in its games</a>: </strong><a href="https://www.capcom.com/">Capcom</a> has announced it will refrain from incorporating <a href="https://wnhub.io/news/Generative_AI/item-50403">generative AI-created assets</a> into its video games. The decision reflects ongoing industry concerns around authorship, quality control, and the role of AI in creative production pipelines.</p></li><li><p><strong><a href="https://www.gamesindustry.biz/roblox-insists-plans-to-start-charging-creators-for-brand-integrations-is-not-about-revenue-at-all">Roblox to charge creators for brand integrations, says move isn&#8217;t revenue-driven</a>: </strong><a href="https://www.roblox.com/">Roblox</a> has confirmed plans to begin charging creators for brand integrations, positioning the change as a way to improve ecosystem quality rather than generate revenue. The move has sparked discussion among developers about <a href="https://www.gamesindustry.biz/roblox-insists-plans-to-start-charging-creators-for-brand-integrations-is-not-about-revenue-at-all">platform fees, monetization control, and long-term creator incentives.</a></p></li></ul><h1>Upcoming Game Events</h1><ul><li><p><strong><a href="https://east.paxsite.com/">PAX East 2026 (Boston, MA, USA) </a></strong><em><strong><a href="https://east.paxsite.com/">&#8211; Mar 26&#8211;29</a></strong></em><strong>: </strong>One of the largest gaming festivals in North America, featuring major publisher showcases, indie demos, panels with industry leaders, and hands-on playtests. It&#8217;s a key event for developers looking to showcase upcoming titles and connect directly with players and press.</p></li><li><p><strong><a href="https://dreamhack.com/birmingham/">DreamHack Birmingham 2026 (Birmingham, England, UK) </a></strong><em><strong><a href="https://dreamhack.com/birmingham/">&#8211; Mar 27&#8211;29</a></strong></em><strong>: </strong>A large-scale gaming and esports festival combining competitive tournaments, LAN parties, creator meetups, and live entertainment. The event also includes indie showcases and community-driven experiences for developers and players alike.</p></li><li><p><strong><a href="https://rebootdevelop.com/">Reboot Develop Blue 2026 (Dubrovnik, Croatia) </a></strong><em><strong><a href="https://rebootdevelop.com/">&#8211; Mar 31&#8211;Apr 2</a></strong></em><strong>: </strong>A premium industry-focused conference bringing together AAA and indie developers for deep-dive talks, networking, and business discussions. Known for its high-level speakers and relaxed setting, it&#8217;s a key event for senior developers and studio leaders.</p></li><li><p><strong><a href="https://games.london/">London Games Festival 2026 (London, UK) </a></strong><em><strong><a href="https://games.london/">&#8211; Apr 2&#8211;13</a></strong></em><strong>: </strong>A city-wide celebration of games featuring exhibitions, talks, awards, and networking events. It brings together developers, publishers, and players, with a strong focus on the UK games industry and emerging talent.</p></li><li><p><strong><a href="https://www.bafta.org/awards/games/">BAFTA Games Awards 2026 (London, UK) </a></strong><em><strong><a href="https://www.bafta.org/awards/games/">&#8211; Apr 9</a></strong></em><strong>: </strong>One of the most prestigious award ceremonies in the industry, recognizing excellence in game design, storytelling, art, and technical achievement. The event highlights standout titles and talent across the global games ecosystem.</p></li></ul><h1>Tool of the Week: RenderDoc</h1><p>3D content is at the heart of most games, but building, iterating, and optimizing assets can quickly become a bottleneck if your tools slow you down. That&#8217;s where <strong><a href="https://www.blender.org/">Blender</a></strong> stands out. It&#8217;s a fully featured, open-source <a href="https://en.wikipedia.org/wiki/3D_computer_graphics_software">3D</a> creation suite that lets you handle <a href="https://docs.blender.org/manual/en/latest/modeling/index.html">modeling</a>, <a href="https://docs.blender.org/manual/en/latest/sculpt_paint/sculpting/index.html">sculpting</a>, <a href="https://docs.blender.org/manual/en/latest/modeling/meshes/uv/index.html">UVs</a>, <a href="https://docs.blender.org/manual/en/latest/animation/index.html">animation</a>, and even basic VFX&#8212;all in one place.</p><p>What makes <a href="https://www.blender.org/">Blender</a> especially powerful for game dev is how fast you can iterate. Need to block out a level? Prototype a character? Fix topology before export? You can do it all without jumping between tools. Its real-time viewport, non-destructive workflows, and growing ecosystem of plugins make it incredibly flexible for both indie teams and larger pipelines.</p><p>It also plays nicely with engines like <a href="https://unity.com/">Unity</a> and <a href="https://www.unrealengine.com/en-US">Unreal</a>, which means you can move from idea to in-engine asset quickly. And because it&#8217;s free, it removes a major barrier for new developers while still being powerful enough for production work.</p><p>Whether you&#8217;re prototyping or shipping, Blender gives you a fast, reliable way to turn ideas into usable game assets, and that kind of speed is hard to beat. &#127912;&#128640;</p><h1>Game Dev Jobs Board</h1><ul><li><p><strong><a href="https://jaabz.com/jobs/186062-game-developer-a-remote?utm_campaign=google_jobs_apply&amp;utm_source=google_jobs_apply&amp;utm_medium=organic">Game Developer &#8211; A.Team:</a> </strong>A fully remote role focused on building and shipping high-quality games across mobile and web platforms. The position involves working on gameplay systems, collaborating with cross-functional teams, and contributing to end-to-end development in a fast-paced, distributed environment. </p></li><li><p><strong><a href="https://talents.studysmarter.co.uk/companies/pearson-carter/remote-frontend-game-developer-build-html5-slot-games-24266577/?utm_campaign=google_jobs_apply&amp;utm_source=google_jobs_apply&amp;utm_medium=organic">Frontend Game Developer (HTML5) &#8211; Pearson Carter</a>: </strong>A fully remote role focused on building HTML5 slot games, working on frontend systems, animations, and interactive gameplay features. The position involves developing browser-based game experiences, optimizing performance, and collaborating with designers and backend teams.</p></li><li><p><strong><a href="https://laborx.com/jobs/web3-based-rpg-game-development-102178?utm_campaign=google_jobs_apply&amp;utm_source=google_jobs_apply&amp;utm_medium=organic">Web3 RPG Game Developer &#8211; LaborX</a>: </strong>A remote role focused on developing a Web3-based RPG, involving gameplay systems, blockchain integration, and smart contract interactions. The position requires building core game mechanics while integrating decentralized features such as in-game assets and economies. </p></li><li><p><strong><a href="https://qualitycontracts.co.uk/contract-jobs/remote-ios-android-game-developer-solar2d-engine-150-hr-remote-in-remote-or-hybrid-1773576562?utm_campaign=google_jobs_apply&amp;utm_source=google_jobs_apply&amp;utm_medium=organic">OS/Android Game Developer (Solar2D) &#8211; Contract</a>: </strong>A remote contract role focused on developing mobile games using the Solar2D engine. The position involves building gameplay features, optimizing performance across devices, and delivering production-ready code for iOS and Android platforms. </p></li></ul><h1>Closing &#8211; Until Next Week</h1><p>Sometimes the best fix isn&#8217;t another workaround. It&#8217;s just <em>not fighting the problem in the first place. </em>That&#8217;s really what this issue gets at. Instead of stacking hacks to deal with clipping, Justin just changes how things are rendered and the issue disappears. No over-engineering, no fragile fixes. Just using the engine in a smarter way.</p><p>It&#8217;s a good reminder of when something feels messy to solve, it might be worth asking if you&#8217;re solving the <em>right version</em> of the problem.</p><p>If this got you thinking about cleaner ways to handle stuff in your own project, send it to your team. Or that one dev who keeps adding &#8220;temporary&#8221; fixes that somehow live forever. And if you&#8217;re into practical tips like this, the kind that actually save you time and headaches, stick around because we have a lot more coming up. </p><p>More real solutions. Less duct tape.<em> See you in the next issue! </em></p><p>Warm Regards,</p><p>Game Dev Assembly Team</p><div class="pullquote"><p><strong>Advertise with us</strong><br>Interested in sponsoring this newsletter and reaching a highly engaged audience of tech professionals? Simply email us and our team will get in touch with next steps.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;mailto:gamedevassembly@packt.com&quot;,&quot;text&quot;:&quot;Email&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="mailto:gamedevassembly@packt.com"><span>Email</span></a></p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://gamedevnewsletter.substack.com/survey/6572072?token=&quot;,&quot;text&quot;:&quot;Your feedback matters. Please take this quick survey.&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://gamedevnewsletter.substack.com/survey/6572072?token="><span>Your feedback matters. Please take this quick survey.</span></a></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gamedevnewsletter.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Why True Randomness Is Your Player’s Worst Enemy]]></title><description><![CDATA[Through a real development story and lessons from his puzzle shooter project, Meer Balaj explores how great games balance chaos with control.]]></description><link>https://gamedevnewsletter.substack.com/p/why-true-randomness-is-your-players</link><guid isPermaLink="false">https://gamedevnewsletter.substack.com/p/why-true-randomness-is-your-players</guid><dc:creator><![CDATA[Game Dev Assembly Editors]]></dc:creator><pubDate>Mon, 09 Mar 2026 21:18:29 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6ce5033b-f6cf-47cb-a866-fe9861395d64_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Editor&#8217;s Note</h2><p>Hello lovely people, how are y&#8217;all doing? We&#8217;re stepping into a new week with a scoop of Game Dev Assembly! &#128640; </p><p>In this issue, <strong><a href="https://www.linkedin.com/in/meerbalaj/">Meer Balaj</a></strong> takes us behind the curtain of a deceptively tricky design problem. It&#8217;s the moment when a perfectly logical system suddenly feels broken during playtesting. Through a real development story and lessons from his puzzle shooter project, he explores how great games balance <strong>chaos with control</strong>. </p><p>You&#8217;re about to find out that the best randomness in games often isn&#8217;t truly random at all! </p><p>Let&#8217;s dive in and also find out what March has in store for you across the game dev world.&#127918;</p><div><hr></div><h4>Table of Contents</h4><ol><li><p><a href="https://gamedevnewsletter.substack.com/i/190025259/the-beginning">The Beginning</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/190025259/the-illusion-of-fairness">The Illusion of Fairness</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/190025259/beyond-the-dice-roll-calculated-design">Beyond the Dice Roll: Calculated Design</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/190025259/solving-the-deadlock-in-thisisblast">Solving the Deadlock in </a><em><a href="https://gamedevnewsletter.substack.com/i/190025259/solving-the-deadlock-in-thisisblast">ThisIsBlast</a></em></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/190025259/the-solution-weighted-spawning">The Solution: Weighted Spawning</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/190025259/the-secret-sauce-variety-via-mystery">The Secret Sauce: Variety via Mystery</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/190025259/balancing-the-scales">Balancing the Scales</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/190025259/about-the-author">About the Author</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/190025259/top-dev-headlines-march-2026">Top Dev Headlines (March 2026)</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/190025259/upcoming-game-events">Upcoming Game Events</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/190025259/tool-of-the-week-renderdoc">Tool of the Week</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/190025259/quick-dev-tips">Quick Dev Tips</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/190025259/game-dev-jobs-board">Game Devs Job Board</a></p></li></ol><div><hr></div><h2>The Beginning</h2><p>I&#8217;ll never forget a particular playtest during the early development of a puzzle game I was working on. The mechanics were simple: <em>match colored blocks to clear them</em>. To keep things fresh, I used a standard random number generator to shuffle the upcoming pieces. It was &#8220;fair&#8221; in the mathematical sense because every color had an equal chance of appearing.</p><p>Then it <em>happened</em>.</p><p>One playtester sat staring at the screen for three minutes, unable to make a single move. <em>Why?</em> Because the &#8220;fair&#8221; RNG had decided to spawn ten blue blocks in a row when they desperately needed a single red one to clear the bottom row. The game was <em>mathematically</em> perfect, but to the player, it felt <em>broken</em>. It felt <strong>unfair</strong>.</p><p>That moment taught me a lesson that every game developer eventually learns, and that is that <strong>true randomness</strong> is often the <em>enemy</em> of good design.</p><div class="pullquote"><p><em><strong>True randomness is often the enemy of good design.</strong></em></p></div><h2><strong>The Illusion of Fairness</strong></h2><p>Humans are notoriously bad at perceiving true randomness. If you ask someone to write down a random sequence of heads and tails, they will rarely write &#8220;heads&#8221; four times in a row, even though that&#8217;s perfectly common in a real coin toss. We expect variety. We expect balance.</p><p>When a game gives us true, raw randomness, we see patterns where there are none, or we perceive <em>bad luck</em> as a personal vendetta from the game engine.</p><p>In game design, we have to distinguish between <strong>mathematical randomness</strong> and <strong>psychological randomness</strong>.</p><p>Mathematical randomness is pure. It&#8217;s <strong>Random.Range(0, 5)</strong>. It doesn&#8217;t care what happened five seconds ago, and it doesn&#8217;t care if the player is about to lose.</p><p>Psychological randomness, however, is what the player expects to happen. If I haven&#8217;t seen a &#8220;critical hit&#8221; in ten swings, I expect one to be coming soon. If I&#8217;ve been stuck on a difficult level for twenty minutes, I expect a &#8220;power-up&#8221; to drop.</p><p>When the gap between these two types of randomness becomes too large, player frustration sets in. This is where <strong>calculated design</strong> steps in to bridge the divide.</p><h2><strong>Beyond the Dice Roll: Calculated Design</strong></h2><p>Calculated design is about curating it randomness, and not removing it. It&#8217;s the <em>weighted</em> die, the <em>pity timer</em>, and the <em>shuffle</em> logic that ensures the experience stays within the bounds of what feels fair.</p><p>Think of it like a music playlist. If you set a 1,000-song library to true randomness, you might hear the same artist five times in a row, which is mathematically possible, but it&#8217;s going to be frustrating for the listener.</p><p>A <em>smart</em> shuffle ensures the system cycles through different artists and genres before repeating. It&#8217;s still unpredictable, but it&#8217;s curated to feel like a better experience. This shift, which is from pure chaos to intentional flow, is the first step toward a more calculated and satisfying game.</p><h2><strong>Solving the Deadlock in </strong><em><strong>ThisIsBlast</strong></em></h2><p>In my latest project, a shooter-based puzzle game called <strong>ThisIsBlast</strong>, I faced a classic randomness dilemma. The player controls a shooter that fires colored blocks at a grid. To clear a path and win the level, the player must shoot blocks that match colors currently at the bottom of the grid.</p><p>Initially, I used a simple shuffle for the upcoming shooter queue. It seemed fair as every color the player needed was in the pool. But playtesting revealed a frustrating <em>deadlock</em> scenario.</p><p>If the player was looking at a bottom row of Red and Green blocks, but the random queue gave them five Yellow blocks in a row, they were stuck. They didn&#8217;t have enough &#8220;slots&#8221; to hold the Yellow blocks, and the game would end simply because the dice rolled poorly.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7d--!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44973685-3ad3-4fc3-9790-63459fd19d72_473x843.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7d--!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44973685-3ad3-4fc3-9790-63459fd19d72_473x843.png 424w, https://substackcdn.com/image/fetch/$s_!7d--!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44973685-3ad3-4fc3-9790-63459fd19d72_473x843.png 848w, https://substackcdn.com/image/fetch/$s_!7d--!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44973685-3ad3-4fc3-9790-63459fd19d72_473x843.png 1272w, https://substackcdn.com/image/fetch/$s_!7d--!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44973685-3ad3-4fc3-9790-63459fd19d72_473x843.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7d--!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44973685-3ad3-4fc3-9790-63459fd19d72_473x843.png" width="473" height="843" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/44973685-3ad3-4fc3-9790-63459fd19d72_473x843.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:843,&quot;width&quot;:473,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:162349,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/190025259?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44973685-3ad3-4fc3-9790-63459fd19d72_473x843.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7d--!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44973685-3ad3-4fc3-9790-63459fd19d72_473x843.png 424w, https://substackcdn.com/image/fetch/$s_!7d--!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44973685-3ad3-4fc3-9790-63459fd19d72_473x843.png 848w, https://substackcdn.com/image/fetch/$s_!7d--!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44973685-3ad3-4fc3-9790-63459fd19d72_473x843.png 1272w, https://substackcdn.com/image/fetch/$s_!7d--!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44973685-3ad3-4fc3-9790-63459fd19d72_473x843.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Figure 1: A Deadlocked board scenario &#8212; how pure mathematical randomness can feel broken to a player</em></figcaption></figure></div><h2><strong>The Solution: Weighted Spawning</strong></h2><p>Instead of just shuffling the colors, I wrote a system that scans the current state of the grid before every spawn. It asks three critical questions:</p><ol><li><p>Which colors are currently at the bottom of the grid?</p></li><li><p>Which of those colors does the player need now to make progress?</p></li><li><p>How many of those colors are already in the player&#8217;s queue?</p></li></ol><p>By weighting the spawn probability toward the colors at the bottom of the grid, I ensured that the player almost always has a path forward.</p><p>We still shuffle the colors, but we shuffle within tiers. Tier 1 contains the Priority Colors, which are the ones that will actually clear blocks. Tier 2 contains the Future Colors, which are the ones that will be needed soon but aren&#8217;t urgent.</p><p><em>The result?</em> The game feels more skill-based even though there&#8217;s still significant randomness involved. The player doesn&#8217;t see the complex math behind the scenes; they just feel like the game is tough but fair.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Jb8Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F954716a8-8577-4240-9965-21770cbe34d2_474x842.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Jb8Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F954716a8-8577-4240-9965-21770cbe34d2_474x842.png 424w, https://substackcdn.com/image/fetch/$s_!Jb8Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F954716a8-8577-4240-9965-21770cbe34d2_474x842.png 848w, https://substackcdn.com/image/fetch/$s_!Jb8Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F954716a8-8577-4240-9965-21770cbe34d2_474x842.png 1272w, https://substackcdn.com/image/fetch/$s_!Jb8Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F954716a8-8577-4240-9965-21770cbe34d2_474x842.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Jb8Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F954716a8-8577-4240-9965-21770cbe34d2_474x842.png" width="474" height="842" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/954716a8-8577-4240-9965-21770cbe34d2_474x842.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:842,&quot;width&quot;:474,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:167702,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/190025259?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F954716a8-8577-4240-9965-21770cbe34d2_474x842.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Jb8Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F954716a8-8577-4240-9965-21770cbe34d2_474x842.png 424w, https://substackcdn.com/image/fetch/$s_!Jb8Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F954716a8-8577-4240-9965-21770cbe34d2_474x842.png 848w, https://substackcdn.com/image/fetch/$s_!Jb8Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F954716a8-8577-4240-9965-21770cbe34d2_474x842.png 1272w, https://substackcdn.com/image/fetch/$s_!Jb8Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F954716a8-8577-4240-9965-21770cbe34d2_474x842.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Figure 2: Calculated Design in action &#8212; ensuring a solvable path</em></figcaption></figure></div><h2><strong>The Secret Sauce: Variety via Mystery</strong></h2><p>Of course, if you make a game too predictable, it becomes boring. To counter the high predictability of weighted spawning, I introduced a <strong>mystery mechanic</strong>. Some items in the queue are hidden until they reach the front line.</p><p>This creates tension. The player knows the game is helping them by giving them what they need, but the mystery elements hide the exact order, forcing adaptation on the fly. It&#8217;s the perfect marriage of control and chaos.</p><h2><strong>Balancing the Scales</strong></h2><p>If you&#8217;re looking to implement more calculated design in your own projects, consider the following principles:</p><ul><li><p>Analyze, then randomize. Make your RNG aware of the player state. </p></li><li><p>Implement a pity counter to prevent extended failure streaks. </p></li><li><p>Use deck systems instead of pure percentage rolls. </p></li><li><p>Visualize your distributions over thousands of simulations. </p></li><li><p>And finally, add salt to taste. Too little calculation feels frustrating, too much feels rigged.</p></li></ul><p>In the end, game development isn&#8217;t about being a mathematician; it&#8217;s about being a <em>magician</em>. We use randomness to create excitement and variety, but we use calculated design to ensure the trick never fails.</p><p>By understanding player psychology, we can build worlds that feel infinitely deep, yet always within reach.</p><div><hr></div><h2>About the Author</h2><p><strong><a href="https://www.linkedin.com/in/meerbalaj/">Meer Balaj</a></strong> is a game developer from Pakistan with over three years of experience building games across mobile, WebGL, AR, VR, and PC platforms. His journey into the industry began at Pakistan&#8217;s largest game jam, <strong>Mindstorm Studios&#8217; Game Jam</strong>, where he won the <em>Best Mechanics</em> award and was later selected among a small group of participants nationwide for an internship opportunity.</p><p>Since then, he has shipped multiple titles in the casual, hypercasual, and educational spaces, working with international clients and teams. As a developer, his goal is to create games that go beyond pure entertainment and leave a lasting impact on players and communities, which is why many of his projects integrate elements of learning within the gameplay experience. You can find out about his latest projects here: https://meerbalaj.site/</p><div><hr></div><h2>Top Dev Headlines (March 2026)</h2><ul><li><p><strong><a href="https://www.pcgamer.com/gaming-industry/the-next-xbox-is-codenamed-project-helix-and-it-will-play-your-xbox-and-pc-games/">Microsoft teases next-gen Xbox &#8220;Project Helix&#8221;</a>: </strong>Microsoft has confirmed early details of its next console, codenamed <strong><a href="https://www.pcgamer.com/gaming-industry/the-next-xbox-is-codenamed-project-helix-and-it-will-play-your-xbox-and-pc-games/">Project Helix</a></strong>, aimed at blurring the line between Xbox and PC. The company says the platform will deliver <a href="https://www.pcgamer.com/gaming-industry/the-next-xbox-is-codenamed-project-helix-and-it-will-play-your-xbox-and-pc-games/">stronger performance for next-gen games while deepening integration between the two ecosystems</a>, which is another step toward a unified development and play experience.</p></li><li><p><strong><a href="https://markets.ft.com/data/announce/detail?dockey=600-202603040900BIZWIRE_USPRX____20260304_BW161098-1">Skillz launches Pro SDK for competitive mobile games</a>: </strong>Skillz unveiled a new <strong><a href="https://markets.ft.com/data/announce/detail?dockey=600-202603040900BIZWIRE_USPRX____20260304_BW161098-1">Pro SDK</a></strong><a href="https://markets.ft.com/data/announce/detail?dockey=600-202603040900BIZWIRE_USPRX____20260304_BW161098-1"> at GDC 2026</a> designed to give developers deeper control over competitive multiplayer and monetization. The toolkit streamlines real-money tournaments, matchmaking, and scalable competition systems for mobile games.</p></li><li><p><strong><a href="https://games.gg/news/gdc-2026-biggest-gaming-trends/">GDC 2026 spotlights indie discoverability crisis</a>: </strong>With thousands of games launching on storefronts every month, indie developers are struggling to stand out. At <a href="https://games.gg/news/gdc-2026-biggest-gaming-trends/">GDC 2026</a>, sessions are focusing on new strategies, from <a href="https://games.gg/news/gdc-2026-biggest-gaming-trends/">community-driven marketing</a> to <a href="https://games.gg/news/gdc-2026-biggest-gaming-trends/">alternative storefronts</a>, to help smaller teams cut through the noise.</p></li><li><p><strong>Embark to break down <a href="https://gdc.einnews.com/">ARC Raiders reboot at GDC</a>: </strong>Embark Studios will showcase how it rebooted its upcoming shooter <strong>ARC Raiders</strong>, offering a behind-the-scenes look at resetting a AAA project mid-development. The studio will also discuss its evolving production pipeline, including new AI-assisted workflows.</p></li><li><p><strong><a href="https://www.gamedeveloper.com/latest-news">AAA veterans form new indie studio</a>: </strong>Veteran developers from <a href="https://en.wikipedia.org/wiki/Radical_Entertainment">Radical Entertainment</a> and <a href="https://en.wikipedia.org/wiki/Hothead_Games">Hothead Games</a> have launched a new independent studio, continuing the industry trend of experienced talent leaving major publishers for smaller, creator-driven teams.</p></li></ul><h2>Upcoming Game Events</h2><ul><li><p><strong><a href="https://www.futuregamesshow.com/">Future Games Show Spring Showcase (Online)</a> &#8211; </strong><em><strong>Mar 12</strong></em><strong>:</strong> A global digital showcase featuring world premieres, trailers, and developer interviews for upcoming titles. The show is known for revealing new gameplay and giving studios a platform to spotlight their latest projects to millions of viewers worldwide.</p></li><li><p><strong><a href="https://expofp.com/phoenix-convention-center/game-on">Game On Expo 2026 (Phoenix, AZ, USA) &#8211; </a></strong><em><strong><a href="https://expofp.com/phoenix-convention-center/game-on">Mar 13-15</a></strong></em><strong>:</strong> A major gaming convention blending retro and modern gaming culture with tournaments, cosplay, live music, and indie developer showcases. The event attracts thousands of gamers and creators looking to celebrate gaming history while exploring new titles.</p></li><li><p><strong><a href="https://www.ctinsider.com/things-to-do/article/ct-gamer-anime-con-ct-mohegan-sun-21957354.php?utm_source=chatgpt.com">CT Gamer &amp; Anime Con (Uncasville, CT, USA) &#8211; </a></strong><em><strong><a href="https://www.ctinsider.com/things-to-do/article/ct-gamer-anime-con-ct-mohegan-sun-21957354.php?utm_source=chatgpt.com">Mar 14-15</a></strong></em><strong>:</strong> A community-driven convention bringing together gamers, voice actors, developers, and content creators. Panels, esports tournaments, and industry discussions make it a lively meeting point for both fans and aspiring game developers.</p></li><li><p><strong><a href="https://reverbinc.com/2026-gaming-calendar/?utm_source=chatgpt.com">PAX East 2026 (Boston, MA, USA) &#8211; </a></strong><em><strong><a href="https://reverbinc.com/2026-gaming-calendar/?utm_source=chatgpt.com">Mar 26-29</a></strong></em><strong>:</strong> One of the largest gaming festivals in North America, featuring major publisher showcases, indie game demos, panels with industry leaders, and esports competitions. It&#8217;s a key event for developers looking to showcase upcoming games and connect with the wider gaming community.</p></li><li><p><strong><a href="https://reverbinc.com/2026-gaming-calendar/?">DreamHack Birmingham 2026 (Birmingham, England)</a> &#8211; </strong><em><strong>Mar 27-29</strong></em><strong>:</strong> A massive gaming and esports festival combining competitive tournaments, creator meetups, LAN parties, and live entertainment. The event also hosts qualifiers for major esports competitions and attracts thousands of fans across the UK and Europe.</p></li></ul><h2>Tool of the Week: RenderDoc</h2><p>When something looks wrong on screen, the problem usually isn&#8217;t obvious. A shader behaves strangely, lighting flickers, or a texture just refuses to cooperate, and suddenly you&#8217;re staring at your screen wondering where in the GPU pipeline things went sideways. That&#8217;s where <strong><a href="https://renderdoc.org/">RenderDoc</a></strong> shines. It&#8217;s a powerful graphics debugger that lets you capture a single frame of your game and inspect exactly what the GPU was doing at that moment&#8212;every draw call, shader, texture, and buffer frozen in time. Instead of guessing, you can step through the rendering pipeline, inspect shader inputs, visualize render targets, and replay draw calls one by one to pinpoint the exact moment something breaks. Graphics bugs are notoriously painful to track down, but <a href="https://renderdoc.org/">RenderDoc</a> turns the GPU from a black box into something you can actually interrogate, and once you start using it, you&#8217;ll wonder how you ever debugged rendering issues without it. &#127918;&#9881;&#65039;</p><h2>Quick Dev Tips</h2><ul><li><p><strong>Log Your RNG During Playtests:</strong> When players say the game feels &#8220;unfair,&#8221; don&#8217;t guess. <em>Log</em> it. Record spawn rolls, drops, and probabilities during playtests so you can analyze what actually happened. Many RNG problems only become obvious when you review real gameplay data.</p></li><li><p><strong>Simulate Thousands of Runs:</strong> Before shipping any system that relies on randomness, run large simulations. Thousands of automated runs can reveal edge cases, unwinnable states, or distribution problems that would take weeks of manual testing to uncover.</p></li><li><p><strong>Design for Recovery, Not Just Success:</strong> Even well-balanced systems will occasionally produce bad luck streaks. Good design includes subtle recovery paths such as alternate strategies, secondary mechanics, or small assists that help players regain momentum without making the system feel rigged.</p></li></ul><h2>Game Dev Jobs Board</h2><ul><li><p><strong><a href="https://ingamejob.com/en/job/unity-lead-1">Unity Developer &#8211; Hitapps</a>:</strong> A full-time remote role focused on implementing gameplay mechanics, integrating assets, and building systems in Unity. This position is ideal for developers comfortable with C# and looking to contribute to live game production in a distributed team.</p></li><li><p><strong><a href="https://ingamejob.com/en/job/unity-developer-junior-adult">Unity Developer (Junior / Middle) &#8211; Octo Games Studio</a>:</strong> A remote Unity position working on casual and puzzle-style games. Great for developers looking to gain experience building gameplay systems while collaborating with designers and artists on production features.</p></li><li><p><strong><a href="https://arc.dev/remote-jobs/unity">Senior Unity XR Developer &#8211; Arc.dev Network</a>:</strong> A fully remote senior role focused on building XR and VR experiences in Unity. The position emphasizes performance optimization and immersive gameplay systems for next-generation interactive environments.</p></li><li><p><strong><a href="https://ingamejob.com/en/job/unity-sdk-technical-lead">Unity SDK Technical Lead &#8211; Hypercell Games</a>:</strong> A senior remote leadership role responsible for shaping Unity SDK architecture and internal tooling. This is ideal for experienced engineers who want to influence platform infrastructure and developer workflows.</p></li><li><p><strong><a href="https://www.indeed.com/viewjob?jk=c98fa7907955475a&amp;from=shareddesktop_copy">Unity Software Engineer &#8211; Easy Games</a>:</strong> A remote engineering role working on gameplay systems and large-scale game architecture. The position suits developers who enjoy building robust game systems and collaborating closely with cross-disciplinary teams.</p></li></ul><h2>Build. Publish. Play. In Just 3 Hours.</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sUU3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F563dd456-d8ae-4489-b25a-336498b5b15c_1600x900.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sUU3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F563dd456-d8ae-4489-b25a-336498b5b15c_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!sUU3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F563dd456-d8ae-4489-b25a-336498b5b15c_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!sUU3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F563dd456-d8ae-4489-b25a-336498b5b15c_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!sUU3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F563dd456-d8ae-4489-b25a-336498b5b15c_1600x900.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sUU3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F563dd456-d8ae-4489-b25a-336498b5b15c_1600x900.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/563dd456-d8ae-4489-b25a-336498b5b15c_1600x900.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1653704,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/190025259?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F563dd456-d8ae-4489-b25a-336498b5b15c_1600x900.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sUU3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F563dd456-d8ae-4489-b25a-336498b5b15c_1600x900.png 424w, https://substackcdn.com/image/fetch/$s_!sUU3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F563dd456-d8ae-4489-b25a-336498b5b15c_1600x900.png 848w, https://substackcdn.com/image/fetch/$s_!sUU3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F563dd456-d8ae-4489-b25a-336498b5b15c_1600x900.png 1272w, https://substackcdn.com/image/fetch/$s_!sUU3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F563dd456-d8ae-4489-b25a-336498b5b15c_1600x900.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Ever thought about making your own game but didn&#8217;t know where to start?</p><p>This live, hands-on crash course is designed to take you from zero to a fully playable Roblox game in a single session&#8212;no prior coding experience required.</p><p>You won&#8217;t just watch&#8212;you&#8217;ll build alongside one of the platform&#8217;s top creators. By the end of the workshop, you&#8217;ll have:</p><ul><li><p>&#9989; A playable game you can share with friends (or the world)</p></li><li><p>&#9989; Core scripting skills in Luau</p></li><li><p>&#9989; A reusable project structure for future games</p></li><li><p>&#9989; Practical insight into monetization and scaling your experience</p></li></ul><p>Roblox isn&#8217;t just a game engine&#8212;it&#8217;s a launchpad. With built-in publishing, analytics, and monetization tools, you can move from idea to live product faster than almost anywhere else in game development.</p><p>If you&#8217;ve been waiting for the right moment to start building, this is it.</p><h5>&#128073; <a href="https://www.eventbrite.com/e/ship-your-first-roblox-game-a-3-hour-crash-course-tickets-1982488485427?aff=NL">Reserve your seat and ship your first Roblox game at $65.86 $<s>108.54</s></a></h5><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EP75!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7a1b97e-4def-45ab-b516-d2c30e103357_2160x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EP75!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7a1b97e-4def-45ab-b516-d2c30e103357_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!EP75!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7a1b97e-4def-45ab-b516-d2c30e103357_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!EP75!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7a1b97e-4def-45ab-b516-d2c30e103357_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!EP75!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7a1b97e-4def-45ab-b516-d2c30e103357_2160x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EP75!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7a1b97e-4def-45ab-b516-d2c30e103357_2160x1080.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c7a1b97e-4def-45ab-b516-d2c30e103357_2160x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2532090,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/190025259?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7a1b97e-4def-45ab-b516-d2c30e103357_2160x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EP75!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7a1b97e-4def-45ab-b516-d2c30e103357_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!EP75!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7a1b97e-4def-45ab-b516-d2c30e103357_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!EP75!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7a1b97e-4def-45ab-b516-d2c30e103357_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!EP75!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc7a1b97e-4def-45ab-b516-d2c30e103357_2160x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>Closing &#8211; Until Next Week</h2><p>As we wrap up this issue, we become clear that randomness in games isn&#8217;t really about chance. It&#8217;s about <strong>crafting the experience players </strong><em><strong>feel</strong></em>.</p><p>Meer&#8217;s story reminds us that the systems we build behind the scenes can completely shape how a game feels in the player&#8217;s hands. The difference between <em>frustrating</em> and <em>fair</em> often comes down to small design decisions that players never see but always notice.</p><p>If this issue made you rethink how your game handles RNG, progression, or player momentum, don&#8217;t keep it to yourself. Share it with your team. Drop it in your studio Slack. Send it to the designer who insists the system is &#8220;technically correct.&#8221;</p><p>If you enjoy these deep dives into real game dev problems, make sure you&#8217;re subscribed. We&#8217;ve got more breakdowns, tools, and industry insights coming your way.</p><p>More lessons from the trenches. More practical dev insights. <em>No fluff</em>.</p><p>Forward this to a fellow developer, share it with your community, and if you haven&#8217;t already, hit <strong>subscribe</strong> so you don&#8217;t miss the next issue. &#128640;&#127918;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-wBO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4886bc63-3049-49fb-bf9f-9d1be95ebb55_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-wBO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4886bc63-3049-49fb-bf9f-9d1be95ebb55_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!-wBO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4886bc63-3049-49fb-bf9f-9d1be95ebb55_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!-wBO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4886bc63-3049-49fb-bf9f-9d1be95ebb55_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!-wBO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4886bc63-3049-49fb-bf9f-9d1be95ebb55_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-wBO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4886bc63-3049-49fb-bf9f-9d1be95ebb55_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4886bc63-3049-49fb-bf9f-9d1be95ebb55_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1529227,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/190025259?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4886bc63-3049-49fb-bf9f-9d1be95ebb55_1920x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-wBO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4886bc63-3049-49fb-bf9f-9d1be95ebb55_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!-wBO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4886bc63-3049-49fb-bf9f-9d1be95ebb55_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!-wBO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4886bc63-3049-49fb-bf9f-9d1be95ebb55_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!-wBO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4886bc63-3049-49fb-bf9f-9d1be95ebb55_1920x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Warm Regards,</p><p>Game Dev Assembly Team</p><div class="pullquote"><p>&#128226; Advertise With Us</p><p>Get your brand in front of 2,500+ game developers and creators, with a 45%+ open rate.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;mailto:gamedevnewsletter@packt.com&quot;,&quot;text&quot;:&quot;Get in Touch&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="mailto:gamedevnewsletter@packt.com"><span>Get in Touch</span></a></p></div>]]></content:encoded></item><item><title><![CDATA[Stop the Stutter: Async Asset Loading for Better Game Performance]]></title><description><![CDATA[Async Asset Loading for Better Game Performance]]></description><link>https://gamedevnewsletter.substack.com/p/stop-the-stutter</link><guid isPermaLink="false">https://gamedevnewsletter.substack.com/p/stop-the-stutter</guid><dc:creator><![CDATA[Game Dev Assembly Editors]]></dc:creator><pubDate>Sat, 21 Feb 2026 14:17:19 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/3d2f8d0c-99c6-4a0d-bf7b-ea1852bbf905_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Editor&#8217;s Note</h1><p>How are you doing, folks? Welcome back to <strong>Game Dev Assembly</strong> &#128640;</p><p>In the last issue, we explored how lighting makes players <em>feel</em>. In this issue, we&#8217;re focusing on responsiveness&#8212;the one thing players won&#8217;t <em>forgive</em> when it breaks. Because no matter how beautiful your game looks, if it stutters, immersion breaks <em>instantly</em>. </p><blockquote><p>We unpack <strong>async asset loading</strong> as your core architecture. </p></blockquote><p>If lighting goes unnoticed when it works, async loading goes <em>completely</em> unseen. But when it fails, players notice immediately, and they call your game <strong>broken</strong>. <em>Let&#8217;s make sure they never do!</em> </p><p>Come and find out, along with the latest tips, news, game events, and jobs in the industry.&#128293;</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JJv9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02db0d29-119e-4a56-bbde-4780eaaab34b_975x548.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JJv9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02db0d29-119e-4a56-bbde-4780eaaab34b_975x548.png 424w, https://substackcdn.com/image/fetch/$s_!JJv9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02db0d29-119e-4a56-bbde-4780eaaab34b_975x548.png 848w, https://substackcdn.com/image/fetch/$s_!JJv9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02db0d29-119e-4a56-bbde-4780eaaab34b_975x548.png 1272w, https://substackcdn.com/image/fetch/$s_!JJv9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02db0d29-119e-4a56-bbde-4780eaaab34b_975x548.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JJv9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02db0d29-119e-4a56-bbde-4780eaaab34b_975x548.png" width="975" height="548" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02db0d29-119e-4a56-bbde-4780eaaab34b_975x548.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:548,&quot;width&quot;:975,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:789253,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/188704580?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02db0d29-119e-4a56-bbde-4780eaaab34b_975x548.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JJv9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02db0d29-119e-4a56-bbde-4780eaaab34b_975x548.png 424w, https://substackcdn.com/image/fetch/$s_!JJv9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02db0d29-119e-4a56-bbde-4780eaaab34b_975x548.png 848w, https://substackcdn.com/image/fetch/$s_!JJv9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02db0d29-119e-4a56-bbde-4780eaaab34b_975x548.png 1272w, https://substackcdn.com/image/fetch/$s_!JJv9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02db0d29-119e-4a56-bbde-4780eaaab34b_975x548.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Figure 1: Image courtesy of BioWare / Electronic Arts.</em></figcaption></figure></div><div><hr></div><h4>Table of Contents</h4><ol><li><p><a href="https://gamedevnewsletter.substack.com/i/188704580/witnessing-our-first-failure">Witnessing Our First Failure</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/188704580/when-your-loading-system-becomes-the-problem">When Your Loading System Becomes the Problem</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/188704580/how-we-actually-solved-it">How We Actually Solved It</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/188704580/dependencies-are-where-things-get-messy">Dependencies Are Where Things Get Messy</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/188704580/show-players-something-anything">Show Players Something, Anything</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/188704580/what-actually-works-in-practice">What Actually Works in Practice</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/188704580/why-this-matters-more-than-you-think">Why This Matters More Than You Think</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/188704580/practical-insights-for-developers">Practical Insights for Developers</a></p><ol><li><p>Tip 1: Object Pooling Isn&#8217;t Always Faster</p></li><li><p>Tip 2: Input Buffering Makes Games Feel Responsive</p></li><li><p>Tip 3: Debug Visualization Saves Hours</p></li></ol></li><li><p><a href="https://gamedevnewsletter.substack.com/i/188704580/about-the-author">About the Author</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/188704580/top-dev-headlines-february-2026">Top Dev Headlines (February 2026)</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/188704580/upcoming-game-events">Upcoming Game Events</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/188704580/tool-of-the-week-unity-ml-agents">Tool of the Week</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/188704580/quick-dev-tips">Quick Dev Tips</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/188704580/game-dev-jobs-board">Game Dev Jobs Board</a></p></li></ol><div><hr></div><h2>Witnessing Our First Failure</h2><p>I&#8217;ll never forget our first <a href="https://learn.microsoft.com/en-us/gaming/gdk/docs/store/policies/console/console-certification-requirements-and-tests?view=gdk-2510&amp;utm_source=chatgpt.com">console certification failure</a>. We&#8217;d spent eighteen months building what we thought was a solid game, only to get rejected because our <a href="https://www.gamedeveloper.com/design">load times exceeded platform requirements</a>. The worst part? We hadn&#8217;t even noticed the problem. Our dev machines were too fast, masking issues that would plague every console player.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gamedevnewsletter.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>That failure taught me something crucial: <a href="https://dev.epicgames.com/documentation/en-us/unreal-engine/asynchronous-asset-loading-in-unreal-engine">async asset loading</a> isn&#8217;t some advanced optimization you tackle after shipping. It&#8217;s the fundamental architecture that makes or breaks <a href="https://en.wikipedia.org/wiki/Video_game_optimization">player experience</a>. Three shipped titles later, here&#8217;s what I wish someone had told me from the start.</p><h2><strong>When Your Loading System Becomes the Problem</strong></h2><p>Picture this: your player <a href="https://www.youtube.com/watch?v=Y8ttkcqH8S0">opens a door</a> to a new area. The game <a href="https://www.youtube.com/watch?v=wLb5OwmZ5PE">freezes</a> for half a second while loading textures. They don&#8217;t see a loading screen or any indication of what&#8217;s happening, the game just stops responding. From their perspective, it&#8217;s broken. Maybe it crashed. They mash buttons, nothing happens, and frustration builds.</p><p>This was our reality on that first project. We were loading assets <a href="https://en.wikipedia.org/wiki/Synchronous_and_asynchronous_transmission">synchronously</a> whenever we needed them, blocking everything until the disk finished reading. On our SSDs, these loads took 50-100 milliseconds, barely noticeable during testing. On the PS4&#8217;s hard drive? Sometimes three full seconds. Players thought the game was crashing.</p><p>The human brain perceives anything over <a href="https://www.pubnub.com/blog/how-fast-is-realtime-human-perception-and-technology/">100ms as lag</a>. But honestly, even 50ms hitches add up. When they happen every time that you turn a corner or trigger an effect, your game feels unpolished. Players can&#8217;t articulate why, they just know something feels off. Review scores suffer, word of mouth dies, and you&#8217;re left wondering what went wrong.</p><h2><strong>How We Actually Solved It</strong></h2><p>The solution sounds straightforward: move your loading <a href="https://learn.microsoft.com/en-us/dotnet/csharp/asynchronous-programming/async-scenarios">off the main thread</a>. Let the game keep running while assets load in the background. But implementing this properly took us months to get right, with plenty of false starts along the way.</p><p>Here&#8217;s the basic flow we landed on. When you need an asset, you submit a request to a queue instead of loading it immediately. Separate <a href="https://en.wikipedia.org/wiki/Thread_(computing)">worker threads</a> grab requests from this queue, read from disk, decompress data, and prepare everything for use. Once ready, the main thread picks up the completed asset and handles the final setup: uploading to <a href="https://www.youtube.com/watch?v=emvlEcEO6RI">GPU memory</a>, hooking up references, and making it live in the scene.</p><p>The tricky part nobody warns you about is that GPU uploads still happen on the main thread and they&#8217;re expensive. We were so proud of our async loading system, and then discovered we were still causing hitches by uploading 50MB textures in a single frame. Now we spread large uploads across multiple frames, budgeting maybe 2-3ms per frame for GPU work. A texture might take three frames to fully stream in, but players never notice. They do notice when the <a href="https://en.wikipedia.org/wiki/Frame_rate">frame rate tanks</a>, though.</p><h2><strong>Dependencies Are Where Things Get Messy</strong></h2><p>Our second project nearly shipped with a nightmare bug. Characters would sometimes appear without textures, rendering as pink blobs. Particle systems would crash referencing materials that hadn&#8217;t loaded yet. The issue? We were loading everything <a href="https://en.wikipedia.org/wiki/Asynchronous_I/O">async</a>, but pieces finished at unpredictable times.</p><p>A character model needs its textures, skeleton rig, and animations. If the model loads first, what do you render it with? If textures load first, where do you put them? We were hitting <a href="https://en.wikipedia.org/wiki/Race_condition">race conditions</a> constantly, and debugging was hell because the bugs only appeared sometimes, depending on which asset won the loading race.</p><p>The fix that saved us: <em>make dependencies explicit in the <a href="https://en.wikipedia.org/wiki/Asset_pipeline">asset pipeline</a> itself</em>. Every asset declares what it needs at build time. Materials list their textures. Characters list their meshes and animations. The loading system won&#8217;t finalize anything until all its dependencies are ready. It seems obvious now, but it took weeks of crashes to figure out.</p><p>We also added <a href="https://en.wikipedia.org/wiki/Priority_queue">priority levels</a> so that critical gameplay assets, the stuff players need immediately, can jump to the front of the queue. Environmental detail in the distance? That can wait. When a player approaches a door, assets for the next room get maximum priority. Background scenery loads when there&#8217;s spare bandwidth. This isn&#8217;t rocket science, but it did require actual <a href="https://en.wikipedia.org/wiki/Playtest">playtesting data</a> to tune properly. You can&#8217;t guess which assets matter most; you have to watch real players and see what they interact with.</p><h2><strong>Show Players Something, Anything</strong></h2><p>Here&#8217;s a dirty trick that dramatically improved our perceived load times: always show <a href="https://en.wikipedia.org/wiki/Placeholder#Mathematics_and_computer_science">placeholder assets</a> immediately. Load a blurry, low-res version of <a href="https://dev.epicgames.com/documentation/en-us/unreal-engine/texture-streaming-in-unreal-engine">textures</a> first, then swap in the high-quality versions as they finish streaming. The full-resolution asset might take just as long to load, but players see something instantly instead of staring at empty space.</p><p>For 3D models, we keep simplified versions that instantiate immediately while the <a href="https://en.wikipedia.org/wiki/Level_of_detail_(computer_graphics)">detailed mesh loads</a>. The swap happens so fast during gameplay that players don&#8217;t consciously notice the transition. What they do notice, and what killed us before, is when nothing appears at all.</p><p><a href="https://dev.epicgames.com/documentation/en-us/unreal-engine/world-partition-in-unreal-engine">Open world games need streaming zones</a>. We slice the world into regions and aggressively load everything in the current zone plus neighboring zones. Anything beyond that gets unloaded to free memory. The key is making zones large enough that loading finishes before players can reach the boundary. This requires testing on the slowest hardware we support, because what works on an SSD fails miserably on a mechanical drive.</p><h2><strong>What Actually Works in Practice</strong></h2><p>I&#8217;ve shipped games on <a href="https://unity.com/">Unity</a>, <a href="https://www.unrealengine.com/en-US">Unreal</a>, and custom engines. Each handles async loading differently, and each has its quirks. Unity&#8217;s <a href="https://docs.unity3d.com/Packages/com.unity.addressables@2.9/manual/index.html">Addressables system</a> does dependency management for you, which is great until you need to debug why something isn&#8217;t loading. Unreal&#8217;s <a href="https://dev.epicgames.com/documentation/en-us/unreal-engine/level-streaming-in-unreal-engine">streaming volumes</a> work beautifully if you understand the priority system; otherwise, you&#8217;ll fight mysterious resource starvation issues.</p><p>Custom engines give you complete control, which means you own every bug. I&#8217;ve spent countless hours debugging <a href="https://en.wikipedia.org/wiki/Thread_(computing)">threading issues</a>, <a href="https://en.wikipedia.org/wiki/Race_condition">race conditions,</a> <a href="https://en.wikipedia.org/wiki/Deadlock">deadlocks</a>, all the classics. The flexibility is worth it for some projects, but don&#8217;t underestimate the cost of engineering.</p><p>The single best advice I can give is to constantly test on the slowest hardware you&#8217;re targeting. I keep a test machine with the minimum specs we support, old hard drive, lower end CPU, the works. So many issues only appear on slow storage. That three-second freeze? Never happened to our development machines. Caught it just in time before submission.</p><p>Also, optimize your assets before you optimize your loading code. On our current project, I spent two weeks improving <a href="https://en.wikipedia.org/wiki/Texture_compression">texture compression</a> and mesh processing. This has cut asset sizes by 40%. That meant 40% less data to load, which was way more impactful than any code optimization. Sometimes the best loading system is one that loads less stuff.</p><h2><strong>Why This Matters More Than You Think</strong></h2><p>I used to think <a href="https://en.wikipedia.org/wiki/Asynchronous_I/O">async loading</a> was an optimization you tackled near the end of development, after the game was <em>done</em>. I was wrong. It&#8217;s the fundamental architecture that affects how you structure your entire codebase. Retrofitting async loading into a project built around <a href="https://en.wikipedia.org/wiki/Synchronous_and_asynchronous_transmission">synchronous loads</a> is <em>absolutely</em> miserable.</p><p>Now I start every project with async loading infrastructure in place, even during early prototyping. Yes, it&#8217;s more upfront work. But the alternative, which is shipping a game that freezes randomly because you&#8217;re blocking on <a href="https://en.wikipedia.org/wiki/Input/output">I/O</a>, isn&#8217;t acceptable anymore. Players expect polish. They expect responsiveness. They won&#8217;t forgive a game that <a href="https://en.wikipedia.org/wiki/Video_game_optimization">feels broken</a>, even if the underlying gameplay is solid.</p><p>Your loading system is invisible when it works and catastrophic when it doesn&#8217;t. Players will never consciously think, <em>&#8220;Wow, great async loading implementation.&#8221;</em> But they&#8217;ll absolutely notice if it&#8217;s missing, and they&#8217;ll describe your game as janky, unpolished, or broken. After three shipped titles and one certification failure, I&#8217;ve learned that keeping your game responsive isn&#8217;t optional. It&#8217;s the baseline for <a href="https://www.gamedeveloper.com/programming">professional game development</a>.</p><h2><strong>Practical Insights for Developers</strong></h2><h3>Tip 1: Object Pooling Isn&#8217;t Always Faster</h3><p>Pooling can help reduce garbage collection spikes, but pooling <em>everything</em> can make your game slower. Managing large pools adds overhead that sometimes costs more than creating objects on demand.</p><p><strong>Rule of thumb:</strong> Only pool objects that are created and destroyed frequently, take time to initialize, or are expensive to load. And always pre-warm pools before gameplay to avoid sudden stutters.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FWei!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b26cff7-f9ed-4ac0-90bc-65758c5df45c_975x548.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FWei!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b26cff7-f9ed-4ac0-90bc-65758c5df45c_975x548.png 424w, https://substackcdn.com/image/fetch/$s_!FWei!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b26cff7-f9ed-4ac0-90bc-65758c5df45c_975x548.png 848w, https://substackcdn.com/image/fetch/$s_!FWei!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b26cff7-f9ed-4ac0-90bc-65758c5df45c_975x548.png 1272w, https://substackcdn.com/image/fetch/$s_!FWei!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b26cff7-f9ed-4ac0-90bc-65758c5df45c_975x548.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FWei!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b26cff7-f9ed-4ac0-90bc-65758c5df45c_975x548.png" width="975" height="548" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b26cff7-f9ed-4ac0-90bc-65758c5df45c_975x548.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:548,&quot;width&quot;:975,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:891303,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/188704580?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b26cff7-f9ed-4ac0-90bc-65758c5df45c_975x548.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FWei!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b26cff7-f9ed-4ac0-90bc-65758c5df45c_975x548.png 424w, https://substackcdn.com/image/fetch/$s_!FWei!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b26cff7-f9ed-4ac0-90bc-65758c5df45c_975x548.png 848w, https://substackcdn.com/image/fetch/$s_!FWei!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b26cff7-f9ed-4ac0-90bc-65758c5df45c_975x548.png 1272w, https://substackcdn.com/image/fetch/$s_!FWei!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b26cff7-f9ed-4ac0-90bc-65758c5df45c_975x548.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Figure 2: Image courtesy of Housemarque</em></figcaption></figure></div><h3>Tip 2: Input Buffering Makes Games Feel Responsive</h3><p>Even at 60fps, it&#8217;s easy to miss quick button presses if you only check inputs once per frame. That&#8217;s why some games feel unresponsive even with perfect framerates.</p><p><strong>Fix:</strong> Add a short input buffer so the game remembers recent button presses for a brief window. It lets players queue actions slightly before they&#8217;re allowed, making combat and movement feel tight and intuitive.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!t5iI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c7e241-8fd1-4686-af9d-012adc830e5c_780x439.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!t5iI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c7e241-8fd1-4686-af9d-012adc830e5c_780x439.jpeg 424w, https://substackcdn.com/image/fetch/$s_!t5iI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c7e241-8fd1-4686-af9d-012adc830e5c_780x439.jpeg 848w, https://substackcdn.com/image/fetch/$s_!t5iI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c7e241-8fd1-4686-af9d-012adc830e5c_780x439.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!t5iI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c7e241-8fd1-4686-af9d-012adc830e5c_780x439.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!t5iI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c7e241-8fd1-4686-af9d-012adc830e5c_780x439.jpeg" width="780" height="439" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/77c7e241-8fd1-4686-af9d-012adc830e5c_780x439.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:439,&quot;width&quot;:780,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:79101,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/188704580?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c7e241-8fd1-4686-af9d-012adc830e5c_780x439.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!t5iI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c7e241-8fd1-4686-af9d-012adc830e5c_780x439.jpeg 424w, https://substackcdn.com/image/fetch/$s_!t5iI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c7e241-8fd1-4686-af9d-012adc830e5c_780x439.jpeg 848w, https://substackcdn.com/image/fetch/$s_!t5iI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c7e241-8fd1-4686-af9d-012adc830e5c_780x439.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!t5iI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77c7e241-8fd1-4686-af9d-012adc830e5c_780x439.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Figure 3: Image courtesy of Capcom Co. Ltd.</em></figcaption></figure></div><h3>Tip 3: Debug Visualization Saves Hours</h3><p>Traditional debugging tools don&#8217;t help when bugs appear only during live gameplay. Visual debugging does.</p><p><strong>Tip:</strong> Show what&#8217;s happening directly in your game world; draw detection zones, AI states, or pathfinding lines in-game. Use colors consistently (green for good, red for errors) and add a free-camera mode to inspect systems in real time. Once you start visualizing data, hidden problems become obvious and fixing them becomes much faster.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7vqP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d634076-7242-4ce5-8c68-6898e93cfb56_781x446.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7vqP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d634076-7242-4ce5-8c68-6898e93cfb56_781x446.png 424w, https://substackcdn.com/image/fetch/$s_!7vqP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d634076-7242-4ce5-8c68-6898e93cfb56_781x446.png 848w, https://substackcdn.com/image/fetch/$s_!7vqP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d634076-7242-4ce5-8c68-6898e93cfb56_781x446.png 1272w, https://substackcdn.com/image/fetch/$s_!7vqP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d634076-7242-4ce5-8c68-6898e93cfb56_781x446.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7vqP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d634076-7242-4ce5-8c68-6898e93cfb56_781x446.png" width="781" height="446" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d634076-7242-4ce5-8c68-6898e93cfb56_781x446.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:446,&quot;width&quot;:781,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:618849,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/188704580?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d634076-7242-4ce5-8c68-6898e93cfb56_781x446.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7vqP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d634076-7242-4ce5-8c68-6898e93cfb56_781x446.png 424w, https://substackcdn.com/image/fetch/$s_!7vqP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d634076-7242-4ce5-8c68-6898e93cfb56_781x446.png 848w, https://substackcdn.com/image/fetch/$s_!7vqP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d634076-7242-4ce5-8c68-6898e93cfb56_781x446.png 1272w, https://substackcdn.com/image/fetch/$s_!7vqP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d634076-7242-4ce5-8c68-6898e93cfb56_781x446.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Figure 4: Image courtesy of Epic Games</em></figcaption></figure></div><div><hr></div><h2>About the Author</h2><p><strong>By <a href="https://www.linkedin.com/in/isakashroy/">Akash Roy</a></strong>, founder and game developer at <strong><a href="https://www.linkedin.com/company/broken-bulb-studio/">Broken Bulb Studio</a></strong>, with over eight years of experience in the game industry. He has contributed to major titles including <em><strong><a href="https://store.steampowered.com/agecheck/app/1294810/">Redfall</a></strong></em> and <em><strong><a href="https://store.steampowered.com/agecheck/app/668580/">Atomic Heart</a></strong></em>, as well as a mobile optical system for a U.S. military aviation program. He is currently developing original IP that celebrates Indian culture through interactive experiences, while actively leading and growing the <a href="https://communities.unrealengine.com/indore/">Unreal Engine</a> and game development community in Indore.</p><div><hr></div><h1>Top Dev Headlines (February 2026)</h1><ul><li><p><strong><a href="https://www.gamedeveloper.com/business/scopely-acquires-majority-stake-in-pixel-flow-developer-loom-games">Scopely</a> acquires majority stake in <a href="https://www.gamedeveloper.com/business/scopely-acquires-majority-stake-in-pixel-flow-developer-loom-games">Loom Games</a></strong>: The Turkish mobile studio behind <em><a href="https://pixelflowonline.com/">Pixel Flow!</a></em> has been valued at over $1 billion as <a href="https://www.gamedeveloper.com/business/scopely-acquires-majority-stake-in-pixel-flow-developer-loom-games">Scopely</a> moves to expand its portfolio. Consolidation in mobile isn&#8217;t slowing down, and proven studios with scalable hits remain prime acquisition targets.</p></li><li><p><strong><a href="https://www.manilatimes.net/2026/02/19/tmt-newswire/globenewswire/snail-games-to-showcase-ark-franchise-developments-and-expanding-gaming-portfolio-at-the-2026-game-developers-conference/2281180?">Snail Games</a> to showcase ARK franchise updates at <a href="https://www.manilatimes.net/2026/02/19/tmt-newswire/globenewswire/snail-games-to-showcase-ark-franchise-developments-and-expanding-gaming-portfolio-at-the-2026-game-developers-conference/2281180?">GDC 2026</a></strong>: <a href="https://www.manilatimes.net/2026/02/19/tmt-newswire/globenewswire/snail-games-to-showcase-ark-franchise-developments-and-expanding-gaming-portfolio-at-the-2026-game-developers-conference/2281180?">Snail Inc.</a> is readying fresh developments and portfolio expansions ahead of this year&#8217;s <a href="https://gdconf.com/">Game Developers Conference</a>. Established franchises are doubling down on long-term ecosystem growth rather than one-off releases.</p></li><li><p><strong><a href="https://www.gamedeveloper.com/business/lyrical-games-announces-full-financing-publishing-deal-with-the-chinese-room?utm_source=chatgpt.com">Lyrical Games</a> signs major publishing deal with <a href="https://www.thechineseroom.co.uk/">The Chinese Room</a></strong>: A <a href="https://www.gamedeveloper.com/business/lyrical-games-announces-full-financing-publishing-deal-with-the-chinese-room?utm_source=chatgpt.com">new strategic partnership</a> aimed at navigating <a href="https://en.wikipedia.org/wiki/Indie_game">indie development</a> and publishing amid industry turbulence. Strategic publishing partnerships are becoming critical for indie studios looking to manage risk and secure funding.</p></li><li><p><strong><a href="https://www.gamedeveloper.com/business/report-netease-is-cutting-jobs-at-internal-studio-spliced-inc?utm_source=chatgpt.com">Report</a> states that <a href="https://www.neteasegames.com/">NetEase</a> prepares layoffs at <a href="https://territorystudio.com/project/spliced-inc/">Spliced Inc.</a></strong>: <a href="https://www.gamedeveloper.com/business/report-netease-is-cutting-jobs-at-internal-studio-spliced-inc?utm_source=chatgpt.com">Internal LinkedIn posts</a> suggest job cuts at the <a href="https://www.neteasegames.com/">NetEase</a>-owned studio, highlighting ongoing industry workforce shifts. Even major publishers are restructuring, reinforcing the need for leaner teams and sustainable production models.</p></li><li><p><strong><a href="https://www.businesswire.com/news/home/20260209217178/en/Xsolla-Supports-Release-of-State-of-the-African-Video-Game-Industry-2026-Report">Xsolla</a> backs <a href="https://gamesindustryafrica.com/2026/02/16/gia-state-of-the-african-games-industry-report-2026/">State of the African Video Game Industry 2026</a> report</strong>:<strong> </strong>A new <a href="https://www.businesswire.com/news/home/20260209217178/en/Xsolla-Supports-Release-of-State-of-the-African-Video-Game-Industry-2026-Report">data-driven study</a> provides insight into Africa&#8217;s rapidly growing games ecosystem and developer landscape. merging markets like Africa are becoming serious growth regions for talent, investment, and new player bases.</p></li></ul><h1>Upcoming Game Events</h1><ul><li><p><strong><a href="https://www.eventbrite.co.uk/e/winter-london-anime-gaming-con-2026-tickets-1908289026849?">Winter London Anime &amp; Gaming Con 2026 (London, England)</a> &#8211; </strong><em><strong>Feb 20-22</strong></em>: A huge anime and gaming fan event featuring cosplay, tabletop, gaming culture, and community meetups, perfect for networking and creative inspiration.</p></li><li><p><strong><a href="https://www.eventbrite.co.uk/e/bristol-video-games-expo-tickets-1837615701029?">Bristol Video Games Expo (Bristol, England)</a></strong> <strong>&#8211; </strong><em><strong>Feb 28</strong></em>: A one-day celebration of games from retro to modern with tournaments, speakers, and hands-on play, all of which is great for grassroots community vibes.</p></li><li><p><strong><a href="https://en.wikipedia.org/wiki/2026_Valorant_Champions_Tour%3A_Santiago_Masters?">Valorant Champions Tour: Santiago Masters (Santiago, Chile)</a></strong> <strong>&#8211; </strong><em><strong>Feb 28-Mar 15</strong></em>: Major international esports tournament bringing top <em>Valorant</em> teams together. This is a standout competition for developers and esports observers alike.</p></li><li><p><strong><a href="https://www.gama.org/page/gama-expo?">GAMA Expo (Louisville, KY, USA)</a></strong> <strong>&#8211; </strong><em><strong>Mar 1-5</strong></em>: A major trade show connecting game creators, exhibitors, and industry experts with panels, demos, and networking opportunities.</p></li><li><p><strong><a href="https://gdconf.com/?">GDC Festival of Gaming / Game Developers Conference 2026 (San Francisco, CA, USA)</a></strong> <strong>&#8211; </strong><em><strong>Mar 9-13</strong></em>: The premier global industry event focused on design, tech, networking, and learning for game creators.</p></li></ul><h1>Tool of the Week: Unity ML-Agents</h1><p>If async loading is your architecture, testing it under pressure is your reality check. <a href="https://docs.unity3d.com/Packages/com.unity.ml-agents@3.0/manual/index.html">Unity ML-Agents</a> lets you train AI agents inside your game to simulate real player behavior at scale. But beyond smart NPCs, there&#8217;s a powerful secondary use most teams overlook: <em>stress testing</em>.</p><p>You can use <a href="https://docs.unity3d.com/Packages/com.unity.ml-agents@3.0/manual/index.html">ML-Agents</a> to repeatedly trigger doors, spawn systems, combat encounters, streaming zones, and edge-case interactions&#8212;thousands of times. That&#8217;s how you expose race conditions. That&#8217;s how you catch asset dependency failures. That&#8217;s how you discover the one loading hitch that only happens when three systems fire at once. Humans don&#8217;t test like machines. They don&#8217;t break your game with perfect repetition. ML-Agents <em>does</em>.</p><h1>Quick Dev Tips</h1><ul><li><p><strong>Build Async First, Not Last: </strong>If your systems assume assets are always ready, you&#8217;re building a future headache. Design everything with <em>&#8220;this might still be loading&#8221;</em> in mind. Retrofitting async later is painful, risky, and expensive.</p></li><li><p><strong>Budget Frames Like They&#8217;re Currency: </strong>Async loading doesn&#8217;t save you if you blow your frame on GPU uploads. Spread heavy texture and mesh uploads across multiple frames. A steady 2&#8211;3ms cost beats a single 20ms hitch every time.</p></li><li><p><strong>Test Where It Hurts: </strong>Your high-end dev PC hides problems. Test on the slowest hardware you support such as old drives, weaker CPUs, or limited memory. If it runs smoothly there, you&#8217;re on solid ground.</p></li></ul><h1>Game Dev Jobs Board</h1><ul><li><p><strong><a href="https://ingamejob.com/en/job/unity-developer-438">Remote Unity Developer &#8211; Hitapps</a></strong>:<strong> </strong>A full-time remote role focused on Unity development with room for senior or middle experience. It&#8217;s perfect for engineers who want to build gameplay systems from anywhere.</p></li><li><p><strong><a href="https://ingamejob.com/en/job/unity-developer-gameplay-rd-1">Unity Developer (Gameplay, R&amp;D) &#8211; Saint.wtf</a></strong>:<strong> </strong>Work remotely on Unity projects spanning core gameplay and R&amp;D. This a great fit for developers who enjoy prototyping and pushing engine limits.</p></li><li><p><strong><a href="https://ingamejob.com/en/job/senior-unity-developer-226">Unity Developer &#8211; SkillCampVR</a></strong>: Remote full-time role building and optimizing VR training apps in Unity for Quest and Pico. Ideal for experienced Unity devs with commercial VR experience.</p></li><li><p><strong><a href="https://ingamejob.com/en/job/unity-sdk-technical-lead">Senior Unity SDK Technical Lead &#8211; Hypercell Games</a></strong>:<strong> </strong>A remote senior Unity lead role shaping core SDK systems. This is great for experienced engineers who want to influence tooling and platform architecture.</p></li><li><p><strong><a href="https://ingamejob.com/en/job/unity-c-developer-4">Unity C# Developer &#8211; Shocking Dog Games</a></strong>: Flexible remote position (including part-time) focused on C# gameplay systems in Unity. This is ideal for developers who want varied project work.</p></li></ul><h1>Join the Next Batch of AI Agent Builders (Cohort 3)</h1><p>Over <strong>120+ engineers</strong> have already built AI Agents through Cohorts 1 &amp; 2. <br>In Cohort 3, you could be one of them.</p><p>This is a <strong>live, hands-on weekend cohort</strong> built for developers who want to move beyond static NPC logic and scripted behaviors and start building intelligent, autonomous game systems.</p><p>In just one weekend, you&#8217;ll build AI agents that can:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vh_o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F206b442b-6f05-4df6-a61b-419da45abe78_1600x800.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vh_o!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F206b442b-6f05-4df6-a61b-419da45abe78_1600x800.png 424w, https://substackcdn.com/image/fetch/$s_!vh_o!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F206b442b-6f05-4df6-a61b-419da45abe78_1600x800.png 848w, https://substackcdn.com/image/fetch/$s_!vh_o!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F206b442b-6f05-4df6-a61b-419da45abe78_1600x800.png 1272w, https://substackcdn.com/image/fetch/$s_!vh_o!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F206b442b-6f05-4df6-a61b-419da45abe78_1600x800.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vh_o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F206b442b-6f05-4df6-a61b-419da45abe78_1600x800.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/206b442b-6f05-4df6-a61b-419da45abe78_1600x800.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vh_o!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F206b442b-6f05-4df6-a61b-419da45abe78_1600x800.png 424w, https://substackcdn.com/image/fetch/$s_!vh_o!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F206b442b-6f05-4df6-a61b-419da45abe78_1600x800.png 848w, https://substackcdn.com/image/fetch/$s_!vh_o!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F206b442b-6f05-4df6-a61b-419da45abe78_1600x800.png 1272w, https://substackcdn.com/image/fetch/$s_!vh_o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F206b442b-6f05-4df6-a61b-419da45abe78_1600x800.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>Reason</strong> about game state and player behavior</p></li><li><p><strong>Call tools</strong> (APIs, in-game systems, data sources)</p></li><li><p><strong>Take actions</strong> dynamically inside gameplay loops</p></li><li><p><strong>Run multi-step workflows</strong> for quests, world events, and live ops</p></li></ul><p>Using LangChain, AutoGen &amp; CrewAI. With live coding and mentor support from experts at Microsoft &amp; Google.</p><h2><strong>Exclusive for Our Newsletter Readers</strong></h2><p>As part of our NL community, you get <strong>30% off</strong> your seat.</p><p>Use code: <strong>GAME30 </strong>(Valid for a limited time)</p><div><hr></div><p>If AI agents are on your 2025 roadmap, this is your moment.</p><p>Secure your discounted seat here: <a href="https://www.eventbrite.com/e/build-ai-agents-over-the-weekendcohort-3-tickets-1980455085473?aff=gamedev">https://www.eventbrite.com/e/build-ai-agents-over-the-weekendcohort-3-tickets-1980455085473?aff=gamedev</a></p><p>Miss this cohort, and you will have to wait for the next one.</p><h1>Closing &#8211; Until Next Week</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!01y3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd200a412-52f5-4ac8-aa36-df83b521a5c7_3840x2160.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!01y3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd200a412-52f5-4ac8-aa36-df83b521a5c7_3840x2160.jpeg 424w, https://substackcdn.com/image/fetch/$s_!01y3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd200a412-52f5-4ac8-aa36-df83b521a5c7_3840x2160.jpeg 848w, https://substackcdn.com/image/fetch/$s_!01y3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd200a412-52f5-4ac8-aa36-df83b521a5c7_3840x2160.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!01y3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd200a412-52f5-4ac8-aa36-df83b521a5c7_3840x2160.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!01y3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd200a412-52f5-4ac8-aa36-df83b521a5c7_3840x2160.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d200a412-52f5-4ac8-aa36-df83b521a5c7_3840x2160.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:544251,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/188704580?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd200a412-52f5-4ac8-aa36-df83b521a5c7_3840x2160.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!01y3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd200a412-52f5-4ac8-aa36-df83b521a5c7_3840x2160.jpeg 424w, https://substackcdn.com/image/fetch/$s_!01y3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd200a412-52f5-4ac8-aa36-df83b521a5c7_3840x2160.jpeg 848w, https://substackcdn.com/image/fetch/$s_!01y3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd200a412-52f5-4ac8-aa36-df83b521a5c7_3840x2160.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!01y3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd200a412-52f5-4ac8-aa36-df83b521a5c7_3840x2160.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>As we&#8217;ve journeyed through Akash&#8217;s words, we learn that performance is a <em>promise</em> we make to our gameplayers. </p><p>If this issue made you rethink how your game loads, streams, or handles pressure under the hood, don&#8217;t keep it to yourself. Share it with your teams and friends. Drop it in your studio Slack. Send it to the dev who&#8217;s been chasing that mystery hitch for weeks.</p><p>The industry doesn&#8217;t reward games that <em>almost</em> feel good. Players expect <em>smooth</em>. They expect <em>instant</em>. They expect it to just <em>work</em>.</p><p>If you&#8217;re serious about building games that feel tight, responsive, and production-ready on real hardware, subscribe today as we have more exciting news coming up.</p><p>More deep dives. More practical breakdowns. No fluff.</p><p>Forward this. Share it. And if you haven&#8217;t already, hit subscribe so you don&#8217;t miss the next drop. &#128640;&#127918;</p><div><hr></div><p>Warm Regards,</p><p>Game Dev Assembly Team</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gamedevnewsletter.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Lighting as a Design Principle in Game Development]]></title><description><![CDATA[When we talk about lighting in games, it&#8217;s often reduced to a technical checklist: make sure players can see clearly, balance the brightness, avoid harsh contrasts, and optimize performance so frame rates don&#8217;t suffer. While these are important considerations, they barely scratch the surface of what lighting really brings to interactive experiences. Lighting is not just a technical hurdle to clear &#8211; it&#8217;s a design principle &#8211; a tool that shapes how players feel, where they go, and how they interpret the world around them.]]></description><link>https://gamedevnewsletter.substack.com/p/lighting-as-a-design-principle-in-game-development</link><guid isPermaLink="false">https://gamedevnewsletter.substack.com/p/lighting-as-a-design-principle-in-game-development</guid><dc:creator><![CDATA[Game Dev Assembly Editors]]></dc:creator><pubDate>Tue, 03 Feb 2026 14:19:41 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/38d55a89-4581-4cc5-8027-3c07f9d5570c_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Editor&#8217;s Note</h2><p>Howdy, and welcome to the sixth issue of <strong>Game Dev Assembly</strong> &#128640; where we&#8217;re going to challenge ourselves on how we think about lighting. &#128161;</p><blockquote><p>Usually we think: <em>Is the scene too dark? A doorway hard to read? What if a player gets lost?</em> </p></blockquote><p>We&#8217;re going to <em>flip that perspective</em>. </p><p><strong>Lighting shapes mood before dialogue is even spoken</strong>. It nudges players forward without a waypoint. It makes worlds feel believable before textures are noticed. </p><p>We will go on a journey away from engine settings to lighting as <em>intentional design</em>, along with the hottest industry news updates, game jams, and tools and tips to keep you on your toes. Ready? Let&#8217;s go!</p><div><hr></div><h4>Take Our Quick Survey</h4><p>As <a href="https://en.wikipedia.org/wiki/Artificial_intelligence">AI</a> generates more learning content, it is becoming harder to see where expert input really makes a difference. <strong><a href="https://www.linkedin.com/company/packt-publishing/">Packt</a></strong> has recently partnered with <strong><a href="https://www.linkedin.com/company/go1/">Go1</a></strong> to create a short study looking at how developers actually learn today, and when structured courses still matter alongside <a href="https://en.wikipedia.org/wiki/Artificial_intelligence">AI</a> tools. <br><br>If you work with learning or rely on it to build skills, your perspective would be useful. The survey takes under 5 minutes to complete, and the results will be shared in a study published in March: </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packt-publishing.typeform.com/sl-survey2026#referrer=gamedevassembly&quot;,&quot;text&quot;:&quot;Take Survey&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packt-publishing.typeform.com/sl-survey2026#referrer=gamedevassembly"><span>Take Survey</span></a></p><div><hr></div><h4>Table of Contents</h4><ol><li><p><a href="https://gamedevnewsletter.substack.com/i/186604935/what-does-lighting-actually-do">What Does Lighting Actually Do?</a></p><ol><li><p><a href="https://gamedevnewsletter.substack.com/i/186604935/1-atmosphere-and-mood">Atmosphere and Mood</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/186604935/2-navigation-and-focus">Navigation and Focus</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/186604935/3-world-building-and-believability">World-Building and Believability</a></p></li></ol></li><li><p><a href="https://gamedevnewsletter.substack.com/i/186604935/quick-lighting-tips">Quick Lighting Tips</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/186604935/about-the-author">About the Author</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/186604935/top-dev-headlines-february-2026">Top Dev Headlines (February 2026)</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/186604935/upcoming-game-events">Upcoming Game Events</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/186604935/tool-of-the-week-razer-wyvrn-ai-qa-copilot">Tool of the Week</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/186604935/quick-dev-tips">Quick Dev Tips</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/186604935/game-dev-jobs-board">Game Dev Jobs Board</a></p></li><li><p><a href="https://gamedevnewsletter.substack.com/i/186604935/game-drop-inspo-of-the-fortnight">Game Drop &#8211; Inspo of the Fortnight</a></p></li></ol><div><hr></div><h2><strong>What Does Lighting Actually Do?</strong></h2><p>When we talk about <strong><a href="https://youtu.be/dtfv1cGde9A?si=mUG7-dJSIUJsxUsK">lighting in games</a></strong>, it&#8217;s often reduced to a technical checklist: make sure players can see clearly, balance the brightness, avoid harsh contrasts, and optimize performance so frame rates don&#8217;t suffer. While these are important considerations, they barely scratch the surface of what lighting really brings to <strong><a href="https://www.lightingdesignonline.com/blogs/news/lighting-for-storytelling?srsltid=AfmBOooDGh_hNa1jzrcL_I9BhdjD3wKYU7lPT8LOdGJ872Ck4p6v6m8_">interactive experiences</a></strong>. Lighting is not just a technical hurdle to clear &#8211; it&#8217;s a design principle &#8211; a tool that shapes how players feel, <strong><a href="https://www.blog.radiator.debacle.us/2018/03/gdc-2018-how-to-light-level-slides-and.html">where they go</a></strong>, and how they interpret the world around them.</p><p>At its core, lighting is visual storytelling. A dimly lit corridor doesn&#8217;t simply obscure the geometry; it communicates tension and unease, <strong><a href="https://youtu.be/IFXCako0xD0?si=tSkliPDFPOe_9iFB">priming the player for danger</a></strong> that may or may not appear. A bright, sunlit field, on the other hand, signals openness, safety, and freedom of movement. These cues work on a near-instinctive level; meaning players don&#8217;t need a tutorial to understand them, because light naturally <strong><a href="https://www.lightingdesignonline.com/blogs/news/lighting-for-storytelling?srsltid=AfmBOooDGh_hNa1jzrcL_I9BhdjD3wKYU7lPT8LOdGJ872Ck4p6v6m8_">guides perception</a></strong> in ways that feel both intuitive and invisible.</p><p>Think of the last time you explored a game world. You might not have noticed how your eyes were being directed, but the placement, color, and quality of light almost certainly influenced your path. Whether it was a <strong><a href="https://youtube.com/shorts/yzrv2H9XXtE?si=wm_FWi-mweanlrm3">flickering torch in a dungeon</a></strong> or a shaft of golden light breaking through clouds to reveal a destination, those choices were intentional. They were designed to communicate, persuade, and immerse.</p><p>Lighting plays many roles in game development, but three stand out as especially critical:</p><h3><strong>1. Atmosphere and Mood</strong></h3><p>Lighting defines the emotional tone of a scene in a way no other element can. Horror games lean heavily on sharp contrasts, harsh shadows, and isolated highlights to build fear and anticipation. A single dangling bulb in a basement can be far more unsettling than a monster jumping out, because the atmosphere does the work of creating dread before the gameplay even begins.</p><p>Adventure games, by contrast, often embrace warm tones, gradual gradients, and natural light sources to create wonder and curiosity. Think of the golden sunsets in <em>The Legend of Zelda: Breath of the Wild</em> or the cozy hearths in <em>Skyrim</em>. These choices don&#8217;t just make environments visible; they make them memorable. Light tells players how they should feel about a place long before any dialogue or combat takes place.</p><p>And mood isn&#8217;t static. It can evolve as the player progresses. A peaceful forest bathed in soft daylight can transform into a threatening space under moonlight or storm clouds. In this way, lighting becomes a dynamic storytelling device that responds to context, amplifying both narrative beats and gameplay rhythms.</p><p>The following images showcase the idea of <strong>Atmosphere and Mood</strong> by showing two relatively similar scenes. Both are in a room, have a table and chairs, and have light pouring through the windows. Yet both are distinctly different thanks to lighting, atmosphere, and mood. With the top scene more closely matching the cozy <strong>Fantasy</strong> vibe, and the bottom being a cold and spooky <strong>Horror</strong> scene:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XsL6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44f133cf-a834-49f9-8693-e1ba417d2e7d_1000x1000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XsL6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44f133cf-a834-49f9-8693-e1ba417d2e7d_1000x1000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!XsL6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44f133cf-a834-49f9-8693-e1ba417d2e7d_1000x1000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!XsL6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44f133cf-a834-49f9-8693-e1ba417d2e7d_1000x1000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!XsL6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44f133cf-a834-49f9-8693-e1ba417d2e7d_1000x1000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XsL6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44f133cf-a834-49f9-8693-e1ba417d2e7d_1000x1000.jpeg" width="1000" height="1000" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/44f133cf-a834-49f9-8693-e1ba417d2e7d_1000x1000.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1000,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Article content&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Article content" title="Article content" srcset="https://substackcdn.com/image/fetch/$s_!XsL6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44f133cf-a834-49f9-8693-e1ba417d2e7d_1000x1000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!XsL6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44f133cf-a834-49f9-8693-e1ba417d2e7d_1000x1000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!XsL6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44f133cf-a834-49f9-8693-e1ba417d2e7d_1000x1000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!XsL6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F44f133cf-a834-49f9-8693-e1ba417d2e7d_1000x1000.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 1: A shared room layout becomes cozy fantasy above, and cold, creeping horror below</figcaption></figure></div><h3><strong>2. Navigation and Focus</strong></h3><p>Players don&#8217;t just need to follow waypoints on a HUD; they can follow light. A flickering lantern at the end of a hallway, the glint of treasure catching a sunbeam, or the glow of neon signs in a futuristic city all work as silent signals. These cues subtly direct player attention without the need for obtrusive UI elements.</p><p>Good lighting design makes environments feel intuitive. Instead of constantly checking a mini-map, players instinctively know where to go because the world itself is guiding them. This frees them from the distraction of interface overlays and encourages immersion. The more natural the guidance, the more effortless the experience feels.</p><p>Even small adjustments like brightening the contrast on an important doorway or dimming less relevant areas can drastically influence player flow. Designers often talk about <em>leading lines</em> in architecture or painting; lighting in games functions in much the same way &#8211; shaping visual pathways that players unconsciously follow.</p><p>The following images showcase the idea lighting-based <strong>Navigation and Focus</strong>. They&#8217;re both the same, with the bottom simply pointing with arrows to the key lighting and direction created in the scene. You can see how the blue from the torch guides the player to the left and clearly signifies direction, which is also further emphasized by the contrasting yellow above the door that the player needs to go through:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Q9_F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2732eeb-1c54-4cb2-b675-c05c82b73a31_1000x1000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Q9_F!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2732eeb-1c54-4cb2-b675-c05c82b73a31_1000x1000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Q9_F!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2732eeb-1c54-4cb2-b675-c05c82b73a31_1000x1000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Q9_F!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2732eeb-1c54-4cb2-b675-c05c82b73a31_1000x1000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Q9_F!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2732eeb-1c54-4cb2-b675-c05c82b73a31_1000x1000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Q9_F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2732eeb-1c54-4cb2-b675-c05c82b73a31_1000x1000.jpeg" width="1000" height="1000" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e2732eeb-1c54-4cb2-b675-c05c82b73a31_1000x1000.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1000,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Article content&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Article content" title="Article content" srcset="https://substackcdn.com/image/fetch/$s_!Q9_F!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2732eeb-1c54-4cb2-b675-c05c82b73a31_1000x1000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Q9_F!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2732eeb-1c54-4cb2-b675-c05c82b73a31_1000x1000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Q9_F!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2732eeb-1c54-4cb2-b675-c05c82b73a31_1000x1000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Q9_F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2732eeb-1c54-4cb2-b675-c05c82b73a31_1000x1000.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 2: Blue torchlight pulls the player left, while warm contrast above the door signals the correct path forward</figcaption></figure></div><h3><strong>3. World-Building and Believability</strong></h3><p>Even in highly stylized or fantastical games, lighting is what grounds the experience in believability. The way shadows stretch and soften, how colors shift with time of day, or how light interacts with water, stone, or skin &#8211; all contribute to whether a world feels consistent and immersive.</p><p>Players may not consciously analyze these details, but they will feel them. A castle lit only by uniform brightness feels artificial. But a castle where torches flicker against rough stone, moonlight seeps through arrow slits, and shadows pool in corners, it immediately feels alive &#8211; even if the textures or models themselves might be simple.</p><p>In fact, some of the most convincing game worlds aren&#8217;t the most technically realistic; they&#8217;re where lighting is used with <em>intentionality</em>. Stylized titles like <em>Hades</em> or <em>Overwatch</em> rely on exaggerated, purposeful lighting to create strong mood and readability, while hyper-realistic titles use physically accurate lighting models to build immersion. In both cases, light is the glue that binds the world together.</p><p>The following images simply show a great example of a stylized environment that uses clever lighting to cast solid direction-based shadows on the ground, taking the rather flat geometry and grounding it within the art style in a way that is natural and believable:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fg6H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e8d208-16c3-4745-b446-064dfd76b5c1_1377x717.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fg6H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e8d208-16c3-4745-b446-064dfd76b5c1_1377x717.png 424w, https://substackcdn.com/image/fetch/$s_!fg6H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e8d208-16c3-4745-b446-064dfd76b5c1_1377x717.png 848w, https://substackcdn.com/image/fetch/$s_!fg6H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e8d208-16c3-4745-b446-064dfd76b5c1_1377x717.png 1272w, https://substackcdn.com/image/fetch/$s_!fg6H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e8d208-16c3-4745-b446-064dfd76b5c1_1377x717.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fg6H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e8d208-16c3-4745-b446-064dfd76b5c1_1377x717.png" width="1377" height="717" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e4e8d208-16c3-4745-b446-064dfd76b5c1_1377x717.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:717,&quot;width&quot;:1377,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Article content&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Article content" title="Article content" srcset="https://substackcdn.com/image/fetch/$s_!fg6H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e8d208-16c3-4745-b446-064dfd76b5c1_1377x717.png 424w, https://substackcdn.com/image/fetch/$s_!fg6H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e8d208-16c3-4745-b446-064dfd76b5c1_1377x717.png 848w, https://substackcdn.com/image/fetch/$s_!fg6H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e8d208-16c3-4745-b446-064dfd76b5c1_1377x717.png 1272w, https://substackcdn.com/image/fetch/$s_!fg6H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4e8d208-16c3-4745-b446-064dfd76b5c1_1377x717.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Figure 3: Directional lighting grounds stylized geometry through shadow and contrast</figcaption></figure></div><p>When lighting is treated as an afterthought, it risks becoming little more than a visibility toggle. But when it&#8217;s approached as a design principle, it transforms. It stops being a finishing touch and becomes a core tool of expression, every bit as important as level layouts, combat systems, or narrative beats.</p><p>The best games use light to make things both visible and meaningful. It&#8217;s clarity, yes, but also communication. It&#8217;s mood, atmosphere, and immersion. Done well, then lighting elevates gameplay into an experience that resonates long after the controller is set down and the screen fades to black.</p><h2><strong>Quick Lighting Tips</strong></h2><ol><li><p><strong>Use Darkness as a Tool</strong>: Strategic shadows create contrast, mood, and tension &#8211; don&#8217;t light everything evenly.</p></li><li><p><strong>Guide Players Naturally:</strong> Place light sources along critical paths so players instinctively move toward points of interest.</p></li><li><p><strong>Think in Layers:</strong> Mix global lighting, local sources, and ambient effects to add depth and richness.</p></li><li><p><strong>Prioritize Intent Over Realism:</strong> Stylized lighting that serves the story or gameplay often works better than perfect simulation.</p></li><li><p><strong>Leverage Color Psychology:</strong> Warm light (oranges/yellows) suggests comfort and safety; cool light (blues/greens) can suggest unease, sterility, or mystery.</p></li></ol><div><hr></div><h2>About the Author</h2><p>By <strong>Tyson Butler-Boschma</strong>, who is a multi-award-winning game developer, cinematic director, and lighting artist with over 13 years of industry experience. He is currently developing <em>Primordials Legends: Hollow Hero</em>. He is also the author of <em><strong><a href="https://a.co/d/09fJWL89">Unreal Engine 5 Best Practices</a></strong></em>, published by Packt in early 2026.</p><p>Tyson has worked on projects including <em>Torque Drift 2</em>, <em>Battle Kitty</em> (Netflix), and Epic Games&#8217; <em>We Will Be Monsters</em>, and is known for the viral <em>Superman Flight Experience</em>, which reached over 10 million views. His work has earned multiple national and international awards, including PAX Australia People&#8217;s Choice and recognition from AEAF and GLAAD.</p><p>You can connect with Tyson on LinkedIn: <strong><a href="https://www.linkedin.com/in/tyson-butler-boschma/">Tyson Butler-Boschma | LinkedIn</a></strong></p><div><hr></div><h2>Top Dev Headlines (February 2026)</h2><ul><li><p><strong>What 2025 Taught the Game Industry: </strong><a href="https://www.gamedeveloper.com/business/game-developer-s-2025-wrap-up-the-trends-that-made-and-plagued-this-year?">Game Developer&#8217;s</a> roundup shows us <a href="https://en.wikipedia.org/wiki/Artificial_intelligence">AI</a> is moving from experimentation to expectation, studio cultures reckoning with burnout and layoffs, and a growing gap between sustainable teams and high-risk scaling.</p></li><li><p><strong>Watercolour Art Becomes a Playable Space:</strong><em> <a href="https://www.creativebloq.com/3d/video-game-design/this-indie-game-turns-watercolour-art-into-playable-puzzle-spaces?">A Storied Life: Tabitha</a></em> developed by <a href="https://www.lab42.games/">Lab42</a> is <a href="https://store.steampowered.com/app/3749330/A_Storied_Life_Tabitha/">coming to PC in 2026</a>, turning hand-painted art into interactive puzzle environments which blends narrative design, emotion, and visual storytelling.</p></li><li><p><strong>A Modding Jam That&#8217;s Fast Becoming a Full Visual Movement:</strong> <a href="https://youtu.be/vquTPCYbOxk?si=tdCDnp0aLfefwjsH">The Quake Brutalist Game Jam</a> continue to prototype design ideas faster than studios can, and you can follow <a href="https://www.slipseer.com/index.php?resources%2Fquake-brutalist-jam-iii.549%2F">instructions</a> on how to download and get the latest features and upgrades of <a href="https://www.theguardian.com/games/2026/jan/22/quake-brutalist-game-jam-id-software?">Jam 3</a> &#8211; <em>driven by community over profit.</em></p></li><li><p><strong>Ubisoft Pushes Generative AI Into the Player Experience:</strong> While most studios limit <a href="https://en.wikipedia.org/wiki/Artificial_intelligence">AI</a> to internal tools, <a href="https://www.ubisoft.com/en-gb">Ubisoft</a> is experimenting with <a href="https://en.wikipedia.org/wiki/Artificial_intelligence">AI-generated</a> dialogue, behavior, and reactive content visible to players &#8211; forcing teams to rethink the narratives they author and whether players can trust what they&#8217;re seeing.</p></li><li><p><strong>Game Engines Are Becoming Long-Term Creative Platforms:</strong> <a href="https://www.researchandmarkets.com/reports/6069694/game-engines-global-strategic-business-report?utm_source=GNE&amp;utm_medium=PressRelease&amp;utm_code=5l3gf6&amp;utm_campaign=2118765+-+Game+Engines+Industry+Forecast+to+Reach+%247.7+Billion+by+2030+at+17.1%25+CAGR+-+Rising+Demand+for+Cross-Platform+Game+Development+Tools+Drives+Adoption&amp;utm_exec=jocamsai">Game Engines - Global Strategic Business Report</a> pegs the game engine market at <a href="https://www.globenewswire.com/news-release/2025/12/09/3202622/28124/en/Game-Engines-Industry-Forecast-to-Reach-7-7-Billion-by-2030-at-17-1-CAGR-Rising-Demand-for-Cross-Platform-Game-Development-Tools-Drives-Adoption.html">~$7.7B</a> by 2030, fueled by film, simulation, and real-time tools &#8211; not just games. This means engines are long-term platforms for shaping skills, careers, and how transferable your work really is.</p></li></ul><h2>Upcoming Game Events</h2><ul><li><p><strong><a href="https://www.copenhagengamingweek.dk/">Copenhagen Gaming Week</a></strong><a href="https://www.copenhagengamingweek.dk/">, Spring 2026 (Copenhagen, Denmark):</a> One of Scandinavia&#8217;s biggest gaming festivals, blending esports, indie games, tabletop, cosplay, and hands-on play. It&#8217;s less about formal talks and more about <em>seeing what players are excited about right now</em> &#8211; useful signal if you care about audience taste, trends, and grassroots energy.</p></li><li><p><strong><a href="https://east.paxsite.com/en-us.html">PAX East</a></strong><a href="https://east.paxsite.com/en-us.html">, 2026 (Boston, MA, USA):</a> PAX East remains one of the most developer-friendly large-scale shows, with strong indie floors, panels, and direct player feedback. Great for teams who want to test ideas in front of real players &#8211; or just reconnect with the wider dev community after heads-down production.</p></li><li><p><strong><a href="https://dreamhack.com/blog/2025/11/02/a-message-to-the-community/">DreamHack</a></strong><a href="https://dreamhack.com/blog/2025/11/02/a-message-to-the-community/"> (Status Update):</a> DreamHack has shared an important message to its community outlining changes to how it approaches future events. While this isn&#8217;t a traditional &#8220;save the date,&#8221; it&#8217;s a reminder of how volatile large-scale gaming events remain &#8211; and why community-led and regional shows are becoming more important.</p></li><li><p><strong><a href="https://gblconference.com/">GBL Conference</a></strong><a href="https://gblconference.com/">, 2026 (Europe):</a> The GBL Conference sits at the intersection of games, learning, and serious play. Expect talks on educational design, simulation, and how game mechanics translate beyond entertainment &#8211; useful for developers interested in impact, training, or non-traditional game work.</p></li></ul><h2>Tool of the Week: Razer WYVRN - AI QA Copilot </h2><p><a href="https://www.theverge.com/news/632121/razer-wyvrn-developer-ai-qa-gamer-copilot-sensa-haptics-thx?">Razer&#8217;s </a><strong><a href="https://www.theverge.com/news/632121/razer-wyvrn-developer-ai-qa-gamer-copilot-sensa-haptics-thx?">WYVRN</a></strong> isn&#8217;t trying to replace designers or testers; it&#8217;s aiming to <strong>close the gap between how a game is built and how it actually feels to play</strong>. By combining <a href="https://www.theverge.com/news/632121/razer-wyvrn-developer-ai-qa-gamer-copilot-sensa-haptics-thx?">AI-driven QA</a> (to surface bugs, edge cases, and inconsistencies earlier) with <a href="https://www.theverge.com/news/632121/razer-wyvrn-developer-ai-qa-gamer-copilot-sensa-haptics-thx?">player-facing systems</a> like adaptive feedback, haptics, and audio, <a href="https://www.theverge.com/news/632121/razer-wyvrn-developer-ai-qa-gamer-copilot-sensa-haptics-thx?">WYVRN</a> focuses on the stuff players notice immediately: responsiveness, clarity, and feedback. The real pitch here is speed and iteration &#8211; spotting problems sooner, validating moment-to-moment feel faster, and reducing the gap between intent and experience. For teams stretched thin on QA or polish time, that&#8217;s where this starts to get genuinely interesting.</p><h2>Quick Dev Tips</h2><ul><li><p><strong>Use Darkness as a Tool:</strong> Strategic shadows create contrast, mood, and tension &#8211; don&#8217;t light everything evenly.</p></li><li><p><strong>Guide Players Naturally:</strong> Place light sources along critical paths so players instinctively move toward points of interest.</p></li><li><p><strong>Think in Layers:</strong> Mix global lighting, local sources, and ambient effects to add depth and richness.</p></li><li><p><strong>Prioritize Intent Over Realism:</strong> Stylized lighting that serves the story or gameplay often works better than perfect simulation.</p></li><li><p><strong>Leverage Color Psychology:</strong> Warm lights (oranges/yellows) suggest comfort and safety; cool lights (blues/greens) can suggest unease, sterility, or mystery.</p></li></ul><h2>Game Dev Jobs Board</h2><ul><li><p><strong><a href="https://www.totaljobs.com/job/freelance-senior-game-developer-paper-io2/voodoo-limited-job106538652">Freelance - Senior Game Developer - Paper.io2</a>: </strong>This is a remote position where you will be<strong> </strong>responsible for designing, building, and iterating on core gameplay and live features for <em>Paper.io 2</em>, collaborating with a senior multidisciplinary team to ship high-quality, performance-optimized casual mobile content to millions of players.</p></li><li><p><strong><a href="https://remotegamejobs.com/jobs/seismic-squirrel-senior-unity-game-engineer-remote-remote-job-359576a6-856c-424b-8c04-0c0a7e257b7b">Senior Unity Game Engineer -Remote</a>: </strong>You will be<strong> </strong>leading gameplay systems, combat AI, and game architecture for narrative-driven PC/console RPGs, while mentoring engineers, owning technical pipelines, and collaborating cross-functionally to ship and scale high-quality Unity titles.</p></li><li><p><strong><a href="https://remotegamejobs.com/jobs/unfold-games-3d-environment-artist-hard-surface-modeling-remote-job">3D Environment Artist (hard surface modeling) - Remote</a>: </strong>You will be responsible for turning blockouts and references into cohesive, modular gothic architecture for a first-person game, balancing strong architectural design with clean, game-ready assets.</p></li><li><p><strong><a href="https://www.totaljobs.com/job/senior-technical-artist/wushu-studios-ltd-job106570387">Senior Technical Artist -Remote in the UK: </a> </strong>You will be driving visual quality and art pipelines by building tools, optimizing assets, and bridging art and engineering teams to deliver high-quality visuals efficiently across platforms in a UK-based production environment.</p></li><li><p><strong><a href="https://remotegamejobs.com/jobs/lobah-poland-senior-technical-animator-maya-unreal-engine-5-remote-job">Senior Technical Animator (Maya / Unreal Engine 5) - Remote</a>: </strong>You will be owning the Maya-to-Unreal Engine 5 character animation pipeline, building advanced rigs and retargeting tools, implementing real-time animation systems, and leading technical direction for high-performance gameplay animation.</p></li></ul><h2>Game Drop &#8211; Inspo of the Fortnight</h2><p>This fortnight&#8217;s spotlight is <strong><a href="https://store.steampowered.com/app/2438330/Pale_Coins/">Pale Coins</a></strong>, a dark, minimalist deck-builder that blends roguelike progression with unsettling atmosphere and high-stakes decision-making. Players build and burn decks of cursed coins, weighing risk versus survival as each run pushes them deeper into a bleak, decaying world. What sets <em>Pale Coins</em> apart is its tone: sparse visuals, oppressive pacing, and systems that <em>want</em> you to make bad choices &#8211; then live with them. It&#8217;s less about power fantasy and more about tension, sacrifice, and managing inevitability. Available now on <a href="https://store.steampowered.com/app/2438330/Pale_Coins/">Steam for PC</a>, <em>Pale Coins</em> is a sharp example of how strong mood, restraint, and systemic pressure can carry an indie game without spectacle.</p><h2>Closing &#8211; Until Next Week</h2><p>If this issue changed how you think about lighting. or nudged you to look at a scene twice, pass it along to a fellow dev. We&#8217;d love to hear how you&#8217;re using light in your own projects, too, so feel free to reply and share what you&#8217;re working on or suggest a topic for a future issue.</p><p>Until next week: light with <em>intent</em>, guide players without them noticing, and remember that great lighting doesn&#8217;t just make your game visible &#8211; <em>it makes it unforgettable</em>. Keep building, keep experimenting, and we&#8217;ll see you in the next drop. &#10024;&#127918;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zXT4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fd9e3a6-eda3-4039-8b57-29833b202246_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zXT4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fd9e3a6-eda3-4039-8b57-29833b202246_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zXT4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fd9e3a6-eda3-4039-8b57-29833b202246_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zXT4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fd9e3a6-eda3-4039-8b57-29833b202246_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zXT4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fd9e3a6-eda3-4039-8b57-29833b202246_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zXT4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fd9e3a6-eda3-4039-8b57-29833b202246_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0fd9e3a6-eda3-4039-8b57-29833b202246_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:271948,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://gamedevnewsletter.substack.com/i/186604935?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fd9e3a6-eda3-4039-8b57-29833b202246_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zXT4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fd9e3a6-eda3-4039-8b57-29833b202246_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zXT4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fd9e3a6-eda3-4039-8b57-29833b202246_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zXT4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fd9e3a6-eda3-4039-8b57-29833b202246_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zXT4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fd9e3a6-eda3-4039-8b57-29833b202246_1920x1080.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Warm Regards,</p><p>Game Dev Assembly Team</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://gamedevnewsletter.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Bring Your 3D Models to Life With a glTF Extension]]></title><description><![CDATA[Ever wanted your 3D model to do something instead of just looking great? In this hands-on piece, Khronos 3D Commerce Vice-Chair, Mike Festa, walks through how he turned a static 3D watch into a living]]></description><link>https://gamedevnewsletter.substack.com/p/bring-your-3d-models-to-life-with-gitf-extension</link><guid isPermaLink="false">https://gamedevnewsletter.substack.com/p/bring-your-3d-models-to-life-with-gitf-extension</guid><dc:creator><![CDATA[Game Dev Assembly Editors]]></dc:creator><pubDate>Mon, 19 May 2025 10:23:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/bfb5d2c7-943c-4f56-b629-75279b8387ed_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p style="text-align: justify;"><strong>Editor&#8217;s Note</strong></p><p style="text-align: justify;">Hello and welcome to Issue # 3 of <em>Game Dev Assembly</em>! &#127918;</p><p style="text-align: justify;">This week, we bring you how Khronos&#8217; <a href="https://www.linkedin.com/in/mfesta/">Mike Festa</a> turned a simple 3D watch into a real-time digital twin, showing that creating your first glTF extension might be easier than you think! We&#8217;ve also got a spotlight on Raptor for GameMaker devs, fresh news from Blender and Meta, practical dev tips, and an indie gem you won&#8217;t want to miss.</p><p style="text-align: justify;">As always, we&#8217;d love to hear your thoughts: what inspired you, and what you want to see next!</p><h2><strong>Featured Deep Dive: Time to Create Your First glTF Extension</strong></h2><p style="text-align: justify;">Ever wanted your 3D model to do something instead of just looking great? In this hands-on piece, Khronos 3D Commerce Vice-Chair, Mike Festa, walks through how he turned a static 3D watch into a living digital twin, one that actually shows the current time. From naming your first glTF extension to wiring real-time updates in model-viewer, he breaks down the process so clearly you&#8217;ll want to try it yourself! &#8211; <em>By Mike Festa, CTO Super DNA 3D Lab</em></p><h3><strong>Time to Create Your First glTF Extension</strong></h3><p>It&#8217;s easier than you think!</p><p><em>&#8211; By Mike Festa, CTO Super DNA 3D Lab</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ksvq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F791c00a6-e067-4561-8c9f-8664b58c8f04_768x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ksvq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F791c00a6-e067-4561-8c9f-8664b58c8f04_768x768.png 424w, https://substackcdn.com/image/fetch/$s_!Ksvq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F791c00a6-e067-4561-8c9f-8664b58c8f04_768x768.png 848w, https://substackcdn.com/image/fetch/$s_!Ksvq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F791c00a6-e067-4561-8c9f-8664b58c8f04_768x768.png 1272w, https://substackcdn.com/image/fetch/$s_!Ksvq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F791c00a6-e067-4561-8c9f-8664b58c8f04_768x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ksvq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F791c00a6-e067-4561-8c9f-8664b58c8f04_768x768.png" width="768" height="768" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/791c00a6-e067-4561-8c9f-8664b58c8f04_768x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:768,&quot;width&quot;:768,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ksvq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F791c00a6-e067-4561-8c9f-8664b58c8f04_768x768.png 424w, https://substackcdn.com/image/fetch/$s_!Ksvq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F791c00a6-e067-4561-8c9f-8664b58c8f04_768x768.png 848w, https://substackcdn.com/image/fetch/$s_!Ksvq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F791c00a6-e067-4561-8c9f-8664b58c8f04_768x768.png 1272w, https://substackcdn.com/image/fetch/$s_!Ksvq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F791c00a6-e067-4561-8c9f-8664b58c8f04_768x768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Last week, I was talking with one of our technical artists at <a href="https://superdna3dlab.com/">SuperDNA</a> about a 3D wristwatch we were creating for a client. The latest tweaks to the environment lighting really made the product pop, but we wanted something more to show off that this 3D model wasn&#8217;t just a static rendered image, but an interactive, real-time digital twin.</p><p><em>To put it simply, we needed a way to make the digital twin dynamic, not static &#8212; something that actually responded to real-world data.</em></p><p>Given that the product is a watch, it made sense to display the current time. I knew we could make that happen with JavaScript, but we would also need a way to identify which parts of the 3D model&#8217;s geometry represented each hand. Although we could have just hard-coded some mesh names, I thought it would be a great use of the extension system built into the glTF (GL Transmission Format) specification, and thus, the MF_geometry_clockface project was born.</p><p>In this article, I&#8217;ll explain how I added the extension data to the glTF file and updated the viewer code to use that new information so the watch can show the current time.</p><p>As Vice-Chair of the <a href="https://www.khronos.org/3dcommerce">3D Commerce</a> Working Group at Khronos, I&#8217;m very familiar with the glTF 3D file format specification. At its core, the glTF format is a human-readable JSON-based document that organizes 3D data resources, such as meshes and textures, into a logical structure that can be read by real-time applications for consistent display. This makes it easy for brands to commission photorealistic digital twins of their products for display across the web and in emerging platforms like virtual and augmented reality.</p><h3>glTF was designed to be extended!</h3><p>The core version of glTF specifies basic functionality, such as physically based rendering, which enables consistent support across all platforms. To help the format evolve and take advantage of new rendering techniques or use cases, extensions can be written into the JSON specification to introduce new information into the file. Applications that display glTF files are free to support these extensions or ignore them. The most successful extensions end up being ratified by the Khronos Group as official extensions and will see broader adoption.</p><p>The path to becoming a fully ratified extension can be a long one, but it all starts with a single step. The good news is that it&#8217;s easier to start than you may think. For my first extension, it only took a day to implement the initial proof of concept.</p><p>The first step for any extension is to confirm that it is, in fact, needed and to check whether anyone else has already started working on something similar. Khronos maintains a list of extensions on GitHub <a href="https://github.com/KhronosGroup/glTF/tree/main/extensions">here</a>. There are currently 22 officially ratified extensions, listed at the top, followed by 13 mature extensions that are in the final stages of ratification. There are also vendor and multi-vendor extensions from independent companies, as well as instructions for how to contribute your own.</p><p>Once you know what you want to make and that no one else has done it already, it&#8217;s time to start coding. You should have a basic idea of what new information you want to include inside the 3D file, but don&#8217;t worry if you don&#8217;t have it all figured out yet. Part of the development process is discovering <em>where</em> limitations may exist and updating your extension accordingly. In my case, I knew I needed to identify specific meshes within the file to apply a rotation based on the current time.</p><p>My initial focus was simply identifying the hour, minute, and second hands, but I also discovered that I needed to take the initial rotation into account, as well as sweeping versus ticking movement. I may later include other hand types that show the day or month.</p><p>For this guide, I&#8217;m using an <a href="https://www.khronos.org/blog/showcasing-gltfs-growing-capabilities-four-new-sample-assets-for-artists">open source 3D model of a watch</a> that my colleague Eric Chadwick recently created for our 3D Commerce Showcase.</p><h3>Naming your extension</h3><p>The anatomy of a glTF file is pretty straightforward, and you don&#8217;t need to read <a href="https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html">the entire spec</a> to figure it out. The first section you&#8217;ll want to start with is adding your extension to the extensionsUsed array:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oHsj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5244f583-ed93-4058-b01b-92f3e2cb9b0d_936x370.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oHsj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5244f583-ed93-4058-b01b-92f3e2cb9b0d_936x370.png 424w, https://substackcdn.com/image/fetch/$s_!oHsj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5244f583-ed93-4058-b01b-92f3e2cb9b0d_936x370.png 848w, https://substackcdn.com/image/fetch/$s_!oHsj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5244f583-ed93-4058-b01b-92f3e2cb9b0d_936x370.png 1272w, https://substackcdn.com/image/fetch/$s_!oHsj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5244f583-ed93-4058-b01b-92f3e2cb9b0d_936x370.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oHsj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5244f583-ed93-4058-b01b-92f3e2cb9b0d_936x370.png" width="936" height="370" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5244f583-ed93-4058-b01b-92f3e2cb9b0d_936x370.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:370,&quot;width&quot;:936,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oHsj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5244f583-ed93-4058-b01b-92f3e2cb9b0d_936x370.png 424w, https://substackcdn.com/image/fetch/$s_!oHsj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5244f583-ed93-4058-b01b-92f3e2cb9b0d_936x370.png 848w, https://substackcdn.com/image/fetch/$s_!oHsj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5244f583-ed93-4058-b01b-92f3e2cb9b0d_936x370.png 1272w, https://substackcdn.com/image/fetch/$s_!oHsj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5244f583-ed93-4058-b01b-92f3e2cb9b0d_936x370.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You can copy and paste the above code snippet directly into your file:</p><p><strong>khronos_chronograph_watch.gltf</strong></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;262153a6-81ed-44e7-a8a0-8013ec8abc51&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">{ 

  "asset": { 

    "generator": "Khronos glTF Blender I/O v4.5.49", 

    "version": "2.0" 

  }, 

  "extensionsUsed": [ 

    "KHR_draco_mesh_compression", 

    "KHR_texture_transform", 

    "KHR_materials_variants", 

    "MF_geometry_clockface" 

  ], 

  "extensionsRequired": [ 

    "KHR_draco_mesh_compression", 

    "KHR_texture_transform" 

  ], </code></pre></div><p>When naming your extension:</p><ul><li><p><strong>Choose a unique prefix that starts with a letter, not a number:</strong> I initially tried using the prefix 3DMF (the name of my domain) but ran into an issue as JavaScript variables cannot begin with numbers. You can view the list of <a href="https://github.com/KhronosGroup/glTF/blob/main/extensions/Prefixes.md">registered prefixes</a> here and even request your own if you plan to publish your extension(s). My Git pull request for the MF prefix was approved the same day, so kudos to the team for a speedy process!</p></li></ul><ul><li><p><strong>Add a scope that matches an existing glTF concept: </strong>In my case, I chose &#8220;geometry&#8221;, but &#8220;mesh&#8221; or &#8220;node&#8221; may also be a good choice. I&#8217;ll probably get feedback when I formally submit it, so I&#8217;m staying open-minded.</p></li></ul><ul><li><p><strong>Finish with a descriptive feature name</strong>: I went with &#8220;clockface&#8221; to describe the functionality. I could have made it more specific, like &#8220;analog_clockface&#8221;, but I do intend to later support digital clockfaces in the same extension, so I&#8217;m keeping it generic for now.</p></li></ul><p>You may notice I didn&#8217;t include my extension name in the extensionsRequired array. That&#8217;s because the functionality I&#8217;m adding can be safely ignored. The model will still render correctly even in viewers that don&#8217;t recognize my extension (which is most of them!).</p><p>This particular model does require support for two other pre-existing extensions. If the viewer cannot decode Draco compression or apply texture transforms, it won&#8217;t be able to display this model properly. Luckily, those are widely supported official Khronos extensions.</p><h3>Adding your metadata</h3><p>After you list the extension up top, the next step is to add it to any objects that need your additional data. In my case, there were three meshes that I wanted to include new data for: the hour, minute, and second hands. All glTF objects have an &#8220;extensions&#8221; property, and that is where I add the additional data for my extension. In my case, I decided that three new properties are important for my prototype:</p><ul><li><p>&#8220;<strong>type</strong>&#8221; uses a string to name the mesh. Here you can see that I have the types &#8220;analog_hour&#8221;, &#8220;analog_minute&#8221;, and &#8220;analog_second&#8221;. I chose to include the word &#8220;analog&#8221; to differentiate from digital clock faces that may be added later.</p></li></ul><ul><li><p>&#8220;<strong>initialValue</strong>&#8221; is important because the watch was modeled with its hands at <strong>10:08:00</strong>, which is a common position for eCommerce. If I simply required the model to be changed to make the hands point to 12 o&#8217;clock, it would simplify my code implementation, but at the cost of the hands being stuck at the top in all viewers that do not yet support my extension.</p></li></ul><blockquote></blockquote><ul><li><p>&#8220;<strong>sweeping</strong>&#8221; was added to differentiate between forcing a hand to the nearest increment (hour, minute, second) versus allowing smooth motion between positions. Most hour hands sweep between positions, such as 10:30, with the hour hand in the middle of 10 and 11. It is common for the minute hand to tick into a new position at the start of every minute. The second hand can be sweeping or ticking, depending on whether the watch is mechanical or quartz-powered.</p></li></ul><p>I did need to alter the 3D model by applying all transforms to ensure the proper orientation for rotation on the y-axis and to keep the pivot of the hands around the correct center of rotation.</p><p>Here&#8217;s what the code for the hands looks like in the .gltf file:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hqk-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6f68ca5-1518-4d29-943a-74bfc5a032e3_936x856.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hqk-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6f68ca5-1518-4d29-943a-74bfc5a032e3_936x856.png 424w, https://substackcdn.com/image/fetch/$s_!hqk-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6f68ca5-1518-4d29-943a-74bfc5a032e3_936x856.png 848w, https://substackcdn.com/image/fetch/$s_!hqk-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6f68ca5-1518-4d29-943a-74bfc5a032e3_936x856.png 1272w, https://substackcdn.com/image/fetch/$s_!hqk-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6f68ca5-1518-4d29-943a-74bfc5a032e3_936x856.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hqk-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6f68ca5-1518-4d29-943a-74bfc5a032e3_936x856.png" width="936" height="856" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d6f68ca5-1518-4d29-943a-74bfc5a032e3_936x856.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:856,&quot;width&quot;:936,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A screen shot of a computer program\n\nAI-generated content may be incorrect.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A screen shot of a computer program

AI-generated content may be incorrect." title="A screen shot of a computer program

AI-generated content may be incorrect." srcset="https://substackcdn.com/image/fetch/$s_!hqk-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6f68ca5-1518-4d29-943a-74bfc5a032e3_936x856.png 424w, https://substackcdn.com/image/fetch/$s_!hqk-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6f68ca5-1518-4d29-943a-74bfc5a032e3_936x856.png 848w, https://substackcdn.com/image/fetch/$s_!hqk-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6f68ca5-1518-4d29-943a-74bfc5a032e3_936x856.png 1272w, https://substackcdn.com/image/fetch/$s_!hqk-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd6f68ca5-1518-4d29-943a-74bfc5a032e3_936x856.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You can copy and paste the above code snippet directly into your file:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;bf0493e4-4d39-4a7f-abe5-34511351bcf2&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">{ 

      "mesh": 8, 

      "name": "Hand Hours", 

      "extensions": { 

        "MF_geometry_clockface": { 

          "type": "analog_hour", 

          "initialValue": 10.05, 

          "sweeping": true 

        } 

      } 

    }, 

    { 

      "mesh": 9, 

      "name": "Hand Minutes", 

      "extensions": { 

        "MF_geometry_clockface": { 

          "type": "analog_minute", 

          "initialValue": 8.333, 

          "sweeping": false 

        } 

      } 

    }, 

    { 

      "mesh": 10, 

      "name": "Hand Seconds", 

      "extensions": { 

        "MF_geometry_clockface": { 

          "type": "analog_second", 

          "initialValue": 0, 

          "sweeping": false 

        } 

      } 

    }, </code></pre></div><p>Hooray! With those simple changes, we now have an extension! But it&#8217;s not quite time to celebrate yet &#8212; so far, we&#8217;ve only done half of the work, and typically, this is the easy part. In order to actually make our extension useful, it needs to have at least one viewer that can read the new data and do something interesting with it.</p><h3>Implementing the viewer</h3><p>There are a lot of great glTF viewers out there, and many of them are open source. Khronos maintains a reference implementation called the <a href="https://github.com/KhronosGroup/glTF-Sample-Viewer">glTF-Sample-Viewer</a>, and this is a great place to include a reference implementation of your extension when you are ready to publish it. <a href="https://www.3dmf.com/">3D Model Foundry</a>, where I am showcasing these watches, primarily uses <a href="https://modelviewer.dev/">model-viewer</a>, an open source project from Google that is built on <a href="https://threejs.org/">three.js</a>, so that is where I did my initial development. I&#8217;ll likely add it to <a href="https://www.babylonjs.com/">Babylon.js</a> next.</p><p>Without going into the nitty-gritty of my web stack, the important part to note is that I&#8217;m using npm and coding in TypeScript. model-viewer has an <a href="https://www.npmjs.com/package/@google/model-viewer">npm package</a> that I was importing in my package.json, but now I need to fork my own copy in order to add my custom code. In this diff, you can see that I replaced the npm version with a local directory, which is where I cloned the <a href="https://github.com/google/model-viewer/releases">model-viewer project</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AXwg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56672d20-0871-4cdd-a225-2e6ac2f1b12c_624x176.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AXwg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56672d20-0871-4cdd-a225-2e6ac2f1b12c_624x176.png 424w, https://substackcdn.com/image/fetch/$s_!AXwg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56672d20-0871-4cdd-a225-2e6ac2f1b12c_624x176.png 848w, https://substackcdn.com/image/fetch/$s_!AXwg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56672d20-0871-4cdd-a225-2e6ac2f1b12c_624x176.png 1272w, https://substackcdn.com/image/fetch/$s_!AXwg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56672d20-0871-4cdd-a225-2e6ac2f1b12c_624x176.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AXwg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56672d20-0871-4cdd-a225-2e6ac2f1b12c_624x176.png" width="624" height="176" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/56672d20-0871-4cdd-a225-2e6ac2f1b12c_624x176.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:176,&quot;width&quot;:624,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A screen shot of a computer program\n\nAI-generated content may be incorrect.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A screen shot of a computer program

AI-generated content may be incorrect." title="A screen shot of a computer program

AI-generated content may be incorrect." srcset="https://substackcdn.com/image/fetch/$s_!AXwg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56672d20-0871-4cdd-a225-2e6ac2f1b12c_624x176.png 424w, https://substackcdn.com/image/fetch/$s_!AXwg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56672d20-0871-4cdd-a225-2e6ac2f1b12c_624x176.png 848w, https://substackcdn.com/image/fetch/$s_!AXwg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56672d20-0871-4cdd-a225-2e6ac2f1b12c_624x176.png 1272w, https://substackcdn.com/image/fetch/$s_!AXwg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56672d20-0871-4cdd-a225-2e6ac2f1b12c_624x176.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Now, my frontend web project references my custom code, and the browser even auto-reloads changes when I rebuild my model-viewer project, thanks to some Quasar + Vite magic.</p><p>Navigating the model-viewer project wasn&#8217;t too difficult, as the code is well-organized and relatively small. In addition to incrementing the version in package.json, I ended up editing three files. The snippet below shows the version increment used to differentiate this build from the current release:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9aNs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65e47a95-8b13-4e26-9bb8-ff59b7820cf1_624x67.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9aNs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65e47a95-8b13-4e26-9bb8-ff59b7820cf1_624x67.png 424w, https://substackcdn.com/image/fetch/$s_!9aNs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65e47a95-8b13-4e26-9bb8-ff59b7820cf1_624x67.png 848w, https://substackcdn.com/image/fetch/$s_!9aNs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65e47a95-8b13-4e26-9bb8-ff59b7820cf1_624x67.png 1272w, https://substackcdn.com/image/fetch/$s_!9aNs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65e47a95-8b13-4e26-9bb8-ff59b7820cf1_624x67.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9aNs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65e47a95-8b13-4e26-9bb8-ff59b7820cf1_624x67.png" width="624" height="67" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/65e47a95-8b13-4e26-9bb8-ff59b7820cf1_624x67.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:67,&quot;width&quot;:624,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9aNs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65e47a95-8b13-4e26-9bb8-ff59b7820cf1_624x67.png 424w, https://substackcdn.com/image/fetch/$s_!9aNs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65e47a95-8b13-4e26-9bb8-ff59b7820cf1_624x67.png 848w, https://substackcdn.com/image/fetch/$s_!9aNs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65e47a95-8b13-4e26-9bb8-ff59b7820cf1_624x67.png 1272w, https://substackcdn.com/image/fetch/$s_!9aNs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65e47a95-8b13-4e26-9bb8-ff59b7820cf1_624x67.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h4><strong>packages/model-viewer/src/three-components/ModelScene.ts</strong></h4><p>I added a TypeScript interface that matches the data in my extension, plus a reference to the mesh object that the extension is attached to, as shown in the code snippet below:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FRVS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F525878aa-ea71-4186-99ed-cc69a62ffad0_624x155.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FRVS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F525878aa-ea71-4186-99ed-cc69a62ffad0_624x155.png 424w, https://substackcdn.com/image/fetch/$s_!FRVS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F525878aa-ea71-4186-99ed-cc69a62ffad0_624x155.png 848w, https://substackcdn.com/image/fetch/$s_!FRVS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F525878aa-ea71-4186-99ed-cc69a62ffad0_624x155.png 1272w, https://substackcdn.com/image/fetch/$s_!FRVS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F525878aa-ea71-4186-99ed-cc69a62ffad0_624x155.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FRVS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F525878aa-ea71-4186-99ed-cc69a62ffad0_624x155.png" width="624" height="155" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/525878aa-ea71-4186-99ed-cc69a62ffad0_624x155.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:155,&quot;width&quot;:624,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A screen shot of a computer program\n\nAI-generated content may be incorrect.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A screen shot of a computer program

AI-generated content may be incorrect." title="A screen shot of a computer program

AI-generated content may be incorrect." srcset="https://substackcdn.com/image/fetch/$s_!FRVS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F525878aa-ea71-4186-99ed-cc69a62ffad0_624x155.png 424w, https://substackcdn.com/image/fetch/$s_!FRVS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F525878aa-ea71-4186-99ed-cc69a62ffad0_624x155.png 848w, https://substackcdn.com/image/fetch/$s_!FRVS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F525878aa-ea71-4186-99ed-cc69a62ffad0_624x155.png 1272w, https://substackcdn.com/image/fetch/$s_!FRVS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F525878aa-ea71-4186-99ed-cc69a62ffad0_624x155.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>I added two new properties to ModelScene: an array to store all analog hands and a timer object to ensure the renderer keeps drawing frames as the time changes <em>(see code snippet below)</em>. By default, if there is no animation, model-viewer pauses rendering to save power.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Fg5K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04060754-d85a-449c-8c85-aac84c6793c3_624x64.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Fg5K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04060754-d85a-449c-8c85-aac84c6793c3_624x64.png 424w, https://substackcdn.com/image/fetch/$s_!Fg5K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04060754-d85a-449c-8c85-aac84c6793c3_624x64.png 848w, https://substackcdn.com/image/fetch/$s_!Fg5K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04060754-d85a-449c-8c85-aac84c6793c3_624x64.png 1272w, https://substackcdn.com/image/fetch/$s_!Fg5K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04060754-d85a-449c-8c85-aac84c6793c3_624x64.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Fg5K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04060754-d85a-449c-8c85-aac84c6793c3_624x64.png" width="624" height="64" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/04060754-d85a-449c-8c85-aac84c6793c3_624x64.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:64,&quot;width&quot;:624,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Fg5K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04060754-d85a-449c-8c85-aac84c6793c3_624x64.png 424w, https://substackcdn.com/image/fetch/$s_!Fg5K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04060754-d85a-449c-8c85-aac84c6793c3_624x64.png 848w, https://substackcdn.com/image/fetch/$s_!Fg5K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04060754-d85a-449c-8c85-aac84c6793c3_624x64.png 1272w, https://substackcdn.com/image/fetch/$s_!Fg5K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04060754-d85a-449c-8c85-aac84c6793c3_624x64.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h4><strong>packages/model-viewer/src/model-viewer-base.ts</strong></h4><p>This is where the model is initially loaded, and I look through the JSON data for my extension. If it is found, I push the data to the analogHands property that I added to the ModelScene object. To get extension data, you just need to traverse the nodes and look for userData.gltfExtensions.{our_custom_extension}.</p><p>This is also where I create a timer callback function to ensure the viewer keeps rendering. Without this, the hands only move when the user interacts with the model and then freeze in place. model-viewer tries to save energy by pausing the animation, but we need high performance to bring our watch to life!</p><p>If the second hand is sweeping, we need to keep rendering every frame &#8212; or at least 30 frames per second &#8212; for it to look smooth. If the second hand is only ticking, it just needs to be updated every second. This is why testing is important: I initially had it call back once per second, but I found that every so often, the second hand would skip a second. This is because the callback isn&#8217;t guaranteed to run exactly every 1000 milliseconds, and if it runs a little longer, it might catch the JavaScript time at 1.999 seconds and then again at 3.001. Checking every 100 ms instead fixed the problem.</p><p><em>Note that this implementation is still being refined. I plan to adjust its placement based on community feedback when contributing it back to the main project.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sSm3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fdc3f05-f67d-4512-841a-2ec74eead09e_936x429.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sSm3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fdc3f05-f67d-4512-841a-2ec74eead09e_936x429.png 424w, https://substackcdn.com/image/fetch/$s_!sSm3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fdc3f05-f67d-4512-841a-2ec74eead09e_936x429.png 848w, https://substackcdn.com/image/fetch/$s_!sSm3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fdc3f05-f67d-4512-841a-2ec74eead09e_936x429.png 1272w, https://substackcdn.com/image/fetch/$s_!sSm3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fdc3f05-f67d-4512-841a-2ec74eead09e_936x429.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sSm3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fdc3f05-f67d-4512-841a-2ec74eead09e_936x429.png" width="936" height="429" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5fdc3f05-f67d-4512-841a-2ec74eead09e_936x429.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:429,&quot;width&quot;:936,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sSm3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fdc3f05-f67d-4512-841a-2ec74eead09e_936x429.png 424w, https://substackcdn.com/image/fetch/$s_!sSm3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fdc3f05-f67d-4512-841a-2ec74eead09e_936x429.png 848w, https://substackcdn.com/image/fetch/$s_!sSm3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fdc3f05-f67d-4512-841a-2ec74eead09e_936x429.png 1272w, https://substackcdn.com/image/fetch/$s_!sSm3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5fdc3f05-f67d-4512-841a-2ec74eead09e_936x429.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4><strong>Renderer.js</strong></h4><p>We now get to the core of the functionality. I added my code to the preRender function to update the rotations of the hands to match the time just before they are drawn to the screen. It uses the Javascript Date() function to read the system time and then creates some helper variables to store the hour, minute, second, and millisecond.</p><p>For each hand that was found when loading the file, rotation is updated based on type (e.g., hour, minute, or second). If the hand is sweeping, its rotation also includes the time between. If the second hand is sweeping, we use the millisecond value to ensure a smooth change.</p><p>Here&#8217;s the section of the renderer code that applies the real-time rotation:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!G2Kb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8747bbe-d105-409d-a44c-51110bc03276_624x450.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!G2Kb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8747bbe-d105-409d-a44c-51110bc03276_624x450.png 424w, https://substackcdn.com/image/fetch/$s_!G2Kb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8747bbe-d105-409d-a44c-51110bc03276_624x450.png 848w, https://substackcdn.com/image/fetch/$s_!G2Kb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8747bbe-d105-409d-a44c-51110bc03276_624x450.png 1272w, https://substackcdn.com/image/fetch/$s_!G2Kb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8747bbe-d105-409d-a44c-51110bc03276_624x450.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!G2Kb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8747bbe-d105-409d-a44c-51110bc03276_624x450.png" width="624" height="450" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c8747bbe-d105-409d-a44c-51110bc03276_624x450.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:450,&quot;width&quot;:624,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A screenshot of a computer screen\n\nAI-generated content may be incorrect.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A screenshot of a computer screen

AI-generated content may be incorrect." title="A screenshot of a computer screen

AI-generated content may be incorrect." srcset="https://substackcdn.com/image/fetch/$s_!G2Kb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8747bbe-d105-409d-a44c-51110bc03276_624x450.png 424w, https://substackcdn.com/image/fetch/$s_!G2Kb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8747bbe-d105-409d-a44c-51110bc03276_624x450.png 848w, https://substackcdn.com/image/fetch/$s_!G2Kb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8747bbe-d105-409d-a44c-51110bc03276_624x450.png 1272w, https://substackcdn.com/image/fetch/$s_!G2Kb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8747bbe-d105-409d-a44c-51110bc03276_624x450.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That&#8217;s it! We now have watches that display the user&#8217;s system time and animate smoothly.</p><p>For your viewing pleasure, check out this example on 3D Model Foundry:</p><blockquote><p><a href="https://c.3dmf.com/v/khronos/ec06053d3d6c">https://c.3dmf.com/v/khronos/ec06053d3d6c</a>.It is based on <a href="https://github.com/KhronosGroup/glTF-Sample-Assets/blob/main/Models/ChronographWatch">this watch</a> from the Khronos Sample Assets. Special thanks to Eric Chadwick for his work on the model for 3D Commerce and to the original author, <a href="https://sketchfab.com/tityus">graphiccompressor</a>, on Sketchfab.</p></blockquote><h3>Next steps</h3><p>Now that I have a demo app, I&#8217;m going to work with my colleagues at Khronos to review my code and then make a pull request. Note that the glTF code we have written so far is how it appears in a 3D model, but it is not the <em>specification</em> itself. For that, we create a schema file that provides a structured definition of the parameters. I named this file node.MF_geometry_clockface.schema.json and it will be submitted as a pull request to the glTF repository in the directory, glTF/extensions/2.0/Vendor/MF_geometry_clockface/schema.</p><p>Khronos requires at least one implementation but strongly recommends having two or more. In addition to this model-viewer implementation, I plan to add this functionality to the glTF-sample-viewer and Babylon.js. If you maintain a glTF viewer, please reach out!</p><p>Having a published extension is going to be great, but if the only way to add it to .glb files is through a VS Code extension, it&#8217;s not going to get used much. I&#8217;m going to add support to the 3D Model Foundry Editor, but may later make a pull request to the glTF Blender add-on to encourage broader adoption.</p><p>After deploying the analog version, I&#8217;ve got some ideas on how to handle digital clock faces next. ;-)</p><h3>Code excerpts from the working prototype</h3><p>To help illustrate how the MF_geometry_clockface extension works in practice, here are a few key excerpts from the working prototype. These show how the extension is defined in the glTF file and how viewer-side code interprets that data to drive real-time hand movement.</p><h4><strong>Defining the extension in the glTF File</strong></h4><p>The glTF snippet below shows how the hour, minute, and second hands are annotated with the extension data needed to drive rotation:</p><p><strong>khronos_chronograph_watch.gltf</strong></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;a3340527-a529-4d52-af22-f0e766666a19&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">{ 

  "asset": { 

    "generator": "Khronos glTF Blender I/O v4.5.49", 

    "version": "2.0" 

  }, 

  "extensionsUsed": [ 

    "KHR_draco_mesh_compression", 

    "KHR_texture_transform", 

    "KHR_materials_variants", 

    "MF_geometry_clockface" 

  ], 

  "extensionsRequired": [ 

    "KHR_draco_mesh_compression", 

    "KHR_texture_transform" 

  ], 

&#8230;. 

    { 

      "mesh": 8, 

      "name": "Hand Hours", 

      "extensions": { 

        "MF_geometry_clockface": { 

          "type": "analog_hour", 

          "initialValue": 10.05, 

          "sweeping": true 

        } 

      } 

    }, 

    { 

      "mesh": 9, 

      "name": "Hand Minutes", 

      "extensions": { 

        "MF_geometry_clockface": { 

          "type": "analog_minute", 

          "initialValue": 8.333, 

          "sweeping": false 

        } 

      } 

    }, 

    { 

      "mesh": 10, 

      "name": "Hand Seconds", 

      "extensions": { 

        "MF_geometry_clockface": { 

          "type": "analog_second", 

          "initialValue": 0, 

          "sweeping": false 

        } 

      } 

    }, </code></pre></div><p><strong>Repository</strong>: @google/model-viewer (<a href="https://github.com/google/model-viewer">https://github.com/google/model-viewer</a>)</p><h4><strong>Adding support in ModelScene.ts</strong></h4><p>In ModelScene.ts, we store extension metadata for each hand we discover in the model and prepare the scene to track updates:</p><p><strong>packages/model-viewer/src/three-components/ModelScene.ts</strong></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;typescript&quot;,&quot;nodeId&quot;:&quot;8601be4d-21b5-4d4d-a035-8dc2e471cc23&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-typescript">export interface ClockfaceAnalogHand { 

  initialValue: number; 

  object: Object3D|null; 

  sweeping: boolean; 

  type: string; 

} 

&#8230;. 

 

export class ModelScene extends Scene { 

&#8230;. 

  // MF_geometry_clockface extension 

  public analogHands: Array&lt;ClockfaceAnalogHand&gt; = []; 

  public clockfaceTimer: ReturnType&lt;typeof setInterval&gt; | null = null; </code></pre></div><h4><strong>Parsing extension data in model-viewer-base.ts</strong></h4><p>When model-viewer loads the scene, this block looks for any nodes using the extension and schedules continuous rendering if needed:</p><p><strong>packages/model-viewer/src/model-viewer-base.ts</strong></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;bb47e421-f772-4e93-9ae4-b5bd5a3656d7&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">[$onModelLoad]() {

// Check for any clockface hands

this[$scene].traverse((node) =&gt; {

if (node.isObject3D) {

if (node.userData.gltfExtensions &amp;&amp; node.userData.gltfExtensions.MF_geometry_clockface) {

this[$scene].analogHands.push({

initialValue: node.userData.gltfExtensions.MF_geometry_clockface.initialValue,

object: node,

sweeping: node.userData.gltfExtensions.MF_geometry_clockface.sweeping,

type: node.userData.gltfExtensions.MF_geometry_clockface.type

});

}

}

})

if (this[$scene].analogHands.length &gt; 0 &amp;&amp; this[$scene].clockfaceTimer === null) {

let callbackInterval = 500; // render 2 frames per second for ticking second hands to prevent skipping any seconds

this[$scene].analogHands.forEach((hand) =&gt; {

if (hand.type === &#8216;analog_second&#8217; &amp;&amp; hand.sweeping === true) {

callbackInterval = 33; // 30fps for smooth motion

}

});

this[$scene].clockfaceTimer = setInterval(() =&gt; {

this[$scene].queueRender();

}, callbackInterval);

}

}</code></pre></div><h4><strong>Updating the hands in Renderer.ts</strong></h4><p>Finally, the renderer applies rotation each frame based on the current system time, allowing sweeping or ticking motion depending on the configuration:</p><p><strong>packages/model-viewer/src/three-components/Renderer.ts</strong></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;javascript&quot;,&quot;nodeId&quot;:&quot;f7808c19-8f1e-4790-b5f1-19a1f0bb26e0&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-javascript">preRender(scene: ModelScene, t: number, delta: number) {

&#8230;.

// MF_geometry_clockface extension - update the hand positions, if enabled

// Note: scene.clockfaceTimer ensures rendering keeps running

if (scene.analogHands.length &gt; 0) {

const now = new Date();

const hour = now.getHours() % 12;

const minute = now.getMinutes();

const second = now.getSeconds();

const ms = now.getMilliseconds() / 1000;

scene.analogHands.forEach(hand =&gt; {

if (hand.object) {

// Note that the rotations are negative to move clockwise in a right-handed system

let newRotation = -(Math.PI / 30); // 2&#960; / 60 minutes or seconds

if (hand.type === &#8216;analog_hour&#8217;) {

newRotation = -(Math.PI / 6); // 2&#960; / 12 hours

if (hand.sweeping) {

newRotation *= (hour - hand.initialValue) + minute / 60 + (second + ms) / 3600;

} else {

newRotation *= (hour - hand.initialValue);

}

} else if (hand.type === &#8216;analog_minute&#8217;) {

if (hand.sweeping) {

newRotation *= (minute - hand.initialValue) + (second + ms) / 60;

} else {

newRotation *= (minute - hand.initialValue);

}

} else if (hand.type === &#8216;analog_second&#8217;) {

if (hand.sweeping) {

newRotation *= (second - hand.initialValue) + ms;

} else {

newRotation *= (second - hand.initialValue);

}

} else {

// If the hand type does not match one of the above, don&#8217;t change the rotation

newRotation = hand.object.rotation.y;

}

hand.object.rotation.y = newRotation

}

});

}

}</code></pre></div><p><strong>Repository</strong>: KhronosGroup/glTF (<a href="https://github.com/KhronosGroup/glTF">https://github.com/KhronosGroup/glTF</a>)</p><h4><strong>Schema definition for the extension</strong></h4><p>The schema formalizes how the extension should be structured so that other tools and viewers can implement it consistently:</p><p><strong>Extensions/2.0/Vendor/MF_geometry_clockface/scrhema/node.MF_geometry_clockface.schema.json</strong></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;0d87800f-d12b-4fa2-b255-7fcb373fa8bf&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">{

&#8220;$schema&#8221;: &#8220;http://json-schema.org/draft-04/schema&#8220;,

&#8220;title&#8221;: &#8220;MF_geometry_clockface Dynamic Time Display&#8221;,

&#8220;type&#8221;: &#8220;object&#8221;,

&#8220;description&#8221;: &#8220;Provide nodes with additional information about how they relate to time properties that can be dynamically set by the application.&#8221;,

&#8220;allOf&#8221;: [{ &#8220;$ref&#8221;: &#8220;glTFProperty.schema.json&#8221; }],

&#8220;properties&#8221;: {

&#8220;initialValue&#8221;: {

&#8220;type&#8221;: &#8220;number&#8221;,

&#8220;description&#8221;: &#8220;The value of the time property that the initial model displays before any adjustments are applied. For example, an analog clock modeled with sweeping hands at 10:10 would have 0 for the initial value of the second hand, 10 for the initial value of the minute hand, and 10.1667 for the initial value of the hour hand.&#8221;,

&#8220;default&#8221;: 0,

&#8220;minimum&#8221;: 0

},

&#8220;sweeping&#8221;: {

&#8220;type&#8221;: &#8220;boolean&#8221;,

&#8220;description&#8221;: &#8220;When true for an analog type, the rotation adjustment includes fractional values. For example, the hour hand at 10:30 would be positioned between 10 and 11. When false, values are rounded down to the nearest whole number, so a non-sweeping hour hand would still point to 10 at 10:59.&#8221;,

&#8220;default&#8221;: false

},

&#8220;type&#8221;: {

&#8220;type&#8221;: &#8220;string&#8221;,

&#8220;description&#8221;: &#8220;Specifies what time value this element relates to. Analog types are rotated around their Y axis and the type is used to determine the angle for a given value.&#8221;,

&#8220;anyOf&#8221;: [

{

&#8220;enum&#8221;: [&#8221;analog_hour&#8221;],

&#8220;description&#8221;: &#8220;The hour hand on a 12 hour analog clock. Both noon and midnight have a 0 degree rotation.&#8221;

},

{

&#8220;enum&#8221;: [&#8221;analog_minute&#8221;],

&#8220;description&#8221;: &#8220;The minute hand on an analog clock. At the top of each hour it has a 0 degree rotation.&#8221;

},

{

&#8220;enum&#8221;: [&#8221;analog_second&#8221;],

&#8220;description&#8221;: &#8220;The second hand on an analog clock. At the start of each minute it has a 0 degree rotation.&#8221;

}

]

},

&#8220;extensions&#8221;: {},

&#8220;extras&#8221;: {}

},

&#8220;required&#8221;: [&#8221;type&#8221;]

}</code></pre></div><p>These excerpts cover the essential pieces of the prototype: how the extension is defined, parsed, and brought to life in the viewer. With these in place, the analog watch can display real-time motion driven directly from system time.</p><h2 style="text-align: justify;"><strong>Top Dev Headlines (November 2025)</strong></h2><ul><li><p style="text-align: justify;"><strong><a href="https://80.lv/articles/screen-space-mesh-blending-in-blender-4-5-s-compositor">&#127912; Blender 4.5 Compositor Adds Screen-Space Mesh Blending</a></strong><em><strong>:</strong> </em>In a demo for Blender 4.5, designer Shahzod Boyhonov showcased a screen-space mesh-blending workflow that rivals real-time engine VFX. The upcoming add on is expected to streamline intricate compositing for stills and animation alike.</p></li></ul><blockquote></blockquote><ul><li><p style="text-align: justify;"><strong><a href="https://www.uploadvr.com/meta-horizon-engine-horizon-worlds-tech/">&#128640; Meta Platforms Unveils Next-Gen &#8220;Horizon Engine&#8221; for VR Worlds</a>:</strong> At Meta Connect 2025, Meta revealed the new Horizon Engine powering <em>Horizon Worlds</em>, promising 4&#215; faster loading times and support for well over 100 concurrent users in one space. Aiming to revitalize its metaverse push, the upgrade also introduces creator-focused tools.</p></li></ul><blockquote></blockquote><ul><li><p style="text-align: justify;"><strong><a href="https://www.rizomuv.com/feature/rizomuv-2025-whats-new/">&#129513; RizomUV 2025 Launches with GPU Packing &amp; Scene Outliner</a>:</strong> The latest version of this UV-mapping tool adds GPU-accelerated packing (3 to 4&#215; faster), four new packing &#8220;strategies,&#8221; and a scene outliner feature to manage complex models more efficiently, optimized for game and VFX workflows.</p></li></ul><blockquote></blockquote><ul><li><p style="text-align: justify;"><strong><a href="https://www.pcgamer.com/sims-5-project-rene-multiplayer-gameplay-features/">&#127969; Project Rene Prepares Multiplayer Platform, Not &#8220;The Sims 5&#8221;</a>:</strong> Electronic Arts&#8217; next major <em>Sims</em> title will launch as &#8220;Project Rene,&#8221; a free-to-play, cross-platform experience with multiplayer features. It&#8217;s designed to run alongside <em>The Sims 4</em>, not replace it.</p></li></ul><h2 style="text-align: justify;"><strong>Tool of the Week: Raptor</strong></h2><p style="text-align: justify;">Developed by <a href="https://coldrock.games/index.php">Coldrock Games</a>, <a href="https://coldrock.games/www/raptor.php">Raptor</a> is a powerful open-source framework that expands GameMaker Studio&#8217;s capabilities for both indie and professional developers. It provides a complete toolkit for rapid prototyping and full-scale production, featuring robust state machines, encrypted save systems, UI and camera management, dynamic animation tools, and debugging utilities. With features like frame-independent AnimCurves, versioned and tamper-proof savegames, and a Random Content Engine (RACE) for procedural generation, Raptor lets developers focus on shaping gameplay and creative vision while the framework handles the heavy technical lifting.</p><p style="text-align: justify;">Designed to replace repetitive setup work, Raptor helps developers structure large projects, keep cleaner code, and focus on gameplay instead of boilerplate. Available in both free and Pro versions, it gives teams flexibility to work the way they prefer. Keep an eye on the <a href="https://coldrock.games/www/courses.php">Raptor courses page</a> for updates; pre-recorded modules are expected in 2026.</p><h2 style="text-align: justify;"><strong>Upcoming Game Dev Events</strong></h2><ul><li><p style="text-align: justify;"><strong><a href="https://asia.siggraph.org/2025/">SIGGRAPH Asia 2025 (Hong Kong, Dec 15-18)</a></strong>: A world-leading conference on computer graphics, interactive techniques, AI, XR, and animation. With the 2025 theme &#8220;Generative Renaissance&#8221;, the event brings together researchers, creators, and studios from more than 50 countries, featuring over 400 sessions and an expected 7,000 attendees. <a href="https://registration.asia.siggraph.org/">Registration</a> closes on December 18, 2025.</p></li></ul><blockquote></blockquote><ul><li><p style="text-align: justify;"><strong><a href="https://www.globalgamesshow.com/abu-dhabi/">Global Games Show 2025 (Abu Dhabi, Dec 10&#8211;11)</a></strong>: This major B2B gaming summit converges game studios, publishers, tech-providers, investors, and esports professionals for two high-energy days of talks and networking. Expect over 200 speakers, 100+ sponsors, and global gaming leaders.</p></li></ul><blockquote></blockquote><ul><li><p style="text-align: justify;"><strong><a href="https://www.icegaming.com/">ICE Barcelona 2026 (Barcelona, Jan 19-21 2026)</a></strong>: A premier trade show for gaming, iGaming, payments, and entertainment technology. With 55,000+ attendees and 600+ exhibitors, it&#8217;s a hotspot for industry trends, cross-sector networking, and innovation. <a href="https://ice.reg.buzz/?_gl=1*19p7h1q*_gcl_au*ODIyMzMyMzE1LjE3NjIyNjkyNzg.*_ga*MTk2NTQzMjY0Mi4xNzYyMjY4NTUz*_ga_MSEQLQ3X1J*czE3NjIyNjg1NTIkbzEkZzEkdDE3NjIyNzAxNjEkajYwJGwwJGgw#otid=453005398735">Registration</a> is now open for the event.</p></li></ul><h2 style="text-align: justify;"><strong>Quick Dev Tips</strong></h2><ul><li><p style="text-align: justify;"><strong>Working with glTF files in Blender: </strong>Did you know that Blender ships with built-in support for glTF files? It&#8217;s not enabled by default, but you can simply enable it from the <strong>Add-ons</strong> in <strong>Preferences</strong>, as shown below:</p></li></ul><blockquote></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!d6iw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5628f5be-becc-4a67-9717-1a495851db23_704x601.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!d6iw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5628f5be-becc-4a67-9717-1a495851db23_704x601.png 424w, https://substackcdn.com/image/fetch/$s_!d6iw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5628f5be-becc-4a67-9717-1a495851db23_704x601.png 848w, https://substackcdn.com/image/fetch/$s_!d6iw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5628f5be-becc-4a67-9717-1a495851db23_704x601.png 1272w, https://substackcdn.com/image/fetch/$s_!d6iw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5628f5be-becc-4a67-9717-1a495851db23_704x601.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!d6iw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5628f5be-becc-4a67-9717-1a495851db23_704x601.png" width="704" height="601" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5628f5be-becc-4a67-9717-1a495851db23_704x601.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:601,&quot;width&quot;:704,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A screenshot of a computer\n\nAI-generated content may be incorrect.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A screenshot of a computer

AI-generated content may be incorrect." title="A screenshot of a computer

AI-generated content may be incorrect." srcset="https://substackcdn.com/image/fetch/$s_!d6iw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5628f5be-becc-4a67-9717-1a495851db23_704x601.png 424w, https://substackcdn.com/image/fetch/$s_!d6iw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5628f5be-becc-4a67-9717-1a495851db23_704x601.png 848w, https://substackcdn.com/image/fetch/$s_!d6iw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5628f5be-becc-4a67-9717-1a495851db23_704x601.png 1272w, https://substackcdn.com/image/fetch/$s_!d6iw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5628f5be-becc-4a67-9717-1a495851db23_704x601.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Once enabled, you will see support for glTF and glb files in the <strong>Import</strong> and <strong>Export</strong> menus:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wmwB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3928115a-f807-4a92-b5bb-2f9ff8e8795f_666x333.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wmwB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3928115a-f807-4a92-b5bb-2f9ff8e8795f_666x333.png 424w, https://substackcdn.com/image/fetch/$s_!wmwB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3928115a-f807-4a92-b5bb-2f9ff8e8795f_666x333.png 848w, https://substackcdn.com/image/fetch/$s_!wmwB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3928115a-f807-4a92-b5bb-2f9ff8e8795f_666x333.png 1272w, https://substackcdn.com/image/fetch/$s_!wmwB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3928115a-f807-4a92-b5bb-2f9ff8e8795f_666x333.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wmwB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3928115a-f807-4a92-b5bb-2f9ff8e8795f_666x333.png" width="666" height="333" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3928115a-f807-4a92-b5bb-2f9ff8e8795f_666x333.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:333,&quot;width&quot;:666,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A screenshot of a computer\n\nAI-generated content may be incorrect.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A screenshot of a computer

AI-generated content may be incorrect." title="A screenshot of a computer

AI-generated content may be incorrect." srcset="https://substackcdn.com/image/fetch/$s_!wmwB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3928115a-f807-4a92-b5bb-2f9ff8e8795f_666x333.png 424w, https://substackcdn.com/image/fetch/$s_!wmwB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3928115a-f807-4a92-b5bb-2f9ff8e8795f_666x333.png 848w, https://substackcdn.com/image/fetch/$s_!wmwB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3928115a-f807-4a92-b5bb-2f9ff8e8795f_666x333.png 1272w, https://substackcdn.com/image/fetch/$s_!wmwB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3928115a-f807-4a92-b5bb-2f9ff8e8795f_666x333.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When exporting a glTF file, you can choose to bundle all of the data into a single file (.glb), which is the most common option for distribution. If you are working with custom extensions, you should export separate files so that you can view and edit the JSON data in a text editor.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!upqD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b567277-da20-4ab4-a4af-cd60acb54f80_684x174.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!upqD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b567277-da20-4ab4-a4af-cd60acb54f80_684x174.png 424w, https://substackcdn.com/image/fetch/$s_!upqD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b567277-da20-4ab4-a4af-cd60acb54f80_684x174.png 848w, https://substackcdn.com/image/fetch/$s_!upqD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b567277-da20-4ab4-a4af-cd60acb54f80_684x174.png 1272w, https://substackcdn.com/image/fetch/$s_!upqD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b567277-da20-4ab4-a4af-cd60acb54f80_684x174.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!upqD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b567277-da20-4ab4-a4af-cd60acb54f80_684x174.png" width="684" height="174" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5b567277-da20-4ab4-a4af-cd60acb54f80_684x174.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:174,&quot;width&quot;:684,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A screenshot of a computer\n\nAI-generated content may be incorrect.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A screenshot of a computer

AI-generated content may be incorrect." title="A screenshot of a computer

AI-generated content may be incorrect." srcset="https://substackcdn.com/image/fetch/$s_!upqD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b567277-da20-4ab4-a4af-cd60acb54f80_684x174.png 424w, https://substackcdn.com/image/fetch/$s_!upqD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b567277-da20-4ab4-a4af-cd60acb54f80_684x174.png 848w, https://substackcdn.com/image/fetch/$s_!upqD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b567277-da20-4ab4-a4af-cd60acb54f80_684x174.png 1272w, https://substackcdn.com/image/fetch/$s_!upqD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b567277-da20-4ab4-a4af-cd60acb54f80_684x174.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><ul><li><p style="text-align: justify;"><strong>Essential Blender Export settings for glTF files: </strong>When exporting a glTF file from Blender, there are a lot of options available, as shown in the screenshot below:</p></li></ul><blockquote></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yCaF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88f3bf5a-ee97-44b3-8d08-2a0e1d467949_411x1309.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yCaF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88f3bf5a-ee97-44b3-8d08-2a0e1d467949_411x1309.png 424w, https://substackcdn.com/image/fetch/$s_!yCaF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88f3bf5a-ee97-44b3-8d08-2a0e1d467949_411x1309.png 848w, https://substackcdn.com/image/fetch/$s_!yCaF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88f3bf5a-ee97-44b3-8d08-2a0e1d467949_411x1309.png 1272w, https://substackcdn.com/image/fetch/$s_!yCaF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88f3bf5a-ee97-44b3-8d08-2a0e1d467949_411x1309.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yCaF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88f3bf5a-ee97-44b3-8d08-2a0e1d467949_411x1309.png" width="411" height="1309" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/88f3bf5a-ee97-44b3-8d08-2a0e1d467949_411x1309.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1309,&quot;width&quot;:411,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yCaF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88f3bf5a-ee97-44b3-8d08-2a0e1d467949_411x1309.png 424w, https://substackcdn.com/image/fetch/$s_!yCaF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88f3bf5a-ee97-44b3-8d08-2a0e1d467949_411x1309.png 848w, https://substackcdn.com/image/fetch/$s_!yCaF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88f3bf5a-ee97-44b3-8d08-2a0e1d467949_411x1309.png 1272w, https://substackcdn.com/image/fetch/$s_!yCaF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88f3bf5a-ee97-44b3-8d08-2a0e1d467949_411x1309.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>These are the ones that I mostly change from the defaults:</p><ul><li><p><strong>Include</strong> | <strong>Limit to Selected Objects</strong>: This allows me to export only the parts of the file that I want to publish. I often have other reference geometry in the same .blend file, such as a photogrammetry scan, and I want to keep that data out of my final deliverable.</p></li></ul><ul><li><p><strong>Data</strong> | <strong>Material</strong> | <strong>Images WebP Format</strong>: A recently ratified extension to glTF allows the use of the WebP image format. It offers great texture size reduction, and, unlike JPEG, it has support for an alpha channel. This means materials using the alpha channel for opacity don&#8217;t have to be kept as large PNG files. Be aware, however, that reducing image quality can lead to compression artifacts, so always check the results of the export in a web viewer.</p></li></ul><ul><li><p><strong>Data</strong> | <strong>Compression (turn on)</strong>: Clicking the <strong>Compression</strong> check box applies the Draco mesh compression extension. It is widely supported; however, note that it&#8217;s most useful for larger meshes with complex geometry. Try exporting with and without it enabled to see the impact it has on your .glb file size. As a general rule of thumb, if it saves more than half a megabyte, it&#8217;s worth using. Less than that is generally not, because the viewer will also need to download the Draco decompression code.</p></li></ul><ul><li><p><strong>Edit and repackage glTF files in VS Code with glTF Tools</strong>: If you are working with custom glTF extensions that are not natively supported by your content creation exporter, such as Blender, you will need a way to edit the glTF JSON data and repackage changes back into a .glb binary file.</p></li></ul><blockquote></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vQmU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73fc4c94-be4c-4893-8043-f41e273c3c12_678x345.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vQmU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73fc4c94-be4c-4893-8043-f41e273c3c12_678x345.png 424w, https://substackcdn.com/image/fetch/$s_!vQmU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73fc4c94-be4c-4893-8043-f41e273c3c12_678x345.png 848w, https://substackcdn.com/image/fetch/$s_!vQmU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73fc4c94-be4c-4893-8043-f41e273c3c12_678x345.png 1272w, https://substackcdn.com/image/fetch/$s_!vQmU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73fc4c94-be4c-4893-8043-f41e273c3c12_678x345.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vQmU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73fc4c94-be4c-4893-8043-f41e273c3c12_678x345.png" width="678" height="345" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/73fc4c94-be4c-4893-8043-f41e273c3c12_678x345.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:345,&quot;width&quot;:678,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A screenshot of a computer\n\nAI-generated content may be incorrect.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A screenshot of a computer

AI-generated content may be incorrect." title="A screenshot of a computer

AI-generated content may be incorrect." srcset="https://substackcdn.com/image/fetch/$s_!vQmU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73fc4c94-be4c-4893-8043-f41e273c3c12_678x345.png 424w, https://substackcdn.com/image/fetch/$s_!vQmU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73fc4c94-be4c-4893-8043-f41e273c3c12_678x345.png 848w, https://substackcdn.com/image/fetch/$s_!vQmU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73fc4c94-be4c-4893-8043-f41e273c3c12_678x345.png 1272w, https://substackcdn.com/image/fetch/$s_!vQmU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73fc4c94-be4c-4893-8043-f41e273c3c12_678x345.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://code.visualstudio.com/">VS Code</a> is a free text editor with its own large library of extensions. The <a href="https://marketplace.visualstudio.com/items?itemName=cesium.gltf-vscode">glTF Tools</a> extension can be used to unpack the JSON data and supporting files from a glb file. Follow these steps:</p><ol><li><p style="text-align: justify;">First, open the .glb file. You&#8217;ll see a message about binary data.</p></li></ol><ol start="2"><li><p style="text-align: justify;">Instead of clicking <strong>Open Anyway</strong>, right-click on the filename and select <strong>Import from GLB</strong>.</p></li></ol><blockquote></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JvZu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0aba681-580e-4b08-9d7f-cccca338e9a1_641x409.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JvZu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0aba681-580e-4b08-9d7f-cccca338e9a1_641x409.png 424w, https://substackcdn.com/image/fetch/$s_!JvZu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0aba681-580e-4b08-9d7f-cccca338e9a1_641x409.png 848w, https://substackcdn.com/image/fetch/$s_!JvZu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0aba681-580e-4b08-9d7f-cccca338e9a1_641x409.png 1272w, https://substackcdn.com/image/fetch/$s_!JvZu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0aba681-580e-4b08-9d7f-cccca338e9a1_641x409.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JvZu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0aba681-580e-4b08-9d7f-cccca338e9a1_641x409.png" width="641" height="409" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b0aba681-580e-4b08-9d7f-cccca338e9a1_641x409.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:409,&quot;width&quot;:641,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;A screenshot of a computer\n\nAI-generated content may be incorrect.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="A screenshot of a computer

AI-generated content may be incorrect." title="A screenshot of a computer

AI-generated content may be incorrect." srcset="https://substackcdn.com/image/fetch/$s_!JvZu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0aba681-580e-4b08-9d7f-cccca338e9a1_641x409.png 424w, https://substackcdn.com/image/fetch/$s_!JvZu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0aba681-580e-4b08-9d7f-cccca338e9a1_641x409.png 848w, https://substackcdn.com/image/fetch/$s_!JvZu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0aba681-580e-4b08-9d7f-cccca338e9a1_641x409.png 1272w, https://substackcdn.com/image/fetch/$s_!JvZu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0aba681-580e-4b08-9d7f-cccca338e9a1_641x409.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You can edit the glTF JSON data in the editor and also benefit from code completion and validation. When you are finished, right-click on the .glft file name and choose <strong>Export to GLB</strong> to repackage all of the files back into a single .glb file.</p><h2 style="text-align: justify;"><strong>Game Dev Jobs Board (Full-time/Contract)</strong></h2><p style="text-align: justify;"><em>Looking for work or talent? Here are a few interesting openings from November 2025:</em></p><ul><li><p style="text-align: justify;"><strong><a href="https://hitmarker.net/jobs/cd-projekt-red-senior-gameplay-programmer-1515510">Senior Gameplay Programmer</a></strong><a href="https://hitmarker.net/jobs/cd-projekt-red-senior-gameplay-programmer-1515510"> at CD PROJEKT RED</a> &#8211; <em>Full-time, Remote (USA).</em> <br></p></li></ul><ul><li><p style="text-align: justify;"><strong><a href="https://jobs.arrowheadgamestudios.com/jobs/6469618-senior-gameplay-programmer">Senior Gameplay Programmer</a></strong><a href="https://jobs.arrowheadgamestudios.com/jobs/6469618-senior-gameplay-programmer"> at Arrowhead Game Studios</a> &#8211; <em>Full-time, On-site, but hybrid is also possible (Sweden).</em></p></li></ul><blockquote></blockquote><ul><li><p style="text-align: justify;"><strong><a href="https://www.workwithindies.com/careers/bad-galaxy-games-environmental-artist">Environmental Artist</a></strong><a href="https://www.workwithindies.com/careers/bad-galaxy-games-environmental-artist"> at Bad Galaxy Games</a> &#8211; <em>Contract, Remote (USA).</em> <br></p></li></ul><ul><li><p style="text-align: justify;"><strong><a href="https://www.workwithindies.com/careers/creator-games-software-engineer?06575dfd_page=2">Software Engineer </a></strong><a href="https://www.workwithindies.com/careers/creator-games-software-engineer?06575dfd_page=2">at Creator Games</a> &#8211; <em>Contract, Remote.</em> <br></p></li></ul><ul><li><p style="text-align: justify;"><strong><a href="https://jobs.gamesindustry.biz/job/unreal-developers-london-remote-ps60k-doe-43334?source=frontpage">Unreal Developers</a></strong><a href="https://jobs.gamesindustry.biz/job/unreal-developers-london-remote-ps60k-doe-43334?source=frontpage"> at Datascope</a> &#8211; <em>Remote (across Europe).</em></p></li></ul><p style="text-align: justify;"><em>(Note: Jobs are sourced from company postings and other boards &#8211; positions may fill quickly!)</em></p><h2 style="text-align: justify;"><strong>Game Drop &#8211; Indie Spotlight Game</strong></h2><p style="text-align: justify;"><a href="https://korbohned.itch.io/immortality-incremental">Immortality Factory</a> &#8211; In this slick incremental from indie dev KorbohneD, you build a magical factory of forbidden knowledge after being expelled for dabbling in immortality. Automate bizarre processes, craft machines, and sell your arcane wares in a surreal pixel-art world. Available now for free on itch.io, with a Windows download available.</p><h3 style="text-align: justify;"><strong>Closing &#8211; Until Next Week</strong></h3><p style="text-align: justify;">We hope you enjoyed this issue and found something to spark your creativity.&#128578; <strong>If you enjoyed this issue, please share it</strong> with a fellow dev or your community; it helps us grow and keep bringing you great stories, tools, and tips. Hit <em>reply</em> to share what you&#8217;d like to see more of, or to submit your own project for a future spotlight or game drop.</p><p style="text-align: justify;">Keep building, keep experimenting, and we&#8217;ll see you next time with more news, inspiration, and dev magic.</p><p style="text-align: justify;">Thanks,</p><p style="text-align: justify;">Game Dev Assembly team</p>]]></content:encoded></item><item><title><![CDATA[Game Devs, Meet Your New AI Co-Developer ]]></title><description><![CDATA[In this inaugural issue, we dive into how AI is speeding up workflows, catch up on big engine news, spotlight an indie dev&#8217;s 8-year overnight success, and more.]]></description><link>https://gamedevnewsletter.substack.com/p/game-devs-meet-your-new-ai-co-developer</link><guid isPermaLink="false">https://gamedevnewsletter.substack.com/p/game-devs-meet-your-new-ai-co-developer</guid><dc:creator><![CDATA[Game Dev Assembly Editors]]></dc:creator><pubDate>Mon, 19 May 2025 05:56:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/3b6a9d23-00bf-44fc-a1b7-f12bd0edd678_1200x630.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>Editor&#8217;s Note</h1><p style="text-align: justify;">Hello and welcome to the first issue of Game Dev Pro! &#127881; We&#8217;re excited to kick off this newsletter, tailored for indie developers from solo creators to small and mid-sized studios. Each week, we&#8217;ll be sharing a curated batch of tips, news, and tools to help level up your game development journey. In this inaugural issue, we dive into how AI is speeding up workflows, catch up on big engine news, spotlight an indie dev&#8217;s 8-year overnight success, and more. Thank you for reading &#8211; let&#8217;s build some great games together!</p><h1 style="text-align: justify;"><strong>Featured Deep Dive: These AI Tools Are Eating Game Dev for Breakfast</strong></h1><h4>In 2025, AI isn&#8217;t knocking on game development&#8217;s door. It&#8217;s already moved in, rearranged the furniture, and started making games with us.</h4><p>According to the GDC <em>State of the Game Industry 2025</em> <strong><a href="https://reg.gdconf.com/state-of-game-industry-2025">report</a></strong>, 73% of game studios already use AI in development, with 88% planning to expand its use. Another <strong><a href="https://www.meshy.ai/blog/ai-game-development">survey</a></strong> by Meshy found that 70% of developers are already adopting AI asset generation, showing just how quickly these tools are becoming standard. The momentum is spilling over into the indie scene, where developers are increasingly adopting AI-driven tools to automate tedious tasks and boost creativity. And this naturally leads to the question: <strong>what does this mean for small teams or solo devs?</strong> Potentially, AI means faster content creation (39% of studios report productivity boosts of 20%+), smarter NPCs that adapt to players, and more time to focus on design.</p><p>One major area is <strong>content generation</strong>. AI can now assist in generating art, animations, level layouts, and even sound effects. For example, <strong><a href="https://wnhub.io/news/engines/item-43381">Unity&#8217;s</a></strong> new AI-based tool <em>Sentis </em>allows developers to run neural networks in-engine for tasks like procedural animation and playtesting, with free unlimited model inference, the ability to generate smart NPC behaviors, and reductions in CPU load by up to 50% in some workflows. This means an indie platformer could have an AI agent automatically test levels, or an RPG could use AI to generate hundreds of item icons in a consistent style. According to Unity, these tools can speed up rendering and reduce CPU load by 30&#8211;50% in some cases, which is a significant efficiency win for small teams.</p><p><strong>AI-assisted game design</strong> is also on the rise, offering small teams a way around resource gaps. Need some quick level ideas? Generative level design tools use algorithms to draft layouts that you can then tweak, blending procedural generation with your creative control. About <strong><a href="https://www.meshy.ai/blog/ai-game-development">70% of developers</a></strong> are now using or plan to use 3D asset generators, which can spit out quick models or textures as a starting point. For small teams and solo devs, this means producing quick models or textures. <strong><a href="http://biff.ai/">Tools</a></strong> like <em>Meshy</em> or <em>Scenario</em> can produce concept art or 3D models from text prompts, helping teams without dedicated artists. Of course, these aren&#8217;t push-button magic&#8212;a human touch is needed to refine and implement the assets, but they can <strong>slash the time</strong> spent on placeholders and inspire creative ideas.</p><p>That said, the most game-changing use of AI is in <strong>gameplay and testing</strong>. Without a dedicated QA team, small studios can use AI-driven QA bots to play through their builds tirelessly to find bugs or balancing issues. On the gameplay side, AI can make worlds feel more alive. Studios report that <em><strong><a href="https://www.meshy.ai/blog/ai-game-development">39%</a></strong> saw productivity boosts of 20% or more</em> using AI. But it&#8217;s not just about speed. For players, AI can mean enemies or NPCs that learn and adapt. Imagine a strategy game where AI controls opponents that genuinely evolve their tactics, keeping even veteran players on their toes. <strong><a href="https://investors.unity.com/news/news-details/2025/Unity-Announces-Enhanced-Engine-Performance-and-Stability-New-Platforms-and-AI-Powered-Workflows-at-GDC-2025/">Unity</a></strong> is integrating &#8220;agentic&#8221; AI right into the editor, letting devs train game agents for testing or even for live gameplay, reducing the need for manual playthroughs.</p><blockquote><p>AI in game development gets plenty of hype, but it&#8217;s already delivering tangible results. <strong><a href="https://biff.ai/10-essential-ai-tools-for-game-development-in-2025/">For instance</a></strong>, an indie dev used <strong>Unity ML-Agents</strong> (an open-source machine learning toolkit) to train a better enemy AI that adjusted to player behavior, leading to a more engaging experience. By offloading complex AI behavior design to a training process, small dev teams can achieve more sophisticated gameplay without hand-coding every possibility.</p></blockquote><p><strong>Caveats?</strong> AI tools aren&#8217;t a silver bullet. They require learning and iteration to use effectively. And there are creative concerns: developers must ensure AI-generated content fits their vision and doesn&#8217;t feel generic. There&#8217;s also the consideration of maintaining a personal art style and avoiding over-reliance on algorithms. For Indie devs who wear many hats, AI can handle the grunt work, but <em>direction</em> and <em>polish</em> still rest with human creators.</p><p>Overall, AI is shaping up to be a powerful &#8220;co-developer&#8221; rather than a replacement. It can brainstorm with us, handle the boring bits, and even surprise us with novel solutions! As one survey noted, <strong><a href="https://www.meshy.ai/blog/ai-game-development">76% of people</a></strong> have a positive attitude towards AI&#8217;s role in gaming, and nearly all devs (<strong><a href="https://investors.unity.com/news/news-details/2025/Unity-Announces-Enhanced-Engine-Performance-and-Stability-New-Platforms-and-AI-Powered-Workflows-at-GDC-2025/">96%</a></strong> in Unity&#8217;s latest report) are now incorporating some form of AI in their workflow. For indie teams, the takeaway is clear: embracing these AI tools can mean working <em>smarter</em>, iterating faster, and freeing up your time to focus on what truly matters, crafting a fun and unique player experience.</p><div><hr></div><p><em>This article is written by <strong><a href="https://www.linkedin.com/in/rohit-rajkumar/">Rohit Rajkumar</a></strong> </em>as part of the latest issue of Game Dev Assembly Newsletter.</p><p><em>Portfolio Director, Game Development</em></p><p><em>Packt Publishing</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://gamedevnewsletter.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://gamedevnewsletter.substack.com/subscribe?"><span>Subscribe now</span></a></p><h2 style="text-align: justify;"><strong>Top Dev Headlines (Early June 2025)</strong></h2><ul><li><p style="text-align: justify;"><strong><a href="https://investors.unity.com/news/news-details/2025/Unity-Announces-Enhanced-Engine-Performance-and-Stability-New-Platforms-and-AI-Powered-Workflows-at-GDC-2025/">&#128295;Unity 6.1 Boosts Performance</a>:</strong> Unity&#8217;s April update delivers up to 50% lower CPU/GPU load, WebGPU support, and foldable/mobile optimizations. AI-assisted workflows are coming later this year. <br></p></li></ul><ul><li><p style="text-align: justify;"><strong><a href="https://tech.yahoo.com/general/articles/5-impressive-unreal-engine-5-100000318.html">&#127908;Unreal Engine 5.5 Lands at Unreal Fest (June 2-5)</a>:</strong> Epic&#8217;s latest update brings smoother animation, better rendering, and upgraded <a href="https://www.unrealengine.com/en-US/blog/unreal-engine-5-5-is-now-available">MetaHuman</a> facial animation from audio &#8212; with <a href="https://www.youtube.com/watch?v=6f0Ag7zqE5c">5.6</a> rumored soon. <br></p></li></ul><ul><li><p style="text-align: justify;"><strong><a href="https://steamcommunity.com/groups/steamworks/announcements/detail/497187349280587904">&#127918;Steam Next Fest Starts June 9</a>:</strong> Free demos, livestreams, and wishlist boosts &#8212; perfect for visibility. Summer Sale follows on June 26, so prep those promos. <br></p></li></ul><ul><li><p style="text-align: justify;"><strong><a href="https://wnhub.io/news/other/item-47702">&#128176;Epic Store Drops Revenue Cut</a>:</strong> EGS now takes 0% on the first $1M per game/year. Great news for premium indies &#8212; more profit and no engine royalty on their store. <br></p></li></ul><ul><li><p style="text-align: justify;"><strong><a href="https://wnhub.io/news/engines/item-47674">&#127757;Unity for Humanity Awards $600k</a>:</strong> Unity funds 10 impactful games tackling topics like stroke recovery, reef conservation, and mental health. Game dev can spark real change.</p></li></ul><h2 style="text-align: justify;"><strong>Tool of the Week: Unity ML-Agents Toolkit</strong></h2><p style="text-align: justify;"><strong><a href="https://biff.ai/10-essential-ai-tools-for-game-development-in-2025/">Unity ML-Agents Toolkit</a></strong> &#8211; Use machine learning in Unity to train NPCs or simulate playtests. Open-source, Python-based, and ideal for creating adaptive AI with minimal manual scripting.</p><h2><strong>Dev Spotlight: Dogubomb &#8211; 8 Years to an Overnight Indie Hit</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eHz9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83c65246-0049-459f-a9eb-7ad8a466781e_395x127.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eHz9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83c65246-0049-459f-a9eb-7ad8a466781e_395x127.png 424w, https://substackcdn.com/image/fetch/$s_!eHz9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83c65246-0049-459f-a9eb-7ad8a466781e_395x127.png 848w, https://substackcdn.com/image/fetch/$s_!eHz9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83c65246-0049-459f-a9eb-7ad8a466781e_395x127.png 1272w, https://substackcdn.com/image/fetch/$s_!eHz9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83c65246-0049-459f-a9eb-7ad8a466781e_395x127.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eHz9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83c65246-0049-459f-a9eb-7ad8a466781e_395x127.png" width="395" height="127" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/83c65246-0049-459f-a9eb-7ad8a466781e_395x127.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:127,&quot;width&quot;:395,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Dogubomb Studios&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Dogubomb Studios" title="Dogubomb Studios" srcset="https://substackcdn.com/image/fetch/$s_!eHz9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83c65246-0049-459f-a9eb-7ad8a466781e_395x127.png 424w, https://substackcdn.com/image/fetch/$s_!eHz9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83c65246-0049-459f-a9eb-7ad8a466781e_395x127.png 848w, https://substackcdn.com/image/fetch/$s_!eHz9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83c65246-0049-459f-a9eb-7ad8a466781e_395x127.png 1272w, https://substackcdn.com/image/fetch/$s_!eHz9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F83c65246-0049-459f-a9eb-7ad8a466781e_395x127.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Image Source: Dogubomb</figcaption></figure></div><p style="text-align: justify;">This week, we spotlight Dogubomb, the solo studio of Tonda Ros, whose debut game <em><a href="https://en.wikipedia.org/wiki/Blue_Prince_(video_game)">Blue Prince</a></em> released in April 2025 has quickly earned critical acclaim. But this &#8220;overnight hit&#8221; was 8 years in the making. Built in Unity and published by Raw Fury, Blue Prince blends roguelike exploration, puzzle-solving, and evolving mansion layouts inspired by tabletop games and the puzzle book Maze. Each run reveals new secrets, encouraging players to share notes, stream strategies, and treat this solo game like a <a href="https://www.gamedeveloper.com/design/is-blue-prince-s-success-due-to-social-play-">co-op experience</a>.</p><p style="text-align: justify;">Tonda did everything&#8212;design, code, art&#8212;until Raw Fury came on board. His journey is a masterclass in perseverance, prototyping, and staying true to a unique vision. The result? A truly fresh indie experience now available on PC and consoles.</p><h2 style="text-align: justify;"><strong>Quick Dev Tips</strong></h2><ul><li><p style="text-align: justify;"><strong>Version Control is a Must:</strong> If you&#8217;re not using version control yet, start now. Tools like Git (with GitHub or GitLab) are free and will save your project from accidental catastrophes. Regular commits also let you experiment freely, knowing you can roll back if needed. </p></li></ul><ul><li><p style="text-align: justify;"><strong>Iterate with Player Feedback:</strong> Don&#8217;t develop in a vacuum. Even if your game isn&#8217;t ready for the public, get a few playtesters (friends, Discord communities, etc.) to try it and give feedback. Watching someone play your game can reveal pain points in minutes that you might miss for months. </p></li></ul><ul><li><p style="text-align: justify;"><strong>Optimize Last, Build First:</strong> As a small dev, it&#8217;s easy to get caught up chasing perfect code or ultra-optimized shaders from the start. Focus on getting your game playable and fun with a quick prototype. Only optimize performance when you know what actually needs it. Premature optimization can waste time &#8211; make it fun, then make it fast.</p></li></ul><h2 style="text-align: justify;"><strong>Game Dev Jobs Board (Remote/Contract)</strong></h2><p style="text-align: justify;"><em>(Looking for work or talent? Here are a few interesting openings from early June 2025 &#8211; all remote-friendly!)</em></p><ul><li><p style="text-align: justify;"><strong><a href="https://remote.work/jobs/senior-unity-game-developer-at-smg-studio">Senior Unity Game Developer (Multiplayer)</a></strong><a href="https://remote.work/jobs/senior-unity-game-developer-at-smg-studio"> at SMG Studio</a> &#8211; <em>Full-time, Remote.</em> </p></li></ul><ul><li><p style="text-align: justify;"><strong><a href="https://www.indeed.com/q-ghostpunch-games-jobs.html?vjk=5e85f563e8f633f8">Contract Generalist Programmer (Unreal Engine)</a></strong><a href="https://www.indeed.com/q-ghostpunch-games-jobs.html?vjk=5e85f563e8f633f8"> at Ghostpunch Games</a> &#8211; <em>Contract, Remote (US).</em> </p></li></ul><ul><li><p style="text-align: justify;"><strong><a href="https://www.workwithindies.com/careers/finji-interactive-writer?aa7505fa_page=2">Interactive Writer</a></strong><a href="https://www.workwithindies.com/careers/finji-interactive-writer?aa7505fa_page=2"> at Finji</a> &#8211; <em>1-year Contract, Remote.</em> </p></li></ul><ul><li><p style="text-align: justify;"><strong><a href="https://www.workwithindies.com/careers/elsewhere-2d-art-generalist">2D Art Generalist</a></strong><a href="https://www.workwithindies.com/careers/elsewhere-2d-art-generalist"> at Elsewhere</a> &#8211; <em>Contract, SF or Remote.</em> </p></li></ul><ul><li><p style="text-align: justify;"><strong><a href="https://www.workwithindies.com/careers/human-computer-level-designer?aa7505fa_page=2">2D Level Designer</a></strong><a href="https://www.workwithindies.com/careers/human-computer-level-designer?aa7505fa_page=2"> at Human Computer</a> &#8211; <em>3-month Contract, Remote (PST hours).</em></p></li></ul><p style="text-align: justify;"><em>(Note: Jobs are sourced from company postings on Work With Indies and other boards &#8211; positions may fill quickly!)</em></p><h2 style="text-align: justify;"><strong>Game Drop &#8211; Indie Spotlight Game</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YXmi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c0a4b8-94d4-48de-b02d-5fbd9ed678f4_616x353.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YXmi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c0a4b8-94d4-48de-b02d-5fbd9ed678f4_616x353.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YXmi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c0a4b8-94d4-48de-b02d-5fbd9ed678f4_616x353.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YXmi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c0a4b8-94d4-48de-b02d-5fbd9ed678f4_616x353.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YXmi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c0a4b8-94d4-48de-b02d-5fbd9ed678f4_616x353.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YXmi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c0a4b8-94d4-48de-b02d-5fbd9ed678f4_616x353.jpeg" width="616" height="353" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8c0a4b8-94d4-48de-b02d-5fbd9ed678f4_616x353.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:353,&quot;width&quot;:616,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Consume Me on Steam&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Consume Me on Steam" title="Consume Me on Steam" srcset="https://substackcdn.com/image/fetch/$s_!YXmi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c0a4b8-94d4-48de-b02d-5fbd9ed678f4_616x353.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YXmi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c0a4b8-94d4-48de-b02d-5fbd9ed678f4_616x353.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YXmi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c0a4b8-94d4-48de-b02d-5fbd9ed678f4_616x353.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YXmi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8c0a4b8-94d4-48de-b02d-5fbd9ed678f4_616x353.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Image Source: Steam</figcaption></figure></div><p style="text-align: justify;"><strong><a href="https://www.npr.org/2025/03/20/nx-s1-5334560/here-are-the-standout-video-games-at-the-independent-games-festival-awards">Consume Me</a></strong> &#8211; by Jenny Jiao Hsia explores body image and teenage struggles through mini-games and diary storytelling. It just won <a href="https://www.digitalspy.com/tech/a64232427/igf-2025-winners/">IGF&#8217;s Grand Prize and Nuovo Award</a> &#8211; raw, personal, and one to watch in 2025.</p><h3 style="text-align: justify;"><strong>Closing &#8211; Until Next Week</strong></h3><p style="text-align: justify;">That&#8217;s a wrap for our first issue of <em>Game Dev Pro</em>! I hope you found these insights useful and inspiring. &#128578; <strong>If you enjoyed this newsletter, please consider sharing it</strong> with a fellow developer or on your socials &#8211; it really helps us grow the community. You can subscribe (if you haven&#8217;t already) to get this in your inbox every week. </p><p style="text-align: justify;">We&#8217;d also love to hear from you: take our survey and let us know what you&#8217;d like to see more of.</p><blockquote><p style="text-align: justify;">To submit your own project for a future spotlight or game drop, submit your pitch to <a href="mailto:gamedevnewsletter@packt.com">gamedevnewsletter@packt.com</a>.</p></blockquote><p style="text-align: justify;">Thank you for reading, and <strong>good luck with your projects this week</strong>! Whether you&#8217;re fixing that stubborn bug or finishing a prototype, remember that every small step brings your game closer to life. Stay creative, keep pushing, and see you next week for more tips and news. </p><p style="text-align: justify;"><strong>Happy developing! &#128640;</strong></p>]]></content:encoded></item><item><title><![CDATA[Stay tuned for a Game Dev-focused newsletter packed with expert insights, trends, and best practices ]]></title><description><![CDATA[Tailored for Indie developers, AAA Professionals, and Tech Artists! As a bonus, get a FREE ebook after you Sign up!]]></description><link>https://gamedevnewsletter.substack.com/p/stay-tuned-for-a-game-dev-focused</link><guid isPermaLink="false">https://gamedevnewsletter.substack.com/p/stay-tuned-for-a-game-dev-focused</guid><dc:creator><![CDATA[Game Dev Assembly Editors]]></dc:creator><pubDate>Mon, 05 May 2025 05:55:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ijwT!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11356843-c2b1-440d-b730-f3aa37800c92_600x600.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://gamedevnewsletter.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://gamedevnewsletter.substack.com/subscribe?"><span>Subscribe now</span></a></p><h3>What you'll get</h3><div><hr></div><ul><li><p>Trends and updates in game engines, AI, VR, and more </p></li><li><p>Special discounts and deals with Packt &amp; partners</p></li><li><p>Curated job opportunities in game dev and tech art</p></li><li><p>Premium perks like downloadable resources</p></li><li><p>Technical deep-dives into Unity, Unreal Engine, and next-gen tools -whether you&#8217;re indie, pro</p></li><li><p>Exclusive content - mini tutorials, expert Q&amp;As, and behind-the-scenes case studies</p></li><li><p><strong>...and more!</strong></p><p></p></li></ul>]]></content:encoded></item></channel></rss>