Pete Makes Games
banner
pete.petemakesgames.com.ap.brid.gy
Pete Makes Games
@pete.petemakesgames.com.ap.brid.gy
Part-Time Game Dev With a Full-Time Job

🌉 bridged from ⁂ https://www.petemakesgames.com/, follow @ap.brid.gy to interact
Being iced into the house for most of the week is certainly a boon to productivity, and I made the most of that time to make solid progress on Just Beneath the Holler’s prototype. My objectives for this week were simple, though not easy: make a new tileset […]

[Original post on petemakesgames.com]
Sunday Show Out - 2/1/2026
<p>Being iced into the house for most of the week is certainly a boon to productivity, and I made the most of that time to make solid progress on <em>Just Beneath the Holler</em>’s prototype. <a href="https://www.petemakesgames.com/monday-map-out-1-26-2026/" rel="noreferrer">My objectives for this week</a> were simple, though not easy: make a new tileset, use that tileset to make a new map for the Place Just Beneath, and implement the infinite-scrolling code I’d written into that new world. I completed every one of those objectives, but only with the time afforded to me by a frozen week off school.</p><p>And, even then, it’s not great, but it <strong>exists</strong> and can be <strong>refined</strong>.</p><h3 id="what-did-i-do">What did I do?</h3><p>I started with a sketch of what I’d hoped would be the complete tileset for <em>JBtH</em>’s prototype. I thought about landforms the Place Just Beneath should have and drew those tiles along with tiles for the boundaries between those. A few hours of later, I had a visual list of the tiles I needed:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.petemakesgames.com/content/images/2026/01/place_just_beneath_procreate_sketch.jpg" class="kg-image" alt="A pencil sketch of a tileset." loading="lazy" width="1448" height="1448" srcset="https://www.petemakesgames.com/content/images/size/w600/2026/01/place_just_beneath_procreate_sketch.jpg 600w, https://www.petemakesgames.com/content/images/size/w1000/2026/01/place_just_beneath_procreate_sketch.jpg 1000w, https://www.petemakesgames.com/content/images/2026/01/place_just_beneath_procreate_sketch.jpg 1448w" /><figcaption><span style="white-space:pre-wrap">I'm inordinately proud of that tree.</span></figcaption></figure><p>I then imported that sketch to its own layer in new Aseprite (hint, convert the native Aseprite file to RGB color instead of indexed color or the sketch will import poorly) and used that layer to lay down pixels until I had something that resembled a complete tileset. My time spent refining the color palette paid off, as the tileset looked really good for a first attempt.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.petemakesgames.com/content/images/2026/01/jbth_place_just_beneath_tileset_2.jpg" class="kg-image" alt="A tileset containing grass, dirt, water, trees, and a plateau." loading="lazy" width="320" height="320" /><figcaption><span style="white-space:pre-wrap">Yes, that plateau </span><b><strong style="white-space:pre-wrap">does</strong></b><span style="white-space:pre-wrap"> look Zelda-like.</span></figcaption></figure><p>(Interesting aside: The rounded corners were made by shaving off eight, then five, then three pixels. Three, five, and eight are fifth, sixth, and seventh numbers in the <a href="https://www.mathsisfun.com/numbers/fibonacci-sequence.html" rel="noreferrer">Fibonacci sequence</a>. I don’t know if there’s a correlation between the Fibonacci sequence and aesthetic corners, but I also don’t know if there’s <em>not</em>.)</p><p>Now that I had a shiny new tileset to play with, I could build a larger version of the Place Just Beneath. I decided on a square map made of 192 tiles on a side. With 16x16 tiles, that comes out to a 3,072x3,072 (pixel) map. That’s <strong>36,864 tiles</strong>, or <strong>9,437,184 pixels</strong>.</p><p>Remember how the Fibonacci sequence was a neat, almost comforting, bit of math that I noticed? This was the opposite. How was I going to place over <em>nine million pixels</em>? Even if I went by tile count, that felt like a Sisyphean task.</p><p>I’ve trained myself to step back in stressful situations and take an objective look. It’s not always successful, but it never fails to make me feel more grounded. As I thought about those numbers, I realized that I didn’t have to paint each tile, let alone each pixel, by hand. I was making landforms, and landforms are based on patterns. It’s the difference between painting with brush strokes vs. pointillism. I could do brush strokes. It’d take a while, but nowhere near as long as I’d first feared.</p><p>I imported my new tilemap, set collision layers on the necessary tiles, and began painting a new Place Just Beneath. It took three days, but I finished it. As I painted my new world, I discovered that I’d not accounted for every necessary tile. The urge to stop, create that tile, and continue was strong, but I knew that would just waste time and energy. Instead, I created a list of tiles I’d need to create as I went along. Some examples of tiles I’ll need to create:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.petemakesgames.com/content/images/2026/01/place_just_beneath_water_grass_boundary.jpg" class="kg-image" alt="A pixel representation of the boundary between grass and water." loading="lazy" width="1294" height="740" srcset="https://www.petemakesgames.com/content/images/size/w600/2026/01/place_just_beneath_water_grass_boundary.jpg 600w, https://www.petemakesgames.com/content/images/size/w1000/2026/01/place_just_beneath_water_grass_boundary.jpg 1000w, https://www.petemakesgames.com/content/images/2026/01/place_just_beneath_water_grass_boundary.jpg 1294w" /><figcaption><span style="white-space:pre-wrap">The lilac color is for dirt, when it should be teal, for water.</span></figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.petemakesgames.com/content/images/2026/01/place_just_beneath_waters_edge.jpg" class="kg-image" alt="A pixel representation of a deep-purple, grassy peninsula." loading="lazy" width="1026" height="761" srcset="https://www.petemakesgames.com/content/images/size/w600/2026/01/place_just_beneath_waters_edge.jpg 600w, https://www.petemakesgames.com/content/images/size/w1000/2026/01/place_just_beneath_waters_edge.jpg 1000w, https://www.petemakesgames.com/content/images/2026/01/place_just_beneath_waters_edge.jpg 1026w" /><figcaption><span style="white-space:pre-wrap">I need a "wrap-around" grass-and-dirt tile for one-tile peninsulas.</span></figcaption></figure><p>That’s really not many, and I’m proud of what I’d accomplished on my first attempt at making an actual game world. It was good enough in the moment to create this, the current Place Just Beneath:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.petemakesgames.com/content/images/2026/01/place_just_beneath_map-1.jpg" class="kg-image" alt="A pixel world map." loading="lazy" width="672" height="669" srcset="https://www.petemakesgames.com/content/images/size/w600/2026/01/place_just_beneath_map-1.jpg 600w, https://www.petemakesgames.com/content/images/2026/01/place_just_beneath_map-1.jpg 672w" /><figcaption><span style="white-space:pre-wrap">There's a lot there, even if it is disjointed!</span></figcaption></figure><p>It’s not without its problems, but it’s also complete. I added repeating tiles on all four sides, implemented my infinite-scrolling code, and tested it. It worked.</p><p>I mean, it actually <em>worked</em>.</p><p>I had a convincing, infinite world that could be mistaken for a confused fever dream.</p><p><strong>Huh. I did it.</strong></p><h3 id="what-did-i-learn">What did I learn?</h3><p>While this wasn’t new knowledge, I was for the repeated lesson of “log the mistakes and move on”. I’m getting better and relegating issues to a to-do list that I can come back to when the task is finished. My time is precious, especially with school starting back next week, and training myself to just let things go, even temporarily, frees my mind and my time to get the big jobs done.</p><p>The Place Just Beneath is a world, but it doesn’t <em>feel</em> like it, yet. The landforms are put together in slapdash fashion with no regards to actual geography. I need to study game worlds, specifically those of top-down action games and RPGs. There are a variety of Hyrules to research, for instance. And of course, there’s the real world itself. What does our world look like? How is it arranged? Why is it arranged that way? For goodness’ sake, I taught plate tectonics for ten years, I can at least learn to apply it.</p><p>In terms of technical knowledge, I learned how to apply layers when creating a world. I couldn’t just set a tree down on a plateau, for example, or the tree tiles’ transparency would erase the underlying plateau tile. I had to create a new layer for trees of end up with this:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.petemakesgames.com/content/images/2026/01/place_just_beneath_tree_transparency.jpg" class="kg-image" alt="A pixel tree surrounded by a plateau. The tree's transparency has deleted part of the plateau, exposing the grass underneath." loading="lazy" width="615" height="680" srcset="https://www.petemakesgames.com/content/images/size/w600/2026/01/place_just_beneath_tree_transparency.jpg 600w, https://www.petemakesgames.com/content/images/2026/01/place_just_beneath_tree_transparency.jpg 615w" /><figcaption><span style="white-space:pre-wrap">Nothing breaks the illusion like a tree deleting its surroundings from existence.</span></figcaption></figure><p>And, while I haven’t used them yet, I learned about <a href="https://docs.godotengine.org/en/stable/classes/class_canvasitem.html#class-canvasitem-property-z-index" rel="noreferrer">Z-indices</a> and <a href="https://kidscancode.org/godot_recipes/4.x/2d/using_ysort/index.html" rel="noreferrer">Y-sorting</a>, which allow for neat things like Zel walking behind or in front of trees. That’s another item on the to-do list.</p><h3 id="what%E2%80%99s-next">What’s next?</h3><p>I must once again be conservative when deciding on my weekly objectives. I have a world, but it’s empty. Zel’s currently wandering the Place Just Beneath alone and full of equal parts boredom, fear, and unease. She needs things to do, posts to grapple and enemies to kill. If I can give her those things next week, I’ll feel like I’ve kept my momentum. You should <a href="https://www.petemakesgames.com/start-here/#/portal/signup" rel="noreferrer">subscribe to the newsletter</a> to see how that goes.</p><p>Thanks again for joining me on this journey!</p>
www.petemakesgames.com
February 1, 2026 at 6:01 AM
It’s amazing what a week off of work will allow one to accomplish. I used last week’s terrain sketch and mood scene to create an initial tileset for the Place Just Beneath. By “initial,” I don’t mean “first tileset I made for Just Beneath the Holler,” I […]

