<?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[Benjamin Gare]]></title><description><![CDATA[C, Game Development, Software Industry, Cigars, Cigar Rolling.]]></description><link>https://www.benjamingare.com</link><image><url>https://substackcdn.com/image/fetch/$s_!o8Wa!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf903a50-7ebe-406b-a2b3-dd206c77ecbc_846x846.png</url><title>Benjamin Gare</title><link>https://www.benjamingare.com</link></image><generator>Substack</generator><lastBuildDate>Thu, 16 Apr 2026 20:25:45 GMT</lastBuildDate><atom:link href="https://www.benjamingare.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Benjamin Gare]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[benjamingare@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[benjamingare@substack.com]]></itunes:email><itunes:name><![CDATA[Benjamin Gare]]></itunes:name></itunes:owner><itunes:author><![CDATA[Benjamin Gare]]></itunes:author><googleplay:owner><![CDATA[benjamingare@substack.com]]></googleplay:owner><googleplay:email><![CDATA[benjamingare@substack.com]]></googleplay:email><googleplay:author><![CDATA[Benjamin Gare]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Map Editor and Design Decisions]]></title><description><![CDATA[Getting my thoughts on paper.]]></description><link>https://www.benjamingare.com/p/map-editor-and-design-decisions</link><guid isPermaLink="false">https://www.benjamingare.com/p/map-editor-and-design-decisions</guid><dc:creator><![CDATA[Benjamin Gare]]></dc:creator><pubDate>Fri, 04 Jul 2025 14:59:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!LzTn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92fca014-1c71-4b0f-81b0-874c2ab76752_1278x753.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>For Smash Hyper Drive I needed to make a map editor to place things in a meaningful manner for the rooms.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!LzTn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92fca014-1c71-4b0f-81b0-874c2ab76752_1278x753.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!LzTn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92fca014-1c71-4b0f-81b0-874c2ab76752_1278x753.png 424w, https://substackcdn.com/image/fetch/$s_!LzTn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92fca014-1c71-4b0f-81b0-874c2ab76752_1278x753.png 848w, https://substackcdn.com/image/fetch/$s_!LzTn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92fca014-1c71-4b0f-81b0-874c2ab76752_1278x753.png 1272w, https://substackcdn.com/image/fetch/$s_!LzTn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92fca014-1c71-4b0f-81b0-874c2ab76752_1278x753.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!LzTn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92fca014-1c71-4b0f-81b0-874c2ab76752_1278x753.png" width="1278" height="753" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/92fca014-1c71-4b0f-81b0-874c2ab76752_1278x753.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:753,&quot;width&quot;:1278,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:54619,&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://www.benjamingare.com/i/167524779?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92fca014-1c71-4b0f-81b0-874c2ab76752_1278x753.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_!LzTn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92fca014-1c71-4b0f-81b0-874c2ab76752_1278x753.png 424w, https://substackcdn.com/image/fetch/$s_!LzTn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92fca014-1c71-4b0f-81b0-874c2ab76752_1278x753.png 848w, https://substackcdn.com/image/fetch/$s_!LzTn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92fca014-1c71-4b0f-81b0-874c2ab76752_1278x753.png 1272w, https://substackcdn.com/image/fetch/$s_!LzTn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92fca014-1c71-4b0f-81b0-874c2ab76752_1278x753.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></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.benjamingare.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">This Substack is reader-supported. To receive new posts and support my work, consider becoming a free or paid subscriber.</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>I have developed a map editor and this then brought on more things that I needed to decide.</p><p>Rooms (&#8220;maps&#8221;) will typically have the same layout on room start no matter how they are picked. X amount of bad guys in the room in Y location. The game will decide where to place the doors. I the designer will decide where it can place those doors if it is going to use them.</p><p>This led me to understanding that the collision boxes for the walls aren&#8217;t going to be predefined, but they will depend on the doors in the room. There are a lot of tricks I can use to simplify how I approach this, but in my case I&#8217;m going with top,bot,left,right wall doors. That simplifies the need to do collision detection to determine if a wall should have a gap for the door or not.</p><p>In the map editor, I was thinking to have multiple layers for a door. First layer would be the door itself. The second layer would be what to show if the door is not present. This can be doodads and other things. Which leads me to the idea that I need to have a way to control all that.</p><p>Doodads can be managed by simple</p><pre><code>struct doodad {
int posX;
int posY;
AtlasSprite sprite; // Gives the texturePosX PosY width height for rendering
};



