
[{"content":"","date":"5 June 2026","externalUrl":null,"permalink":"/","section":"home","summary":"","title":"home","type":"page"},{"content":"I sometimes travel. Here are some highlights of previous travel!\n","date":"5 June 2026","externalUrl":null,"permalink":"/ploosh-travel-reports/","section":"Ploosh Travel Reports","summary":"","title":"Ploosh Travel Reports","type":"ploosh-travel-reports"},{"content":"","date":"1 December 2025","externalUrl":null,"permalink":"/tags/game/","section":"Tags","summary":"","title":"Game","type":"tags"},{"content":"","date":"1 December 2025","externalUrl":null,"permalink":"/games/","section":"Games","summary":"","title":"Games","type":"games"},{"content":"","date":"1 December 2025","externalUrl":null,"permalink":"/tags/ludum-dare/","section":"Tags","summary":"","title":"Ludum Dare","type":"tags"},{"content":" the game # skillector is a simple top down shooter.\nfend off waves of enemies with your skills - you can acquire new skills by spending money in the shop.\nweapons include a sword, a pistol, a machine gun. you can get passive skills such as permanent atk/dev buffs, or temporary auras to get an extra boost.\nplay on itch.io\nhere\u0026rsquo;s some very late game gameplay (prior to some balance adjustments) Your browser cannot play this video. Download video.\nthe making # this game was made for Ludum Dare 58, of which the theme was collector.\nit was built with Godot 4.5, with a team consisting of myself and my friend NoahAmp.\nas with every jam, the final game is 10% of what we wanted to do, but we think what we\u0026rsquo;ve made is a solid and fun gameplay loop.\nthe initial goal we set out for was a roguelike type of game, but with the time constraint of the jam and a job, we settled on an endless game.\nhere, i\u0026rsquo;ll mostly talk about the final version of the game, how it differs from the initial plan (if it does), and some fun facts\nthe base gameplay # what we settled on for the base gameplay is what you can see above:\none player, waves of enemies you have skills (offensive, defensive, passive) you can use to fight them wave system (endless waves), with a shop in between each wave final score is calculated based on the amount of cleared waves, as well as how many coins you had left. (this is one of the aspects of \u0026ldquo;collector\u0026rdquo; we wanted to have - hoard coins for a better score, or spend them for more efficient dispatching)\nthe extra stuff we didn\u0026rsquo;t have the time for # boss waves: waves with less enemies overall, but a strong one to fend off. random starting skill: we simply didn\u0026rsquo;t have enough skills to make it worth it. upgrade tokens: skills would have been upgraded with tokens rather than coins as it is now. the extra stuff we did have the time for # polish! lots of polish. turns out polishing is actually really fun!\ni spent more time than i probably should have on the design and animations of the UI and HUD.\nit\u0026rsquo;s not much, but combined together? all these lil bits of animations come together to help a ton in gameplay:\nwave animation hud sliding in and out between waves damage indicators hit particles (fun fact: they used the placeholder \u0026ldquo;?\u0026rdquo; sprite) HP up/down animations some of these were more useful than others, clearly, but i think they all help putting together the feel of it.\none of the last minute additions, yet most important i think, was the health bar on the enemies. it reused one of my debug visuals since there was no better way to have it, but it worked out fairly well! better than nothing to know how badly injured your enemies are.\noh and due to how things were built, the player also got a health bar. neat!\nthe end # i wish i had more to say about it, but silly me decided to wait two full months to write anything. oh well.\ni love making games for jams. it might not be the best game, or the most polished game, but for every one of these i have a blast making it. and so, i\u0026rsquo;ll keep making games for jams whenever i have the opportunity.\nwho knows, maybe i\u0026rsquo;ll make a full game out of one of these? i wouldn\u0026rsquo;t count on it, though. i won\u0026rsquo;t let that stop me, either.\nbe on the lookout for more jam games.\n","date":"1 December 2025","externalUrl":null,"permalink":"/games/skillector/","section":"Games","summary":"a ludum dare 58 game with no tagline","title":"skillector","type":"games"},{"content":"","date":"1 December 2025","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"13 June 2025","externalUrl":null,"permalink":"/tags/3d/","section":"Tags","summary":"","title":"3D","type":"tags"},{"content":"","date":"13 June 2025","externalUrl":null,"permalink":"/tags/opengl/","section":"Tags","summary":"","title":"OpenGL","type":"tags"},{"content":"","date":"13 June 2025","externalUrl":null,"permalink":"/posts/","section":"Posts","summary":"","title":"Posts","type":"posts"},{"content":"","date":"13 June 2025","externalUrl":null,"permalink":"/tags/vulkan/","section":"Tags","summary":"","title":"Vulkan","type":"tags"},{"content":"hardware stereo on computers is annoying. you need specific hardware, with the appropriate drivers, and even then, not all software is compatible with it.\nhardware wise, all of this has been written for and tested on machines with workstation NVIDIA cards (Quadro RTX 5000, RTX A5000). your mileage may vary, but if you\u0026rsquo;ve got an \u0026ldquo;Enable 3D\u0026rdquo; switch in your Windows display settings, it should work?\ntypically, this is done with OpenGL, but this can also be done with Vulkan, though it needs a little more work.\nquick note: i am not a graphics programmer. feel free to contact me on my socials if you spot something to correct!\nopenGL: quad-buffer # for OpenGL, the technique used is generally referred to as \u0026ldquo;quad-buffer,\u0026rdquo; though some libraries can also use \u0026ldquo;stereo\u0026rdquo; in their constant names.\nmonoscopic applications only have a single double-buffered swapchain, with a back buffer which is invisible, and a front buffer which is visible on the screen. apps draw on the back buffer, then swap the front and back buffers at the end of the frame. that way, the user doesn\u0026rsquo;t see incomplete images drawn on screen.\nstereoscopic applications using quad-buffer are essentially double that: they basically are a \u0026ldquo;double double buffer,\u0026rdquo; in that each eye gets a double-buffered swapchain. similarly to monoscopic, applications draw on the back buffers, and at the end of the frame, they swap the back and front buffers. the GPU driver then does whatever they elected to do to present the two front buffers.\nwith GLFW, it doesn\u0026rsquo;t take that much effort to turn a mono app into a stereo app:\n// enable quad-buffer glfwWindowHint(GLFW_STEREO, GL_TRUE); // select which side to draw on glDrawBuffer(GL_BACK_LEFT); // left eye glDrawBuffer(GL_BACK_RIGHT); // right eye // swap buffers glfwSwapBuffers(); // one call for both eyes and that\u0026rsquo;s about it. everything else like you would do with a mono app you do with a stereo app! each buffer is completely independent though, so you need to clear each buffer manually.\nvulkan: imageArrayLayers # it felt impossible for a long time to make a stereoscopic app with just vulkan. nearly every implementation i had seen online relied on interop extensions between vulkan and openGL (vulkan draws on a shared image, openGL presents that image).\nit turns out, there\u0026rsquo;s one line in the VkSwapchainCreateInfoKHR section of the 5000-page vulkan specification that suggests stereoscopic apps can be done:\nimageArrayLayers is the number of views in a multiview/stereo surface. For non-stereoscopic-3D applications, this value is 1.\nthat sentence is the key: setting that value to 2 when creating a swapchain, if supported, creates one that the GPU driver (at least on NVIDIA) will interpret as a stereo swapchain.\nthe changes # naturally, the first change on VkSwapchainCreateInfoKHR:\nVkSwapchainCreateInfoKHR createInfo{}; createInfo.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; // ... createInfo.imageArrayLayers = 2; // 👀 // ... with this, the swapchain images will have two layers: one for the left eye, one for the right eye. you\u0026rsquo;ll need to duplicate a few structures, with some changed settings:\nthe VkImageView: the baseArrayLayer changes to select the correct layer.\nVkImageViewCreateInfo createInfo{}; createInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; createInfo.image = swapChainImages[i]; // they take the same image // ... createInfo.subresourceRange.baseMipLevel = 0; createInfo.subresourceRange.levelCount = 1; createInfo.subresourceRange.baseArrayLayer = 0; // 0: left, 1: right createInfo.subresourceRange.layerCount = 1; the VkFramebuffer: change the attachment to select the correct image view\nVkImageView attachments[] = { swapChainImageViewsLeft[i] // use the relevant image view }; VkFramebufferCreateInfo framebufferInfo{}; framebufferInfo.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO; // rest of the framebuffer config doesn\u0026#39;t change. don\u0026rsquo;t forget to use the correct framebuffer when recording your command buffer, and you should be good:\nVkRenderPassBeginInfo renderPassInfo{}; renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; renderPassInfo.renderPass = renderPass; renderPassInfo.framebuffer = left ? swapChainFramebuffersLeft[imageIndex] : swapChainFramebuffersRight[imageIndex]; // ... small updates # some lovely people have noticed this and started experimenting on their own with other approaches to stereoscopy outside of traditional openGL quad buffer. mainly experiments with NVIDIA 3D Vision and driver versions.\nyou can see their conversation on github here, in case that could be of any help!\nwrapping up # there might be some extra things to note that i didn\u0026rsquo;t mention here. this mostly serves as a starting point for other people to work from, one that i didn\u0026rsquo;t have over a year ago when i first looked into this problem.\nsample code for mono and stereo vulkan apps can be found on my github. as far as i could test, neither throw validation errors with the API layer, so you should be able to compare both files for a better view of the differences. pull requests are also welcome if there\u0026rsquo;s relevant additional concepts/features you think are worth showing!\n","date":"13 June 2025","externalUrl":null,"permalink":"/posts/vulkan-stereoscopy/","section":"Posts","summary":"Some information about hardware stereoscopic rendering in OpenGL and Vulkan","title":"vulkan stereoscopy","type":"posts"},{"content":"Food Under Development (or FUD for short) is probably one of my favorite projects i\u0026rsquo;ve worked on. it went so much better than pasta run too.\nthe team was the same as pasta run, me and my friend. despite all that, we still got a ton of ideas, and this time we approached the project better:\nactually allocate the entire weekend for the jam take it one step at a time prioritize well and do not be afraid of cutting features out on top of that, we also met for the weekend at my place so that we actually could work together on the game. it made a huge difference just being there and being able to work on the other\u0026rsquo;s machine if need be\nso, where do we go from here? weekend\u0026rsquo;s ready, supplies and snacks on hand, and brains ready. in france, the jam started the day before at around 9pm, which helped a ton.\nday 0: brainstorming # the theme for this ludum dare was \u0026ldquo;harvest\u0026rdquo;. time to ask the age old question: what does it mean to \u0026ldquo;harvest\u0026rdquo;? we converged pretty quickly on the concept of managing a farm, planting and harvesting your ingredients, to then cook and serve. (get it? plant, harvest, cook and serve)\nwe had three main rooms initially:\nthe dining hall: customers would come in and order food for you to prepare the kitchen/lab: prepare the food customers asked for, and engineer new seeds for your field the field: plant your ingredients to harvest and use later the scope of the kitchen/lab part was pretty wild: storing seeds for use in the field, cooking ingredients into food to serve customers, and engineering seeds for use in the field.\nengineering seeds? yeah, work on new seeds that would give you the food ready to serve, without having to go through all of the ingredients. helpful when there are more and more customers to serve and you need to optimize your time as much as possible.\nwe still weren\u0026rsquo;t sure then what kind of ingredients or cooking recipes to have, but the night came before we actually started to match ideas with what we knew to do with the tech we had.\nday 1: scope cuts and game flow # saturday morning, 9am. time to get going. not even 15 minutes in that the first scope cuts are coming up.\ndining hall? cut, replaced by a list of orders to prepare and send off. seed management for the field? cut. owned seeds are infinite, new seeds found through morning luck and engineering. with these ideas locked in place, we\u0026rsquo;re starting to think about the game flow. first idea for it, at least in our ideas doc? \u0026ldquo;ajkshdfljkad.\u0026rdquo; not gonna go far with that.\nstill, we got the idea of ordering gameplay features in order of priority, and decide what would count as a \u0026ldquo;minimum viable prototype\u0026rdquo; - something that would be complete enough to still be fun, but also well within reason for the allocated time of Two Days:\nplant and grow ingredients combine ingredients to create food manage both the field and the kitchen serve orders as they come these 4 concepts looked solid as a base, but we still had a bunch of ideas we wanted to see in there:\nengineer new seeds an upgrade system (bigger field, faster growth, HUD elements maybe) awareness system regarding the state of the other room a day system so we got to work! i don\u0026rsquo;t fully remember how it went unfortunately, but it was a lot of \u0026ldquo;try implementation, test implementation, repeat\u0026rdquo;. a few stupid and meme-grade things were made along the way, but no work\u0026rsquo;s been wasted. for example, this was made as a test to switch between the kitchen and the field:\nin the meantime, my friend went to do the music and sound design of the game. with my laptop, a mic, and pretty much my entire apartment, he recorded a bunch of sounds: new order sound? that\u0026rsquo;s a knife tapping against a glass. there\u0026rsquo;s a fair amount of mouth sounds too.\ni wanted the recipe system to be flexible enough to be able to add new ones without having to tinker with actual game code too much, so we ended up with a json list of ingredients and recipes. a bunch of stupid ahh recipes made it in like the big breakfast, and its cousin the big mistake.\nday 2: finishing the base, some polish # not entirely sure what we ended day 1 on, but it doesn\u0026rsquo;t really matter when we were still in the middle of getting the MVP built. some features definitely ended up getting skipped cause wrapping them up by midday was going to be impossible.\nthe day system for example? haha, good luck with that. the game wasn\u0026rsquo;t designed to be able to load settings, or an objective or anything - just popping orders in while you\u0026rsquo;re cooking and serving food. re-engineering the game loop to accomodate for that was NOT going to work.\nin the end, we ended up scrapping the entire \u0026ldquo;non-essential\u0026rdquo; part of our list, and started polishing it up starting sunday afternoon. we already had a solid-looking game loop, so we decided to call it a day to adding feature and started testing full runs to see where we could improve the quality and feel of the game.\nno new features strictly speaking came from this, but a few silly ideas here and there came up and those got added to the game! my favorite i think is just the entire level falling down when you make too many mistakes:\n(and yes, that means the game over screen is there the entire time. hidden behind the stage, waiting for you to make three mistakes)\nday 3: testing round and more polish # monday - the final day. also the day on which we both had work so we couldn\u0026rsquo;t really work on the game, hence wrapping the game loop on sunday.\nthis also meant, as we aimed to (and did) get a publishable game by sunday night, that we had a build we could upload and send around for a testing round, to see if we could catch some stray bugs or balancing. turns out there were a few tweaks to make!\nlooking at the tweaks first, the big mistake. the big mistake was made of two big breakfasts, itself roughly a combination of everything. the problem is that everything needed tomatoes or ketchup - going all the way to the primary ingredients, out of 50 or so, the big mistake needed about 25 tomatoes. didn\u0026rsquo;t waste any time to change that to something more reasonable.\nas for bugs, we had a bit of a silly one. we specifically had seeds to plant, rather than ingredients directly. it makes sense since we use seeds to make the ingredients to begin with. problem is, we could also plant ingredients. which doesn\u0026rsquo;t really make sense now does it.\nthese ingredients didn\u0026rsquo;t grow. they were stuck in place, you couldn\u0026rsquo;t even see what was planted. be silly enough and basically you\u0026rsquo;re stuck with 20 planted ingredients and a softlocked game.\nwhat another bug was that you could plant a seed over another one that could be harvested. not anymore! made sure it worked, and now it\u0026rsquo;s a feature. super satisfying, thank you play testers.\nwe also made a title screen because kicking players right into a game might\u0026rsquo;ve been a bit overkill and quick. also, games take time to load in the browser and if your attention span is less than 3 seconds you could\u0026rsquo;ve looked away. i know i do. but hey, the title screen actually pulls from the recipe list to show an example. it\u0026rsquo;s not much, but i love to put in details like that.\nresults # two days and a bit definitely are not enough to make a full game, even though that\u0026rsquo;s not the point for a short jam like that. we didn\u0026rsquo;t have enough time or expertise to make the game we really wanted to make, but we did make a game that was fun to play, and that we were proud of!\nand i think people noticed that. i mean, we were in the top 30! in both fun and overall rating! how\u0026rsquo;s that for a result!\n[check out the comments too!](https://ldjam.com/events/Ludum Dare/52/f-u-d-food-under-development) it\u0026rsquo;s always so heartwarming to see people enjoy what i do. i do what i do because i enjoy doing it, but seeing this just makes me want to do more. and more i have done, since i\u0026rsquo;ve participated in two more jams after this!\nit\u0026rsquo;s gonna be hard to reach this kind of result again. i\u0026rsquo;d be lying if i said i didn\u0026rsquo;t want to make a game that good again, but not every game\u0026rsquo;s gonna be a hit with everyone.\ni learned a lot about Unity working on this, and game design too. i\u0026rsquo;m still far from experienced, and probably approached this not exactly the best way possible, but we made something that people enjoyed, and i think that\u0026rsquo;s the biggest takeaway for FUD.\nplay Food Under Development on itch.io here.\n","date":"30 March 2025","externalUrl":null,"permalink":"/games/food-under-development/","section":"Games","summary":"a ludum dare 52 game - plant, harvest, cook \u0026 serve","title":"food under development","type":"games"},{"content":"pasta run is a silly game i made with a friend for Ludum Dare 49 (unstable). that was my first game jam and quite possibly the worst way to go at organizing a jam:\ni had no experience in the engine (Godot), participating was decided like, the day before we both had busy weekends. in hindsight i have no idea how we even got a single game prototype working.\nhow did we even get going # brainstorming also happened at completely separate points from both ends, so it was fun working with completely disconnected ideas all way overblown in scope.\nwhat could it even mean for something to be \u0026ldquo;unstable\u0026rdquo;? how would we put that in the game?\nhere\u0026rsquo;s a few of the ideas that we got:\nunstable platforms unstable program (crashes) unstable controls (?) unstable object properties unstable tetris (???) unstable connection we ultimately settled on the idea of \u0026ldquo;unstable weather\u0026rdquo;.\nunstable weather? # turns out weather in the real world is quite unstable. on the saturday of the jam weekend, i looked outside and it turned out to be raining! that\u0026rsquo;s where the weather idea came from.\nso maybe, we could have different weather patterns, and it would affect the game differently? like, for example:\nrain would mean likely to slip and fall snow? slowed down, could trip as well fog, can\u0026rsquo;t see anything etc etc paired with the idea of an infinite runner, that sounded nice! different level patterns, easier or harder. could need you to go as far as you can, collecting items on the way to stay on the run for longer.\nfinal idea on the list however was \u0026ldquo;la course aux pâtes\u0026rdquo; - quite literally pasta run.\nwhy pasta run? why pasta? i can\u0026rsquo;t remember. the game\u0026rsquo;s 4 years old by now\n\u0026ldquo;pasta\u0026rdquo; run # you might have noticed that the pasta in this game does not look like pasta. you might also have noticed that the design overall is very (extremely) simple, and that there\u0026rsquo;s only two levels, and that they\u0026rsquo;re absolutely not infinite.\nyeah, that ties to the fact that i/we organized this extremely poorly. basically my friend and i only really gave half a day each to the game - i gave saturday morning, he gave sunday afternoon and patched things together on monday. good luck making anything coherent with that little dev time.\n\u0026hellip;and somehow we did?\nsure, there\u0026rsquo;s only two levels, and the physics/everything feels janky as hell. but despite all that, it was pretty fun to make!\ni didn\u0026rsquo;t know anything about Godot when when we tackled this project. it was meant to be a learning experience so that i could get started using Godot for maybe future projects. i had a lot of fun messing around and learning, and we ended up using Godot for a VR project for uni around the same time\nthe game might be bad and/or messy, but i love it all the same since you gotta start somewhere if you want to make games.\nyou can play pasta run on itch.io right from your browser. there\u0026rsquo;s also a windows build available, but that\u0026rsquo;s not really necessary unless your browser is ancient somehow\nif you want to do something, just do it. if it doesn\u0026rsquo;t hurt anyone, why not do it? if you need direction to make games, find a game jam and do that!\n","date":"30 March 2025","externalUrl":null,"permalink":"/games/pasta-run/","section":"Games","summary":"a ludum dare 49 game - collect all pasta squares and prevent it from overcooking!","title":"pasta run","type":"games"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"}]