[Original post on petemakesgames.com]
Thursday Turn Out - 1/29/2026
<p>It’s amazing what a week off of work will allow one to accomplish. I used last week’s <a href="https://www.petemakesgames.com/thursday-turn-out-1-22-2026/" rel="noreferrer">terrain sketch</a> and <a href="https://www.petemakesgames.com/sunday-show-out-1-25-2026/" rel="noreferrer">mood scene</a> to create an initial tileset for the Place Just Beneath. By “initial,” I don’t mean “first tileset I made for <em>Just Beneath the Holler</em>,” I mean “first tileset containing reasonable detail and coloring, <em>ever</em>”. The previous tilesets I’ve made have consisted of colored blocks, some of which included the extra detail of lettering. I’d like to say I had a good reason for including the lettering at the time, but my thought process was likely some variation of “now I’ll know which tiles are which because the color didn’t differentiate them enough”. Here’s <em>JBtH</em>’s first tileset:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.petemakesgames.com/content/images/2026/01/jbth_original_land_just_above.jpg" class="kg-image" alt="A game map made of salmon and rust red blocks, each stamepd with &quot;rw&quot;. There is a green square, representing Zel, in the middle of the level and a purple &quot;fp&quot; block representing a teleport to the Place Just Beneath." loading="lazy" width="2000" height="1290" srcset="https://www.petemakesgames.com/content/images/size/w600/2026/01/jbth_original_land_just_above.jpg 600w, https://www.petemakesgames.com/content/images/size/w1000/2026/01/jbth_original_land_just_above.jpg 1000w, https://www.petemakesgames.com/content/images/size/w1600/2026/01/jbth_original_land_just_above.jpg 1600w, https://www.petemakesgames.com/content/images/2026/01/jbth_original_land_just_above.jpg 2020w" /><figcaption><span style="white-space:pre-wrap">"rw" stands for real world. The dark red blocks are barriers, and the block labeled "fp" is a portal to the Place Just Beneath. No, I can't remember why I labeled it "fp".</span></figcaption></figure><p>And this is what I accomplished this week:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.petemakesgames.com/content/images/2026/01/place_just_beneath_tileset_2.png" class="kg-image" alt="A tileset showing terrain (grassy and rocky), waterways, grappling posts, logs, and rocks." loading="lazy" width="320" height="320" /><figcaption><span style="white-space:pre-wrap">That cliff is unbelievably similar to those in </span><i><em class="italic" style="white-space:pre-wrap">A Link to the Past</em></i><span style="white-space:pre-wrap">. I intentionally shared a smaller image: I want the finer details to be revealed when I build the revised Place Just Beneath.</span></figcaption></figure><p>I can’t help but be impressed with myself. This tileset is a long way from where I want the finished art to be, but it’s a longer way from where I started. That’s real progress and there’s no point in devaluing the hard work and research I put into the tileset to make that progress possible. I had to learn an entire new program (<a href="https://www.aseprite.org/" rel="noreferrer">Aseprite</a>) and take a crash course in <a href="https://www.youtube.com/watch?v=aK3fylUa7T0" rel="noreferrer">color theory</a> to get here.</p><p>My advisor told me, as his PhD advisor told him, that a doctorate is nothing more than a license to do science. While I don’t think my advisor envisioned that my degree in physical chemistry would have led me to creating my own game, the research skills and diligence I developed during my years in graduate school are transferable and have served me well.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.petemakesgames.com/content/images/2026/01/chemistry_colored_solutions.jpg" class="kg-image" alt="A collectin of round-bottomed, and Erlenmeyer flaskes, all connected with glass and rubber tubing. Each flask contains a colored solution." loading="lazy" width="1280" height="956" srcset="https://www.petemakesgames.com/content/images/size/w600/2026/01/chemistry_colored_solutions.jpg 600w, https://www.petemakesgames.com/content/images/size/w1000/2026/01/chemistry_colored_solutions.jpg 1000w, https://www.petemakesgames.com/content/images/2026/01/chemistry_colored_solutions.jpg 1280w" /><figcaption><span style="white-space:pre-wrap">My PhD allows me to confidently identify each of these solutions (they're all water with food coloring added to them). Image by </span><a href="https://pixabay.com/users/klare82-12367/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=65306" rel="noreferrer"><span style="white-space:pre-wrap">chiara tiberti</span></a><span style="white-space:pre-wrap"> from </span><a href="https://pixabay.com//?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=65306" rel="noreferrer"><span style="white-space:pre-wrap">Pixabay</span></a><span style="white-space:pre-wrap">.</span></figcaption></figure><p>I didn’t just work on the tileset this week. I’d been using the same logo for all three types of posts here as well as for my <a href="https://www.youtube.com/playlist?list=PL8XBtPQDqCQj-n6iVGw5uNAFHehrKqcyi" rel="noreferrer">podcast</a> (which you should listen and subscribe to, it’s five minutes a day because we’re both busy!). Yes, each one had different words, but we’re programmed to differentiate colors and shapes first. In the ever-scrolling world of social media, it was too easy for those four, technically distinct images to fade into the “I’ve already seen this” background. Also, the pixelated font was getting on my nerves.</p><p>I created four new images, as well as new logos for this site, my <a href="https://www.facebook.com/profile.php?id=61586296534515" rel="noreferrer">Facebook page</a>, and <a href="https://www.youtube.com/@petemakesgames" rel="noreferrer">YouTube channel</a>. You’ve already seen the new images for Monday Map Outs, Thursday Turn Outs, and the podcast. You’ll see the new image for Sunday Show Outs on, and this may come as a complete surprise, <em>Sunday</em>. I like the new icons: they’re distinct while still maintaining my identity.</p><p>It’s been a productive week, but I’m ready to get out of the house today. Maybe I’ll grab some lunch, maybe I’ll get a coffee, maybe I’ll just walk through the grocery store aisles and dissociate amongst the cereals. After that, I’ll fire up Godot and use this tileset to create a new, sprawling level in which to incorporate the infinite-scrolling code. I’d like to get that done by Sunday, but we’ll see.</p><p>As always, thanks for reading, and please <a href="https://www.petemakesgames.com/start-here/#/portal/signup" rel="noreferrer">subscribe</a>!</p>
www.petemakesgames.com
January 29, 2026 at 6:02 AM
Monday Map Out - 1/26/2026
It’s Sunday at 5:30 AM and we’re officially iced in. The roads, wet with the slushy mixture of ice, sleet, and rain which intermittently fell all day yesterday, are now coated in the treacherous slickness brought forth by intensifying sleet and plunging temperatures. We’re in this house for at least two days. However, we still have power and water, so I don’t have any excuses not to work on the prototype. The goals for this week are: * Finish sketching the Place Just Beneath’s tileset; * Turn that into an _actual_ tileset in Aseprite; * Build a larger, playable Place Just Beneath; and * Implement the infinite-scrolling technique to the world. I anticipate that assigning collision layers and masks to the terrain, building the world, and ensuring the world loops seamlessly will take most of my time this week, which means I need to work quickly on the sketch and tileset. I’m still slow at building terrain in Godot: the process isn’t yet intuitive to me and I spend a lot of time just trying to remember _what_ I’m supposed to do before I actually get to _doing it_. It might be worth the additional time to research addons to make the process easier. Regardless of the exact shape these goals take, I have an entire week, half of which will be spent iced into the house, to knock them out. Come back Thursday to see how far I’ve come. Thanks!
www.petemakesgames.com
January 26, 2026 at 6:00 AM
Sunday Show Out - 1/25/2026
Last week, I talked about returning to the routine of teaching, implying that routine would carry through the entire semester. Of course, I hadn’t considered the week’s weather outlook, particularly the impending ice storm predicted for the week’s end. I'm somewhere in that dot labeled "Shreveport. That's a whole lot of pink and purple headed for us. It’s currently 30°F (–1.1°C for everyone that uses a sensible temperature scale) and getting colder by the hour: it won’t be warmer than it is now until Monday afternoon. It’s cold, needles of ice are shrieking from the sky, and the Sun will rise on a grey, silent landscape. Fortunately, we rarely lose power, have all the food (including snacks) we need, and are dripping the taps so, hopefully, the pipes won’t freeze. We’re hunkered down and ready to wait this storm out. I work at a residential high school, and, out of an abundance of caution, the administration canceled classes this past Friday and all of next week: the goal was to get kids home and make sure they stayed there until the weather had passed and any power/water outages were restored. Ideally, this gives me over a week of downtime to work on _Just Beneath the Holler_ , which is necessary as I didn’t get a lot done this week. Well, that’s not _entirely_ true. I did quite a bit of work for the game, just not a lot for the May prototype. That’s not to say I accomplished _nothing_ : it’s just that most of the work was laying the groundwork for more substantial progress later. That seems to be a running theme for me, but I think that’s how game development works: most of the actual work is never seen by the player because it’s done in service of making “tangible” work possible. ### What did I do? I need a new tileset to create a more sprawling, mysterious Place Just Beneath and, since tiles represent different forms of terrain, I created a “mood scene” with common terrain and an initial pass at a foreboding, otherworldly color palette (I used Alien Dish from Lospec). I used Procreate and drew the scene on top of a grid so I could determine the exact tiles I needed. While I got the terrain down pat, the colors were, well: Yeah, that's far too happy. That doesn’t really whisper “ _You shouldn’t be here, why are you here, leave while you can_ ” as much as shout “Hey kids, wanna go on a ride down to Funtime’s Happy Hut?” The general colors were there; they were just too cheerful. I spent some time with Coolors and a color index to create a palette that felt more like a rotting world succumbing to fungus and decay. One quick doodle in Aseprite later and I had this: It still needs a brighter color somewhere, maybe an electric teal? I stepped away from that for an hour or so and came back to consider its alienness. It read more “woods at night” (thanks Bluesky friends!) than “this place is unknowable and quietly hostile,” but it was a step in the right direction. I can refine it down more to convey the exact mood I want. Right now, though, I’m sketching the exact tiles I’ll need. There’s not many so far, but I have an entire week to sketch the tiles and draw them in Aseprite. It requires a bit of foresight to make a plateau with tiles that can repeat over distances. In terms of non-prototype work, I finished the rewrite of _JBtH_ ’s narrative. It’s suitably weird, but subsequent edits will push it even further into the strange. ### What did I learn? Color theory is difficult for me. I can look at a palette and tell you the emotions that it evokes, but I can’t tell you _why_ , or how to change the colors if it doesn’t hit those target emotions. I’ve spent some time researching color theory and consulting my color index to get close to the mood I want, but it’ll still take some fine-tuning. As always, though, I just need to make it first. I can make it good, or even better, later. I’d announced the podcast earlier, but it’s worth telling why I created it. My (normal, this week’s weird weather notwithstanding) commute gives me a lot of time to think about the direction in which I want to take _JBtH,_ but those thoughts sometimes dissipate by the time I get to my office to write them down. It’s important that I document those choices and the reasons for them and I’d like to share those reasons with you. I’m learning that this short podcast is an effective way to do all that in a free way that doesn’t intrude into the game development time I have. I’m also learning how to prioritize my tasks while allowing myself to deviate from those priorities when necessary. While rewriting _JBtH_ ’s narrative served the prototype in any way, I had to get it onto paper while I still had a concrete idea for how the story should progress. Yes, I could have jotted down a few notes in Scrivener and come back to them in May, but I doubt those notes would have made sense without the context in which they were written. The few hours I spent writing took away from prototype development time, but they will pay off later in the full game. Once again, laying the groundwork may not seem productive until you realize it made the big work possible. ### What’s next? This week’s plans are contingent on the power staying on: if the lights go out, battery life must be preserved for emergencies. However, providing we don’t lost electricity, my main objective for the week is to finish the tileset, use it to make a more sprawling Place Just Beneath, and implementing the infinite-scrolling setup for it. There’s an outside chance that I could then begin working on new enemy types, but I’d rather have a more conservative estimate in the face of unpredictable weather. There’s an easy way to keep up with my progress though. You know that, right? All you have to do is subscribe! Come back tomorrow for next week’s to-do list. As always, thank you for joining me on the journey! Stay safe and warm, wherever you are.
www.petemakesgames.com
January 25, 2026 at 6:00 AM
Thursday Turn Out - 1/22/2026
I said I would work on a tileset for the Place Just Beneath, and that’s exactly what I did. I don’t have a whole lot to show for it at this point, just this: You have any idea how long it took to draw the grass? I've not even started on boulders, let alone __pebbles__. I’m drawing and coloring this scene to determine which specific tiles I’ll need for the tileset. I’ve settled on a sickly purple-and-green palette with just enough brown to make it feel like the Place Just Beneath was once organic. Once. I used PureRef to make a mood board that serves as a reference for the scene and the finished tileset. “Spooky Appalachia” isn’t a hard mood to pull off, but goodness I’m going to have to figure out how to do a fog effect. Yes, owls are an omen of ill portent. They're also beautiful. I didn’t spend the entire week on art, however. I realized some of the gaps I’d left in _Just Beneath the Holler’s_ narrative and completed a first rewrite of the entire story. I’d like to let it be until the prototype is finished and then come back to it with fresh eyes and a strong desire to edit it to be even more weird. Here’s a small taste which doesn’t give away _too_ much: It's not polished, but it shouldn't be at this point. Oooh, _spooky_ , isn’t it? I put in a lot of time this week, but the thing with art is that (for me) it’s a slow process. As a result, I don’t have a whole lot to show for it. I’m not disappointed by that fact, mind you: honestly, I’m pleased with my determination. The work will be done when it’s done, but only if I keep at it. Oh, I do have another surprise for you: a sort-of-daily podcast! Go give it a listen! But only after you subscribe to the newsletter! Thanks, and I’ll see you Sunday!
www.petemakesgames.com
January 22, 2026 at 6:04 AM
Monday Map Out - 1/19/2026
First: I finally, honestly, really completed a looping track for “Silver and Gossamer”: Silver and Gossamer - Chiptune 0:00 /76.329792 1× I promised I would try, and that’s exactly what I did. There’s still a few notes that feel off, but _being done_ is better than _being perfect_. I may come back and tweak it a bit more this week (or today: it’s early Sunday morning as I write this), but it’s time to move onto more urgent tasks. The prototype world is small and is populated by one enemy that dies after two, swift kicks. While that’s technically a complete game, it’s missing everything that makes games, you know, _actually fun_ : Missing from this list: tightening up the graphics on Level 3. That’s a pretty long list and I think items will take longer to complete as I progress further down the list. It makes sense to try to hammer out as many of the early items as possible to give myself time to work, reflect, and edit. The goals for this week are: * Create an updated tileset for the map with some variety in terrain and obstacles; * Determine how big the world map should be, then build it to that size; * Edit the teleport box to fit around that map; * Create a flying enemy type which ignores terrain; and * Create an enemy type with a ranged attack. That’s an ambitious list, potentially overly so. It makes more sense, however, to work throughout the entire week and have tasks left over instead of finishing the week’s work early and just twiddling my thumbs until next Monday. Sure, I _could_ add more items to my list as I complete them, but I work better when I have a plan. Check in Thursday (either by coming back or subscribing!) to see how everything’s coming along!
www.petemakesgames.com
January 19, 2026 at 6:06 AM
Sunday Show Out - 01/18/2026
This past week was my first “normal” week back, with a regular class and duty schedule. We had our normal beginning-of-year meetings, and I volunteered as a server for our first community dinner of the semester, so it would have been easy for me to write off this week and excuse myself from getting any game development work done. I knew this would be an _excuse_ instead of a _reason_ , though, and I refuse to let myself make excuses. Instead, this was one of the more productive coding weeks I’ve had in a long time. While I only had one objective (to enable enemies to teleport when Zel does, to preserve the illusion of the infinitely-scrolling world), I’ve learned enough to know that would be a more involved task than it looked. While it was, and I spent a good deal of time fixing problems of my own making. I succeeded in that objective while also shoring up the enemy finite state machine (FSM). Even from my own, sometimes demanding, standpoint, this week was a success. ### What did I do? I added x_offset and y_offset variables to the four teleport scripts that equaled the distance between Zel and individual enemies. I then applied that offset to each enemy whenever Zel teleported. Zel teleported and, sure enough, the enemies went with her. Of course, it wasn’t that easy. If the enemy lost track of Zel, it would go back to its original patrol point. From the camera’s perspective, it looked like the enemy just sauntered off to pace in circles somewhere else. That was a bug that needed to be fixed. I had already experienced other bugs, and I knew more would follow suit, so I sat down and began playtesting. Up until this point, I tried to fix a bug as soon as I spotted it. That worked, but it didn’t feel terribly efficient. I tried something new this week: conduct a more extensive playtest and chronicle every bug I could. Then, fix those in order of importance/ease. The persistent enemy FSM bugs were the most important to clear up first, as I didn’t need any bugs in the enemy teleport mechanics to be compounded by issues with the FSM itself. I added line of sight (LoS) code to the FSM so it wouldn’t lose Zel around a corner, directed the enemy to chase Zel as long as she was in distance of its $SightRay (even if its back was turned), and to chase Zel after knockback. The LoS code still isn’t rock-solid, but it’s much better and I felt confident I could now go onto enemy teleport issues. I wasn’t terribly happy with my teleport system. Four Area2Ds, each with their own CollisionShape2Ds, were a good idea, but I had four different scripts to govern the rules for the teleport box. In my estimation, it would be cleaner to create a scene for each wall of the box, with each scene containing an Area2D and CollisionShape2D. I could then write one script and attach it to all four walls. The script has export variables for direction (“top,” “bottom,” etc.), the scene for the opposite wall, and the offset distance. After about an hour of redesigning the scene tree and another hour of coding, I had a re-written, working teleport system that used three fewer scripts and, more importantly, implement on other levels more easily. Now I could finally sit down and work on the enemy teleporting issues. I created a new group, WorldShiftable, and added the enemy to it. I also created a new function in the enemy FSM, apply_world_shift. The teleport script called that function when Zel teleported and the function changed the enemy’s patrol points, relative to Zel’s post-teleport coordinates. I fired up the scene for the Place Just Beneath, teleported, and watched as the enemy remained in its current patrol route, its coordinates having been shifted during the teleport. It worked now! ### What did I learn? I realized that I had to stop, consider how a piece of code worked, and determine if it was better to rewrite it to be more efficient. In other words, I had to know when to _refactor_ my code. The teleport box for the infinitely-scrolling map was good, but it needed to be better so that I could more easily reuse it. In redesigning the architecture and refactoring the code, I also made it easier to fix the enemy behavior when Zel teleported across the map. I spent about two hours redesigning the entire teleport system that gives the illusion of an infinite, looping world, but that will likely save many more hours in the future. I also learned that some of the issues I thought were bugs are really due to the small size of the world map. I made a looping world of 2720 x 1760 pixels, much smaller than the actual dimensions for the Place Just Beneath. I noticed that, when the enemy stopped chasing after we had teleported, it went to the correct patrol position, but I was confused by the behavior. In reality, the world was so small that I was expecting the enemy to go back to its original patrol route, the route that was _actually_ incorrect. So, I need to build a larger world map to eliminate these issues of scale. ### What’s next? Is the larger map the next item on my to-do list? I think it is. Whether I redo the sprites at this stage is a matter on which I’m still undecided. I would also like to introduce two new enemy types: a flying enemy and a heavy enemy that can’t be pulled. That would give the combat a bit more variety before I eventually get to combo/special attacks. I’ll also, finally, make music a priority again. I don’t like to promise things, but _I will promise that I will try_. Regardless of what I plan for next week, you should subscribe so you can read about it tomorrow. As always, thanks for joining me on this journey!
www.petemakesgames.com
January 18, 2026 at 6:00 AM
Thursday Turn Out - 01/15/2026
This week has been a “I solved a problem and, in doing so, created fifteen more” week. Was I able to get an enemy to teleport with Zel? Yes, and all I had to do was: * add a test enemy to the level; * graph out where the enemy should go when Zel teleports; and * edit the four bounding box scripts to reflect those locations. Lo and behold, the test enemy now teleports with Zel! But does it continue to behave as it should after the jump? _No, not really, and not consistently._ I’m taking a new approach to fixing this problem. With the enemy finite state machine (FSM), I’d fix a bug as soon as I spotted it. I iterated on the FSM code until it finally worked exactly as I needed it to. That was effective, but I don’t know if it’s efficient. What if, instead, I didn’t touch the code until I’d documented as many bugs as possible? And, so far, I’ve found a **lot** of bugs: OneNote: an invaluable tool for chronicling my issues. I’m going to spend a few days running the scene and documenting every weird quirk, reloading it and making small changes in how I play the level, in an attempt to suss out every reproducible issue I can. I _think_ discovering multiple bugs, then fixing those bugs, will be a more efficient use of my time. However, I must concede the possibility that trying to fix multiple bugs in succession is a task too insurmountable for my ability as a novice coder. What progress will I make by Sunday? I suppose you’ll have to find out then, or sign up for the newsletter to have the news sent to you directly! P.S. No, I haven’t forgotten about completing “Silver and Gossamer,” it’s just that bug-hunting is too fun. Is that weird? It feels _weird_ , but also _right_.
www.petemakesgames.com
January 15, 2026 at 6:00 AM
Monday Map Out - 01/12/2026
I know I _said_ that creating a simple UI was the most pressing coding concern for this week. _However_ , something **even more pressing** came to me during my morning “coffee and meditation” time: **How do I handle enemies in an infinitely-scrolling level?** When I implemented the endless level in _Just Beneath the Holler’s_ first version, if an enemy was chasing Zel, they wouldn’t teleport with her when she was insta-yeeted across the map. Instead, they flew off into the inky blackness of Off The Screen. That hardly maintains the tension I want for the combat system. I need to define enemy behavior when Zel teleports. Ideally: * Enemies will only teleport with Zel if they’re on-screen (or very close off-screen). * They will teleport relative to Zel’s position, keeping their same motion/direction. * They will also remain in the current state in their finite state machine. If I’m going to hit the May 4th deadline for my combat prototype (that’s only 113 days!), I need to make sure the combat is rock-solid. So, I’m shifting this week’s priorities. The goals for this week are now: * Implement enemy teleporting with the parameters above; and * Finish “Silver and Gossamer”. Both those should be doable, now that I’m in the rhythm of getting things done early in the morning, before work. We’ll see on Thursday just how doable it actually was. Thanks for joining me and subscribe if you haven’t done so! Thanks!
www.petemakesgames.com
January 12, 2026 at 6:00 AM
Sunday Show Out - 01/11/2026
My special projects course was a success, although we changed its focus halfway through the first day. We covered a brief history of webcomics and their early themes on Monday morning and spent that afternoon writing a script. The students were far more into creating than studying, so we spent the rest of the week making comics. While some students had more-developed art skills than others, and some were better writers, all give it all they had and enjoyed it. The result was a mix of funny comics, serious comics, personal comics, and unfinished comics delivered with a promise to finish them this semester (not finishing a comic is kind of a webcomic tradition). I learned a great deal from the students, mainly: * Every generation will create its own sprite comic/comic built using game assets. * Cartoonists who settle on four-panel gag comics will feel inferior to those that create pages while evoking some of the most visceral emotions. * Holy muffins, Megatokyo is _still_ running. The most pertinent lesson, however, is one I already knew but about which I needed reminding: > _Plans can change, as long as progress is made_. ## What did I do? I woke up early each day, got ready, and spent about 45 minutes before work, working on _Just Beneath the Holler’s_ prototype. I’d planned on finishing “Silver and Gossamer” this week, but it turns out making music isn’t necessarily a straightforward process. I opened FL Studio most mornings, added a chord progression, realized the progression didn’t fit the melody, changed the chord progression, listened to the chords wash out the melody, changed their instrument, lowered its volume, and, finally, change the half-notes of the chord progression into a metal gallop/reverse gallop rhythm. The song is still unfinished, but it’s already much better: Silver and Gossamer 0:00 /34.19425 1× I get a nu metal vibe off the rhythm guitar, but who’s to say the fae don’t like Limp Bizkit? The bulk of this week’s work was spent “revisiting” the infinite-scrolling code I’d written for the first version of _JBtH_ and fixing its bugs. I’d only planned on importing the scene as-is, looking through the code, and making a few notes about how to fix it next week. But I really didn’t like the tileset I’d chosen. So, I whipped up a new tileset. And it’d have been weird for me not to immediately implement that tileset, so I replaced the old map with the new one. I thought, “Hey, I need to run it a few times to figure out where the bugs are.” I noticed a lot of jitteriness and realized it was an issue of how I’d set up my “teleport” box. So, I broke out graph paper and colored pens (three of them!) and drew my repeating terrain block along with its dimensions. I even made sure the rectangle was to scale. Then, I took a look at the scripts for the four Area2Ds/CollisionShape2Ds and realized that, when Zel contacted one, she was being respawned in the wrong place. That’s such an _easy fix_ , I said to myself, now that I’d plotted where she’d need to respawn. So, I edited the scripts and re-ran the scene. And it worked flawlessly. All I’d meant to do was import the scene, look it over, and take some notes. But plans changed, much like my students’ plans changed in the special projects course. And much like that course, I rolled with it and _made sometime beautiful_. I stared at this screen for a moment and the terrain started moving to the left. Either I created an optical illusion or I need some more coffee. Or less. ### So, how does it actually work? In the screen above, you can see a 3x3 repeated block of terrain with a blue box whose borders are just a bit beyond the edges of the center terrain block. That border is made of four Area2Ds with corresponding, pixel-wide CollisionShape2Ds. Each one has a script attached which triggers Zel to be teleported to the side directly opposite the wall she touches. The wall is an entire body-width _outside_ of the terrain block but repositions her a half-body-width _inside_ the terrain block on the opposite side. The result is a seamless motion that gives the illusion of an infinitely-scrolling world that loops back on itself. 0:00 /0:09 1× The blue lines represent the teleport box. The Place Just Beneath is going to be a lot larger and have areas that are blocked off until Zel has the abilities needed to access them, but the idea will be the same. And hey, that was the first item on my prototype to-do list, so I’m that much closer to releasing it. I have to count this past week as an unqualified success in terms of _getting stuff done_. ## What did I learn? Apart from the main lesson (_things change, and I need to roll with those changes_), I reinforced that I learn best with tactile feedback and old-school tools. Pens, rulers, and graph paper served me well and allowed me to fix the infinitely-scrolling code faster than if I’d just stared at a screen and waited for the answer to appear. Younger coders have that ability, I don’t. And that’s okay! Game development is a state function: the path isn’t important, just the destination. As the weeks progress, I’m learning that I can actually do this. I’m capitalizing on the momentum I built over the holiday break and I’m continuing to work towards the prototype. I honestly believe that I can make a game now, something I didn’t quite believe even a month ago. There are a lot of moving parts, and each part is a challenge, but when should I ever let a challenge stop me? Sure, I wasn’t able to finish “Silver and Gossamer,” but was that a failure, or a learning experience I can use to get it done? I discovered a new tool in FL Studio that should help me finish the track and move on. And moving on, finishing one thing and going to the next, is what I do best. ## What’s next? There are a few items on my prototype to-do list that I can tackle next. The most pressing of those are the user interface (UI), sprites (both Zel’s and the enemies’), and finishing “Silver and Gossamer”. I’ll have a detailed map out tomorrow but, for now, I just want to enjoy what I’ve done and spend the rest of today fiddling around and letting myself explore. Come back tomorrow (or have tomorrow directly delivered into your inbox) to see where we’re headed next. As always, thank you for being part of the journey!
www.petemakesgames.com
January 11, 2026 at 6:04 AM
Thursday Turn Out - 01/08/2026
I have an hour-long commute to and from work every morning. Those two hours are spent listening to podcasts and occasionally thinking my way through coding problems. Such was the case Tuesday morning, when I was trying to figure out why my “infinite scrolling” code wasn’t working. The Place Just Beneath (_Just Beneath the Holler’s_ version of _A Link to the Past’s_ Dark World) is meant to feel alien: part of that feeling comes from the fact that it’s a continuous surface. Think of how the world map in old Final Fantasy games would circle back, left-to-right and top-to-bottom, and you get the idea. The trick to the infinite scrolling technique is that I created a map, then copied it on the top, bottom, sides, and corners. Then, I used four one-pixel-wide Area2Ds (with their corresponding CollisionShape2Ds) to create a bounding box around the original map. Each box would “teleport” Zel to the other side of the map. It worked the last time I did it, but it was jittery during the teleport: Zel would skip a few pixels. It wasn’t terrible, but it wasn’t perfect. I’d only planned to add the scene for the Place Just Beneath, along with its nodes, signals, and scripts, and come back to it next week to fix. But on the drive to work Tuesday morning, I began thinking about _where_ the bounding boxes should be, and _where_ Zel should teleport. I’ll save the details for Sunday, but I broke out the graph paper as soon as I got to work and wrote this: Graphing is still king when it comes to spatial problems. I edited the CollisionShape2Ds and code during my lunch break, and now the looping is seamless and without jitter. I guess that makes me a little ahead of where I thought I’d be. Neat. Just don’t get used to it. Now that the week’s coding problem is finished, I can devote the rest of the week to adding to, and polishing, “Silver and Gossamer”. Maybe that’ll be just as easy? Sure, why not? See you Sunday! Which would be a whole lot easier if you subscribed!
www.petemakesgames.com
January 8, 2026 at 6:02 AM
Monday Map Out - 01/05/2026
Yesterday, I reckoned that one of my goals for this week was to determine which coding objectives I should tackle next week. I slept on it, opened up Trello, and did this: There's three more checklist items you'd have to scroll down to see, but I was too lazy to take two screenshots and stich them together. My goal is to **complete and release a “combat prototype” by Monday, May 4 th.** The combat needs to be challenging and fun, and I’m too vested in _Just Beneath the Holler_ to be objective about it. Releasing a prototype that focuses just on the combat, in the style of _Vampire Survivors_, would allow a select few playtesters to get early access and provide feedback. I don’t expect anyone to work for free, but payments/perks are a May 4th problem. I also spent the weekend laying down the leitmotif for _JBtH’s_ primary antagonist: Silver and Gossamer 0:00 /34.19425 1× My updated goals this week are: * Finish and polish “Silver and Gossamer” into an introduction to the antagonist and his leitmotif; and * Revisit the “infinite scrolling” code I wrote during the first attempt for the game and determine its bugs. That isn’t an incredible amount, but it’s reasonable given my resumed teaching duties. Subscribe so I can check in with you on Thursday and deliver a full devlog on Sunday. Thanks for reading!
www.petemakesgames.com
January 5, 2026 at 6:02 AM
Sunday Show Out - 01/04/2026
School starts back tomorrow: before we get into our normal classes (for me, that’s general chemistry), we have a week-long special projects course where we can teach any subject we wish, as long as it has an academic component. I chose the early history of webcomics and how that history mirrored the culture and technological advancements of the early 2000’s. My class filled up pretty quickly: I’m fortunate that I’ve been able to effortlessly develop a good relationship with our students in my first semester. You know which webcomic most high school kids know? _Homestuck_. I haven’t read much of it (and I know there’s a **lot** to read), but that’s one of the best things about comics: each generation can find and make the ones that speak to them. As I’d said on Monday, I expect game development to slow down starting next week but not stop. I outlined my plan for building momentum going into the start of the semester and stated my criteria for success. Was I successful? Do I have a good head of steam going into 2026? In short: **yes.** But a devlog wouldn’t be that great a devlog if 95% of it was the developer talking about everything else other than their game, so let’s get into what I did this week. ## What did I do? I figured that adding knockback and cooldown to the combat system would be straightforward. And it would have been, had I been more experienced with finite state machines. But it wasn’t, because I wasn’t. The model was pretty straightforward: * Knockback is initiated when Zel/the enemy takes damage * Velocity is forced in the direction away from the attacker * Movement is disabled during knockback * Knockback ends after a timer * Zel returns to the idle state/ the enemy returns to patrol/chase I created variables for the knockback velocity, how quickly that velocity decayed, and the time of the knockback and exported those variables so I could control them in Godot’s Inspector window (this would allow me to more easily customize enemies). I ran the game and it _looked_ like the knockback was working, but for far too short a time. It turns out the attack state was interrupting knockback: as soon as knockback initiated, the enemy realized it was in attack range and attacked. I added logic to the enemy’s _set_state_ function to prevent the interruption. Great, it worked! Except now the enemy wouldn’t return to the patrol state after knockback ended. The knockback state was persisting even after knockback was applied, so I created a _knockback_locked_ flag that set to true as knockback was applied. Now the enemy would return to patrol, but it wasn’t chasing Zel. Well, it _was_ , it just ended too quickly. The enemy’s _ChaseRadius_ wasn’t large enough to keep Zel in its sights, and Zel faster and outrunning the enemy. I added a chase memory of ten seconds: the enemy now chased Zel appropriately. With knockback solved, I moved to cooldown, at which point I realized I’d already added that to both Zel and the enemies. I’d even added it in my personal, bulleted, running devlog. Good job looking out, Past Me. After all that, I had this: 0:00 /0:07 1× I don't know the sprites are kind of charming to me. Attacking, knockback, cooldown, and grappling objects all worked. The simple sprites don’t do it justice, but I had a working combat system that I could fine-tune to where it was, you know, _actually fun_. With the week’s coding task completed, I could move onto music. I had the barest dulcimer melody for "The Place Just Beneath", but it barebones and it was jarring when looped. I laid down a chord progression under the melody, and then a mandolin bassline (look, I know the mandolin isn’t the standard bluegrass bass instrument but _trust me_). After tweaking when they came in/went out, I’d created a nice, short underworld theme: I’d accomplished two of the three things I set out to do: Zel’s animated sprite was all that was left. Yeah. Just that. One small task. Sure. I absolutely _did not_ finish this. I spent the better part of a morning making this: She looks like she can throw a punch. It’s not bad! The colors are way too primary and it could use editing, but it’s clearly a girl who’s ready to throw down. The only problem is that she doesn’t fit the game. _Just Beneath the Holler_ is a top-down, 2D Zelda-like and this sprite is better-suited for a belt scroller. I tried going for something closer to Square SNES RPGs and didn’t hit the mark, even when hitting the mark wouldn’t lead to something that fit _JBtH_. Factoring in New Year’s festivities and an impromptu _Stranger Things_ marathon, I accomplished a lot and succeeded in building the momentum I needed going into 2026. I’ve been a productive developer these past three weeks and I have a foundation that I can build off for the rest of the year. ## What did I learn? I focus on what I wasn’t able to do, instead of what I did, and I’m working on myself to fix that. It’s not fair to tell myself that I failed at making Zel’s animated sprite: I just learned how _not_ to create the sprites I want. The time I spent in Aseprite wasn’t wasted, it just eliminated a possibility. I got closer to what I want and that’s a path to success. It’s part of what I call the _hidden time of creating_. That isn’t a unique position: every endeavor has work that isn’t showy and is easily dismissed (if it’s considered at all). This week, that hidden time was concealed in fixing bugs, setting up FL Studio, and practicing Aseprite. I’m learning three new skills at the moment: coding, music production, and sprite art. Each skill has its own program, and each program its own workflow and idiosyncrasies. It takes time to learn, and more time to learn properly. That time _will_ pay off in more efficient work weeks/months/years from now, even if it’s sometimes difficult to convince myself of that. I have a short video, a music track, and one sprite to show for this week, but hours upon hours of work went into those three pieces. I’m proud of them and know the work I did, the work you didn’t see, wasn’t wasted. I also learned that the old joke, “It’s not a bug, it’s a _feature_ ” isn’t a joke. A quirk in the combat system emerged: Zel’s attacks are a lot safter when she hooks the enemy first. I always meant for that to be the case, as the enemy is temporarily stunned after Zel reels it in. I didn’t mean for an unhooked attack to be so risky, though. Zel has a very small window to attack an enemy before it lands and attack and knocks her back. Now, I could add an attack delay to give Zel a bigger window of opportunity, but do I want to do that? I have two basic options here: * Keep the combat system the way it is and persuade most players to use the hook, leaving the unhooked attacks to more skillful players * Add the delay for unhooked attacks and vary that delay for enemy types. I’m not going to decide that now. I have a goal of releasing a prototype by spring: playtesting would reveal which, if either, option is more fun. It makes sense to let players decide. ## What’s next? I have to scale back what I consider a successful week to be now that classes have resumed. Instead of focusing on coding, music, and art in one week, I’m going to emphasize one. This week, that one is music. I’ve created a leitmotif for the antagonist, and I think it’s possible to expand that into a full track by next Sunday. I also think it’s possible to map out my next coding objectives so I can more efficiently tackle that the week after. Should I code a combo system? Begin building a rudimentary world? Create the UI? I won’t be able to actually _code_ any of those this week, but I can decide which to choose and lay down the conceptual framework. Whatever I choose, it’ll be in tomorrow’s Monday Map Out. Subscribing would get that sent directly to your inbox **and** it’d earn my eternal appreciation! In closing, I realized something while working this week: the top-down Zelda games are 2D Metroidvanias. I’m sure that’s not a unique thought, but it’s interesting. See you tomorrow!
www.petemakesgames.com
January 4, 2026 at 6:02 AM
Thursday Turn Out - 01/01/2026
It’s 2026! I know this because I had to correct the name of both this post, and the Word file I used to draft it, from 2025. That’s the new “previous year in the checkbook” in a tap-to-pay society. My coding goal this week was to add knockback/cooldown to both Zel and the enemies, and here’s how that’s going: 0:00 /0:07 1× Seriously, she's going to have big, stompy boots. There are three mechanics on display: the hookshot-style fishing pole that lets Zel travel across obstacles, the “hook-and-kick” attack that temporarily stuns the enemy (that little foot-shuffle is Zel’s attack, she kicks enemies with her big-ol’ boots), and a “just-kick” attack while the enemy isn’t stunned. Zel has an obvious advantage when using hook-and-kick, at least when she’s attacking enemies one at a time. If she uses the just-kick attack, she has to attack almost immediately when she enters the enemy’s ChaseRadius shape, or she’ll be damaged and kicked back. Now, do I want to leave that as is, or do I want to tweak it? If I leave it as is, it could persuade players to incorporate the fishing pole into combat while leaving a challenge for more confident players. The other option is to add a short delay timer to enemy attacks: this would give Zel a longer window if the player opted for the just-kick method. I feel this will depreciate the fishing pole’s role in combat. I want the fishing pole to be more than just a traversal mechanic, so I’m leaning towards the first option. I’ll need to listen to playtesters once I have the prototype ready to play. That’s a next week problem, though. I still have a song to finish and an animated sprite sheet to make. Can I get the job done? Subscribe to the newsletter and find out first! See you Sunday!
www.petemakesgames.com
January 1, 2026 at 6:02 AM
JBtH Devlog - 12/28/2025
In the last devlog, I said it should be possible for me to use FL Studio to create a looping music track within a week. And it was indeed possible, and it did indeed happen. It’s not finished, and it’s not polished, but it’s pretty good. So, let’s walk through what I’ve accomplished. It all begins with me being a student. ## What did I do? ### It’s like I’m back in school I found a Udemy course on game music and started learning. I already knew quite a bit about chords and chord progressions, and I had the barest familiarity with FL Studio, so I wanted a course that built off those and taught me how to expand my abilities. This course fit the bill nicely, so I bought it and started learning. I haven’t finished the course. I prefer to watch 1-2 lessons, stop, and practice what I’ve learned in that time. Every few days, I write a review of what I’ve learned (and I mean _write_ : pen and paper are still the best learning tools) and repeat the process. It’s not particularly fast, but it’s efficient. ### First, a melody There’s two apparent camps when it comes to making a song: the _chords first_ camp and the _melody first_ camp. I prefer the latter approach, particularly since FL Studio can show you the suggested scale of your song after a few measures. Once you have a decent-sounding melody, you can use the highlighted scale to build chords. Speaking of decent-sounding melodies, here’s a melody for a piece I’m calling “The Place Just Beneath”: The Place Just Beneath - Melody 0:00 /15.856292 1× I chose a dulcimer for the melody instrument: it’s my favorite string instrument (I own one! With mountain laurels burned into the fretboard!), it’s sufficiently bluegrassy/Celtic-y, and I have a good idea what it should sound like. It was certainly pretty enough, but it felt empty. What I needed was the underlying chord progression. ### Now, the chords I chose celli (which I learned is the plural of “cello”) to provide the chords and used Hooktheory.com to choose popular chord progressions that matched my scale (D minor). After some playing around, I had this: The Place Just Beneath - Melody and Chords 0:00 /16.039167 1× The chord progressions is i-V-VI-VII followed by i-iv-V-i. I like how the chord progression gives the piece this otherworldly, almost foggy sound, as if the sun is rising on a world not seen by man in ages (note, this isn’t necessarily foreshadowing, but it isn’t necessarily _not_ , either). It’s starting to sound much more game-y, it’s just missing a driving bassline. ### It’s (mostly, but not quite) all about the bass I don’t have an upright bass installed in FL Studio, and I’d already used cellis for the chords, so I used the mandolin instead: The Place Just Beneath - Melody, Chords, and Bassline 0:00 /16.875083 1× Pretty nice, isn’t it? The bassline is simply made of eighth notes on the beats, arranged in notes that are one the scale. I moved them around until I found a bassline that sounded good to me. ## What did I learn? I’m serious when I said I just played around with the bassline until it sounded right. I’m generally a rigid learner. I like to know exactly what to do, and then I do it. That got me as far as a solid melody and chord progression, but I didn’t find detailed instructions on how to build a bassline. I just had to _wing it_ and _find something that sounded good_. That’s difficult for me but I knew I’d get nowhere if I didn’t put my head down and get through it. Music is as much about _what you feel_ as it is _what you know_. I also learned more about navigating FL Studio, especially moving between the Piano Roll, Channel Rack, and Playlist. I also learned how to export songs and the importance of having even a cheap set of over-ear headphones to monitor sound quality. Besides, I now get to look professional: Well, as professional as one __can__ look at 6:30 AM. ## What’s next? The piece sound good, but it feels bland on a loop. It’s in dire need of an intro (possibly just a chord progression, with or without the layered bassline before the melody hits) and maybe a second melody. I’ll continue playing around this week and hope to have a more complete song next Sunday. I’m back to coding this week, adding knockback and cooldown to my combat system. I imagine that’ll take the entire week and that’ll have to be okay. I’ll also have a dedicated streaming day/time to announce in the next devlog. Next week is my last week of holiday break, so I’m going to make it a productive one. See you next time!
www.petemakesgames.com
December 28, 2025 at 12:45 PM