</code></pre><p>This works out fine to start. Unfortunately, I can see this growing into something bigger if the doodad has animations. And if I want to have interactions I will need a whole different things. I could do the monolith struct approach. I have to think more on this.</p><p>For simplicity sake, I can move forwards with the idea of doors and them being &#8220;enabled/disabled&#8221; and drawing the collision boxes with that data. That will at least get the game to a playable state. The additional task of visual layers is a concept I definitely want to flesh out.</p><p>Which I could do so now.</p><p>Visual layers can be used when a door is disabled. I&#8217;m thinking of quite a few ways to utilize it.</p><ul><li><p>Blank</p></li><li><p>Decor Set 1</p></li><li><p>Decor Set 2</p></li><li><p>Decor Set 3</p></li></ul><p>Which would be 3 unique styles and a default empty style for the wall. This would help spruce things up with variety. You may have noticed by now I have 2 styles I want things to have: </p><ul><li><p>Random - RogueLike</p></li><li><p>HandCrafted - Designed by a human.</p></li></ul><p>In this game I&#8217;m going to combine a lot of randomness and handcrafted elements. Randomness will decide which handcrafted elements to use. So we will have deliberate puzzles, room layouts, etc. However, we will have random connections between rooms and the floors will have random layout per run. Mid session bosses could be picked from a pool.</p><p>Ultimately my design decision here is that the game is deliberate events laid out semi-randomly through a playthrough. This allows for my game design skills to shine while also increasing replayability.</p><p>That is all for now. I needed to get my thoughts on paper so I could move forwards in development.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.benjamingare.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">This Substack is reader-supported. To receive new posts and support my work, consider becoming a free or paid subscriber.</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[Hype and Ruin]]></title><description><![CDATA[AI, BlockChain, Kubernetes, Docker]]></description><link>https://www.benjamingare.com/p/hype-and-ruin</link><guid isPermaLink="false">https://www.benjamingare.com/p/hype-and-ruin</guid><dc:creator><![CDATA[Benjamin Gare]]></dc:creator><pubDate>Mon, 09 Jun 2025 13:55:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!o8Wa!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf903a50-7ebe-406b-a2b3-dd206c77ecbc_846x846.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The seasoned veteran will always stop the beginner and ask him why. Especially, when the beginner is so eager to introduce new things.</p><p>One may ask, why do you stop him? The veteran may say &#8220;I don&#8217;t, I just question him.&#8221; And often, the questioning still stop the blunders. The veteran is strong and able to keep his team safe from pitfalls. All is good.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.benjamingare.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">This Substack is reader-supported. To receive new posts and support my work, consider becoming a free or paid subscriber.</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>The executives seeking funding will not stop the investors. The investors are beginners typically when it comes to technology. They hear the phrases: blockchain, AI, kubernetes, docker and the drool begins to form.</p><p>The executives don&#8217;t stop the beginner. The veterans do. However, when the veterans aren&#8217;t guarding the gates and the executives go around their veterans they get junior level opinions and all of their blunders.</p><p>A junior engineer loves to learn. He wants to keep growing. These are especially good things. However, the junior does not know the consequences of his decisions to a company and that isn&#8217;t in the center of his mind, yet. </p><p>Because the junior wants to learn he will be very eager to accept a new technology. The junior may have not learned how to push back effectively. This leads the junior to outright accepting their bosses requests. Days or weeks later the veteran might catch on and stop the junior and have a private discussion with the executive. The veteran has to slow him down a bit and refocus him. He has to stop the pitfalls of eager technology adopting in favor of using what is present effectively. He can not be a fanboy.</p><p>Sometimes this is all too late and the mistakes are on production, the executive doesn&#8217;t want to &#8220;go backwards&#8221; and the junior is frustrated. This is textbook how to get bad technology decisions into production and setup landmines for later.</p><p>These future landmines come out as simple exceptions added to the logs, missed production releases, delayed projects, frustrated team members, and employee turn over. The marching drum of &#8220;This is how we have always done it&#8221; keeps beating. Beating your company to death.</p><ul><li><p>How do we get out of this mess?</p></li><li><p>Do we really have to become the veteran and stop the mindless technology creep?</p></li><li><p>Do we have to stop our investors from making mistakes?</p></li><li><p>Do we need to train our executives to listen to their technology team?</p></li></ul><p>I emphatically say &#8220;Yes.&#8221;</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.benjamingare.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">This Substack is reader-supported. To receive new posts and support my work, consider becoming a free or paid subscriber.</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></channel></rss>