Posts in Gaming (20 found)
Raph Koster 4 days ago

Recommended posts, 2017-2025

It’s been over five years since the last time I gathered up recommended posts in one place and added them to the menu above. I figured I was due. As usual this will include talks and interviews as well as articles. Just think of it as “my take on what the best stuff to look at on the site is.” Previous collections of recommended posts can be found under the Blog heading on the menu bar or at these links: All of these posts are about game design in general and tend to cover big swaths of similar territory. These posts are all specifically about dealing with multiplayer game dynamics. These posts are about the games business and how we as developers get along within it. As always, there was a decent amount of stuff posted to the blog that answered questions about older games. I should probably specifically call out that my book Postmortems came out during this time period and collects 700+ pages of virtual world history. There were a bunch for Ultima Online specifically: And there’s a few more things that are of historical interest: These posts were basically written as marketing for Playable Worlds and our game Stars Reach. However, they also serve as a pretty good manifesto for what I think MMOs ought to be like. There was a huge boom in interest in the Metaverse during this time period. And frankly, most people had no clue what the hell they were talking about, or had very little idea how online worlds and therefore metaverses would even work. Sooooo… First was a series on how they work from a data point of view, aimed particular at folks who thought blockchains solved all the issues. Hint: they don’t. Then there were a series of panels, talks, and podcasts which touched on everything from governance in a metaverse to the hard realities of building one. Trivia: did you know the first one was built during the 90s? I built one during the 2000’s! I did a fair bit of work on emulators during this period. There is much more than just these three things, but these seemed like the most worthy of calling out. Recommended posts 1998-2012 Recommended posts 2012-2017 Reconciling Games , a talk which walks through the process of game design using a fish aquarium as a lens Disassembling Games also walks through high level views of game design, but with special attention to UX design Revisiting Fun: 20 Years of A Theory of Fun is a talk from GDC updating Theory of Fun Game design is simple, actually is now the most popular post on the site, and is an overview of the entire scope of game design as a field Consent systems , a post basically about tandem emotes between two players What old tennis players teach us , which is about overturning static leaderboards The Trust Spectrum is a whitepaper based on Google ATAP research on how trust operates within games, complete with ways to measure your game design for how much trust it demands and how that affects your audience From 1 to n : Multiplayer Game Design is a talk covering all sorts of multiplayer design including trust and social mechanics Depth and Design: Contrasting Human and AI Understandings is about what depth is and whether AI can see it. This talk is mathy and crunchy. Tabletop Game Grammar is a talk applying game grammar principles to poker in particular to see how the concepts translate Start with the Sim is a microtalk about balancing system design versus experience design What drives retention is a post listing the key drivers of retention in games Best practices for community engagement is a post that covers what the title says Why NYT’s Connections makes you feel bad is a crunchy game design breakdown of Connections Sandbox vs themepark is a historical overview of where these two terms come from and what they mean Some current game economics is a response to gamer questions about why the business of games looks like it does. Even though it is years old, everything in there is pretty much still true. The cost of games is a detailed breakdown of the costs involved in game development using data from 1985 to today, which then draws conclusions about what that means for players and for developers. Industry Lifecycles is a talk version of the above, which also describes the the cyclical nature of game platforms. The evolution of ‘gamers’ is a description of the way the term “gamer” and what target market is references has evolved from the 1970s to today. Classic Game Postmortem: Ultima Online at 20 , a talk given for that anniversary Ultima Online’s influence is a post about specifically what UO did to impact games in general Ultima Online’s 25th Anniversary is about Ultima Online terrain Spam Spam Spam Humbug Interview Looking back at a pandemic simulator describes the COVID public health simulator I designed in the midst of the pandemic Classic Game Postmortem: Star Wars Galaxies is a talk given at the 20th anniversary of the game’s launch Ten Lessons Learned is more of a career retrospective talk, ten pieces of advice I would give to any game developer starting now The Evolution of Online Worlds is an hour-long video survey of the history of online worlds The Future of Online Worlds is a manifesto on what living online worlds can be like Thinking long-term is about what makes them last Designing for Social Play gives guidelines on building proper communities and societies within online worlds Player-driven economies touches specifically on how economies play into that Revealing Playable Worlds Technology describes our technical platform But First, the Game is about why that tech, and how it impacts what we can make How Virtual Worlds Work, part one How Virtual Worlds Work, part two Digital Objects: How Virtual Worlds Work part 3 Object Behaviors: How Virtual Worlds Work part 4 Ownership: How Virtual Worlds Work, part 5 Building the Metaverse session Five Big Metaverse Questions covers similar ground to the How Virtual Worlds Work series, but extends it to governance and the question of the Internet as existential threat. Real Talk About a Real Metaverse gives a pile of historical context to it all The Metacast by Naavik: Mastering Digital Worlds Microvision Emulator Release Atari 8-bit Guide for lr-atari800 and Retropie Guide to Retroarch System, Emulator, Core, and ROM Config Files

1 views
Brain Baking 1 weeks ago

Is Collecting Physical Games Worth It? (Part IV)

I bought some more expensive looking Nintendo switch game cartridges. I blame Joel ’s convincing who manages to bypass my already weak resistance to these kinds of messages. This, combined with a diminishing amount of time available to put into gaming, results into my physical backlog being larger than ever before. It’s been three years since I wrote part III and I have more thoughts so here we go. Perhaps read Part I , Part II , and Part III first. Let’s talk about pricing. In part III, I wrote: […] I’m beginning to wonder whether or not I should give up this ridiculousness. Instead, I could buy three games instead of one, and send the money where it belongs: the developers. […] There’s no denying that the price point of a physical game is much higher than that of a digital one. In general, digital versions cost about less—without taking the frequent sales into account that for some reason never happens for physical counterparts. In part III, I discovered that including taxes, physical games cost about times more! Outrageous! Or is it? It’s not! Wait, what? I decided to keep part IV a positive one and have changed my mind since complaining about the price. The higher price comes with a few advantages, hear me out. First, if something is more expensive, it takes more of a deliberate action to buy it. You don’t blindly press the add to cart and check out buttons: you first contemplate whether it’s worth it. Is this game really something I’m willing to pour time into? Should I really get this version considering my backlog already has three too long jRPGs on it? Instead of buying three games on sale in the eShop, you can only buy one so you better make that choice count. Also, precisely because of that deliberate action, I find that actually playing and finishing these games is easier. If you’ve paid that much for a game, you better pour that time into it, otherwise it’s money wasted. Chances are much lower of buying a total bust as you’ll be more thoroughly researching instead of recklessly buying. In the end, I end up enjoying these games more because I feel the need to spend more time with them. And that’s a good thing. Third, that price has never really gone up. A typical Limited Run Game costs —including shipping and taxes, that’s almost . Sixty is the about same amount I paid for a brand new copy of Paper Mario: The Thousand-Year Door in 2004 and it is about the same amount I paid for a brand new copy of the 2024 Paper Mario: The Thousand-Year Door remake on the Switch last year. When taking inflation into account , that should have been instead, an increase of . Observe the following graph depicting a very imprecise history of video game pricing from 1985 (NES) to now. The blue top line is the actual value adjusted for inflation, the red bottom line is the sticker price. Video Games Price History Chart 1985 - 2024. Yes, in the early nineties, cartridge gaming was expensive, although there were many exceptions. Most Mega Drive carts we bought were new and on sale, never reaching or their Belgian Francs equivalent. We transitioned to pirating PC games when those N64 carts became even more expensive. But the biggest takeaway from that graph is the flatline from 2000-ish to just before 2023: relatively speaking, the full price of a physical video game has been stable for more than twenty years. That means for a console game 1 and for the GB(A)/(3)DS counterpart acts as my golden reference point. Convenient then, that limited physical edition releases of Switch games also aim for that range if you include shipping and taxes. This is the reason why I will be totally fine by paying the “full price” for Hollow Knight: Silksong when the digital counterpart is only . Ridiculously cheap, by the way, as this is a slap in the face for other indie studios that struggle to get attention, but that’s an entirely different matter. Sixty “bucks”—can I say bucks when I’m in the Euro zone?—is perfectly reasonable to put down in exchange for deliberate action. Deliberate action that finally got me to sit down and finish the Rise of the Triad: The Dark War campaign while back in 1994 I didn’t even make it to the fourth level of the shareware episode, even though I admired the game. If you still find that hard to stomach, consider this: that Steam copy of your game can be retracted at any time. You’re basically just loaning it even though you’ve paid for it. This has happened before and will happen again. Meanwhile, I can sit back, relax, and laugh, clinging onto all my physical stuff that slowly but surely takes over the house, like a Creature of the Night . Even though that might be a slight exaggeration, there’s another graph that we can easily imagine if we think about value over time as an investment. I know it sounds ridiculous to think of buying games as an investment, and it is, even though many collectors treat it as such. There will be a point when Nintendo Switch games will no longer be produced, and it doesn’t take more than a few months for a price to go up according to websites like pricecharting.com . That is, this graph is the opposite of the above one: your Limited Run Game copy will become more sought after, but the devaluation of money will keep that investment more or less constant—depending on the game, amount of copies, et cetera. Meanwhile, your digital copy will be worth nada simply because you can’t get rid of it as you never really owned it in the first place. To conclude, I wrote another thousand words to confirm what I already said in part II four years ago: Physical games are usually more expensive. And that’s an advantage. Why? Because the more money I spent on a game, the more conscious the decision will be. Oh well. At least the graph is a nice touch, isn’t it? I’m going to pretend Sony PS1/PS2 games and the mass copying of CD-ROMs wasn’t a thing here.  ↩︎ Related topics: / games / collecting / By Wouter Groeneveld on 21 November 2025.  Reply via email . I’m going to pretend Sony PS1/PS2 games and the mass copying of CD-ROMs wasn’t a thing here.  ↩︎

1 views
JSLegendDev 1 weeks ago

Making a Small RPG

I’ve always wanted to try my hand making an RPG but always assumed it would take too much time. However, I didn’t want to give up before trying so I started to think of ways I could still make something compelling in 1-2 months. To help me come up with something, I decided to look into older RPGs as I had a hunch they could teach me a lot about scoping because back in the 80s, games were small because of technical limitations. A game that particularly caught my attention was the first Dragon Quest. This game was very important because it popularized the RPG genre in Japan by simplifying the formula therefore, making it more accessible. It can be considered the father of the JRPG sub-genre. What caught my attention was the simplicity of the game. There were no party members, the battle system was turn based and simple and you were free to just explore around. I was particularly surprised by how the game could give a sense of exploration while the map was technically very small. This was achieved by making the player move on an overworld map with a different scale proportion compared to when navigating towns and points of interest. In the overworld section, the player appeared bigger while the geography was smaller, allowing players to cover large amounts of territory relatively quickly. The advantage of this was that you could switch between biomes quickly without it feeling jarring. You still had the impression of traversing a large world despite being small in reality. This idea of using an overworld map was common in older games but somehow died off as devs had less and less technical limitations and more budget to work with. Seeing its potential, I decided that I would include one in my project even if I didn’t have a clear vision at this point. Playing Dragon Quest 1 also reminded me of how annoying random battle encounters were. You would take a few steps and get assaulted by an enemy of some kind. At the same time, this mechanic was needed, because grinding was necessary to be able to face stronger enemies in further zones of the map. My solution : What if instead of getting assaulted, you were the one doing the assault? As you would move on the map, encounter opportunities signified by a star would appear. Only if you went there and overlapped with one would a battle start. This gave the player agency to determine if they needed to battle or not. This idea seemed so appealing that I knew I needed to include it in my project. While my vision on what I wanted to make started to become clearer, I also started to get a sense of what I didn’t want to make. The idea of including a traditional turn based battle system was unappealing. That wasn’t because I hated this type of gameplay, but ever since I made a 6 hour tutorial on how to build one , I realized how complicated pulling one off is. Sure, you can get something basic quickly, but to actually make it engaging and well balanced is another story. A story that would exceed 1-2 months to deal with. I needed to opt for something more real-time and action based if I wanted to complete this project in a reasonable time frame. Back in 2015, an RPG that would prove to be very influential released and “broke the internet”. It was impossible to avoid seeing the mention of Undertale online. It was absolutely everywhere. The game received praised for a lot of different aspects but what held my attention, was its combat system. It was the first game I was aware of, that included a section of combat dedicated to avoiding projectiles (otherwise known as bullet hell) in a turn based battle system. This made the combat more action oriented which translated into something very engaging and fun. This type of gameplay left a strong impression in my mind and I thought that making something similar would be a better fit for my project as it was simpler to implement. While learning about Dragon Quest 1, I couldn’t help but be reminded me of The Legend of Zelda Breath of The Wild released in 2017. Similarly to Dragon Quest, a lot of freedom was granted to the player in how and when they tackled the game’s objectives. For example, in Breath of The Wild, you could go straight to the final boss after the tutorial section. I wanted to take this aspect of the game and incorporate it into my project. I felt it would be better to have one final boss and every other enemy encounter would be optional preparation you could engage with to get stronger. This felt like something that was achievable in a smaller scope compared to crafting a linear story the player would progress through. Another game that inspired me was Elden Ring, an open world action RPG similar to Breath of The Wild in its world structure but with the DNA of Dark Souls, a trilogy of games made previously by the same developers. What stuck with me regarding Elden Ring, for the purpose of my project, was its unique way it handled experience points. It was the first RPG I played that used them as a currency you could spend to level up different attributes making up your character or to buy items. Taking inspiration from it, I decided that my project would feature individually upgradable stats and that experience points would act as a currency. The idea was that the player would gain an amount of the game’s currency after battle and use that to upgrade different attributes. Like in Elden Ring, if you died in combat you would lose all currency you were currently holding. I needed a system like this for my project to count as an RPG. Since by definition an RPG is stats driven. A system like this would also allow the player to manage difficulty more easily and it would act as the progression system of my game. When I started getting into game development, I quickly came across Pico-8. Pico-8, for those unaware, is a fantasy console with a set of limitations. It’s not a console you buy physically but rather a software program that runs on your computer (or in a web browser) that mimics an older console that never existed. To put it simply, it was like running an emulator for a console that could’ve existed but never actually did. Hence the fantasy aspect of it. Pico-8 includes everything you need to make games. It has a built-in code editor, sprite editor, map editor, sound editor, etc… It uses the approachable Lua programming language which is similar to Python. Since Pico-8 is limited, it’s easier to actually finish making a game rather than being caught in scope creep. One game made in Pico-8 particularly caught my interest. In this game you play as a little character on a grid. Your goal is to fight just one boss. To attack this boss, you need to step on a glowing tile while avoiding taking damage by incoming obstacles and projectiles thrown at you. ( Epilepsy Warning regarding the game footage below due to the usage of flashing bright colors.) This game convinced me to ditch the turned based aspect I envisioned for my project entirely. Rather than having bullet hell sections within a turn based system like in Undertale the whole battle would instead be bullet hell. I could make the player attack without needing to have turns by making attack zones spawn within the battlefield. The player would then need to collide with them for an attack to register. I was now convinced that I had something to stand on. It was now time to see if it would work in practice but I needed to clearly formulate my vision first. The game I had in mind would take place under two main scenes. The first, was the overworld in which the player moved around and could engage in battle encounters, lore encounters, heal or upgrade their stats. The second, being the battle scene, would be were battles would take place. The player would be represented by a cursor and they were expected to move around dodging incoming attacks while seeking to collide with attack zones to deal damage to the enemy. The purpose of the game was to defeat a single final boss named king Donovan who was a tyrant ruling over the land of Hydralia where the game took place. At any point, the player could enter the castle to face the final boss immediately. However, most likely, the boss would be too strong. To prepare, the player would roam around the world engaging in various battle encounters. Depending on where the encounter was triggered, a different enemy would show up that fitted the theme of the location they were in. The enemy’s difficulty and experience reward if beaten would drastically vary depending on the location. Finally, the player could level up and heal in a village. I was now ready to start programming the game and figuring out the details as I went along. For this purpose, I decided to write the game using the JavaScript programming language and the KAPLAY game library. I chose these tools because they were what I was most familiar with. For JavaScript, I knew the language before getting into game dev as I previously worked as a software developer for a company who’s product was a complex web application. While most of the code was in TypeScript, knowing JavaScript was pretty much necessary to work in TypeScript since the language is a superset of JavaScript. As an aside, despite its flaws as a language, JavaScript is an extremely empowering language to know as a solo dev. You can make games, websites, web apps, browser extensions, desktop apps, mobile apps, server side apps, etc… with this one language. It’s like the English of programming languages. Not perfect, but highly useful in today’s world. I’ll just caveat that using JavaScript makes sense for 2D games and light 3D games. For anything more advanced, you’d be better off using Unreal, Unity or Godot. As for the KAPLAY game library, it allows me to make games quickly because it provides a lot of functionality out of the box. It’s also very easy to learn. While it’s relatively easy to package a JavaScript game as an app that can be put on Steam, what about consoles? Well it’s not straightforward at all but at the same time, I don’t really care about consoles unless my game is a smash hit on Steam. If my game does become very successful than it would make sense businesswise to pay a porting company to remake the game for consoles, getting devkits, dealing with optimizations and all the complexity that comes with publishing a game on these platforms. Anyway, to start off the game’s development, I decided to implement the battle scene first with all of its related mechanics as I needed to make sure the battle system I had in mind was fun to play in practice. To also save time later down the line, I figured that I would make the game have a square aspect ratio. This would allow me to save time during asset creation, especially for the map as I wanted the whole map to be visible at once as I wouldn’t use a scrolling camera for this game. After a while, I had a first “bare bones” version of the battle system. You could move around to avoid projectiles and attack the enemy by colliding with red attack zones. Initially, I wanted the player to have many stats they could upgrade. They could upgrade their health (HP), speed, attack power and FP which stood for focus points. However, I had to axe the FP stat as I originally wanted to use it as a way to introduce a cost to using items in battle. However, I gave up on the idea of making items entirely as they would require too much time to create and properly balance. I also had the idea of adding a stamina mechanic similar to the one you see in Elden Ring. Moving around would consume stamina that could only replenish when you stopped moving. I initially though that this would result in fun gameplay as you could upgrade your stamina over time but it ended up being very tedious and useless. Therefore, I also ended up removing it. Now that the battle system was mostly done, I decided to work on the world scene where the player could move around. I first implemented battle encounters that would spawn randomly on the screen as red squares, I then created the upgrade system allowing the player to upgrade between 3 stats : Their health (HP), attack power and speed. In this version of the game, the player could restore their health near where they could upgrade their stats. While working on the world scene was the focus, I also made a tweak to the battle scene. Instead of displaying the current amount of health left as a fraction, I decided a health bar would be necessary because when engaged in a fast paced battle, the player does not have time to interpret fractions to determine the state of their health. A health bar would convey the info faster in this context. However, I quickly noticed an issue with how health was restored in my game. Since the world was constrained to a single screen, it made going back to the center to get healed after every fight the optimal way to play. This resulted in feeling obligated to go back to the center rather than freely roaming around. To fix this issue, I made it so the player needed to pay to heal using the same currency for leveling up. Now you needed to carefully balance between healing or saving your experience currency for an upgrade by continuing to explore/engage in battle. All of this while keeping in mind that you could lose all of your currency if defeated in battle. It’s important to note that you could also heal partially which provided flexibility in how the player managed the currency resource. Now that I was satisfied with the “bare bones” state of the game, I needed to make nice looking graphics. To achieve this, I decided to go with a pixel art style. I could spend a lot of time explaining how to make good pixel art but, I already did so previously. I recommend checking my post on the topic. I started by putting a lot effort drawing the overworld map as the player would spend a lot of time in it. It was a this stage that I decided to make villages the places where you would heal or level up. To make this clearer, I added icons on top of each village to make it obvious what each was for. Now that I was satisfied with how the map turned out, I started designing and implementing the player character. For each distinct zone of the map, I added a collider so that battle encounters could determine which enemy and what background to display during battle. It was at this point that I made encounters appear as flashing stars on the map. Since my work on the overworld was done, I now needed to produce a variety of battle backgrounds to really immerse the player in the world. I sat down and locked in. These were by far one of the most time intensive art assets to make for this project but I’m happy with the results. After finishing making all backgrounds, I implemented the logic to show them in battle according to the zone where the encounter occurred. The next assets to make were enemies. This was another time intensive task but I’m happy with how they turned out. The character at the bottom left is king Donovan the main antagonist of the game. Further Developing The Battle Gameplay While developing the game, I noticed that it took too much time to go from one end of the battle zone to the other. This made the gameplay tedious so I decided to make the battle zone smaller. At this point, I also changed the player cursor to be diamond shaped and red rather than a circle and white. I also decided to use the same flashing star sprite used for encounters on the map but this time, for attack zones. I also decided to change the font used in the game to something better. At this point, the projectiles thrown towards the player didn’t move in a cohesive pattern the player could learn over time. It was also absolutely necessary to create a system in which the attack patterns of the enemy would be progressively shown to the player. This is why I stopped everything to work on the enemy’s attack pattern. I also, by the same token, started to add effects to make the battle more engaging and sprites for the projectiles. While the game was coming along nicely, I started to experience performance issues. I go into more detail in a previous post if you’re interested. To add another layer of depth to my game, I decided that the reward you got from a specific enemy encounter would not only depend on which enemy you were fighting but also how much damage you took. For example, if a basic enemy in the Hydralia field would give you a reward of a 100 after battle, you would actually get less unless you did not take damage during that battle. This was to encourage careful dodging of projectiles and to reward players who learned the enemy pattern thoroughly. This would also add replayability as there was now a purpose to fight the same enemy over and over again. The formula I used to determine the final reward granted can be described as follows : At this point, it wasn’t well communicated to the player how much of the base reward they were granted after battle. That’s why I added the “Excellence” indication. When beating an enemy, if done without taking damage, instead of having the usual “Foe Vanquished” message appearing on the screen, you would get a “Foe Vanquised With Excellence” message in bright Yellow. In addition to being able to enter into battle encounters, I wanted the player to have lore/tips encounters. Using the same system, I would randomly spawn a flashing star of a blueish-white color. If the player overlapped with it, a dialogue box would appear telling them some lore/tips related to the location they were in. Sometimes, these encounters would result in a chest containing exp currency reward. This was to give a reason for the player to pursue these encounters. This is still a work in progress, as I haven’t decided what kind of lore to express through these. One thing I forgot to show earlier was how I revamped the menu to use the new font. That’s all I have to share for now. What do you think? I also think it’s a good time to ask for advice regarding the game’s title. Since the game takes place in a land named Hydralia . I thought about using the same name for the game. However, since your mission is to defeat a tyrant king named Donovan, maybe a title like Hydralia : Donovan’s Demise would be a better fit. If you have any ideas regarding naming, feel free to leave a comment! Anyway, if you want to keep up with the game’s development or are more generally interested in game development, I recommend subscribing to not miss out on future posts. Subscribe now In the meantime, you can read the following :

0 views
Brain Baking 1 weeks ago

2025 Holiday Gift Guide

This post is inspired by Johnny Webber’s 2024 Holiday Gift Guide that serves as a great starting point if you don’t know what to get for your friends & family. Johnny’s list is broad and includes suggestions from tech to food, arts, gaming, books, and even writing material. Making Christmas wish lists seems to become harder and harder as I get older and already have way too much stuff. When we are young, without access to a disposable income, the holiday period somehow felt more exciting. Flipping through toy store ad leaflets, whipping out scissors to cut and paste the things that drew our attention onto a separate colourful piece of paper for Santa to take a good look at. I want this one , and don’t you dare to buy me that cheap alternative! We try to cut our way through the few ads that still land in our mailbox but it doesn’t feel the same any more—a part of the genuine childlike excitement is gone for good. It took me a while to come up with six items that made it to my list. Like Johnny, I’m only recommending things I like. Here’s a collage representing that list: The 2025 Holiday Gift Guide: six suggestions. First, the UFO 50 Nintendo Switch game—specifically the physical version published by Fangamer.eu , obviously. There’s still a lot on my wish list, so any of the following is great as well: Streets of Rage 4 Anniversary Edition , Unicorn Overlord , The Legend of Zelda: Echoes of Wisdom , Monster Boy & The Cursed Kingdom . If you happen to come across a copy of Powerslave Exhumed by Limited Run Games that’s been out of print for a while, that would be very nice too. If you have no idea but want to make sure it’s a good game, check out my Top 100 suggestions . Second, a gift coupon to spent at our local book store GRIM . Although my wife reminded me that we still have two coupons lying around that need to be used. I tried to come up with a concrete book title but my wanted list is a mess and I just bought six books that I haven’t touched yet. Feel free to add your own favourite entry. Third, Sailor’s Manyo Ume fountain pen ink: a dark red/brown colour with a unique sheen (see the Mountain of Ink review ). Or add a tint of Pilot Irushizuku ink, but I’ve never tried Sailor’s before and don’t have a colour that matches this range. Hopefully this will entice me to get back into writing on paper more which is a hobby I’ve been neglecting too much lately. Fourth, the Lord of the Rings: Fate of the Fellowship board game. I mentioned in the SPIEL Essen post that I wanted to grab a copy but ultimately left it for the Christmas list, so here it is. Two equally chunky alternatives might be Tea Garden or Creature Caravan . If you’re looking for a lighter game, perhaps check out my modern trick taking suggestions instead. Fifth, Manet’s Bundle Of Asparagus . The original one, please. Enlist the Ocean’s Eleven crew and send them to the Wallraf-Richartz Museum in Cologne, Germany. Or, if they happen to be busy, order a high quality reproduction, through for example Wahoo Art . I’m unsure about the working conditions and ethical beliefs of that system as I just stumbled on it, but if that’s not an option, just a nice print will do. We’ll have a resin coating added later that makes it look like the real thing. Ever since reading about the painting in Alain de Botton’s Art As Therapy , I’ve wanted to hang a copy in the kitchen. Plus, we’re very fond of asparagus. Lastly, a heavy duty dough mixer, or more specifically, the Italian made Famag Grilletta IM5S . These spiral mixers are not cheap and come in at around so just a donation towards it will suffice. I’ve been kneading by hand for twelve years but with the kids and our increased bread consumption rate it’s getting harder to keep up. Plus, the Grilletta that kneads any dough to windowpane without blinking twice will finally enable me to make smooth buttery dough and up the hydration in the more rustic recipes. The IM5S—contrary to the IM5 model without the S—can be tilted to remove the bowl and more easily clean it. Still unsure? My archives tell me the following things made it to previous Christmas wish lists: Happy holidays! Related topics: / Christmas / By Wouter Groeneveld on 19 November 2025.  Reply via email . WoodWick candles Random Magic: The Gathering boosters An Apple Magic Keyboard I never got and eventually bought myself An authentic Belgian waffle iron (you can’t live without this if you’re living in Belgium) The book Sourdough by Robin Sloan The cookbook Marie Plukt De Dag More Switch games like The Witcher 3 , Dragon Quest XI , and Metroid Dread A GameCube HDMI adapter A lovely pen roll to protect your precious fountain pens on the go A soldering iron

2 views
Brain Baking 2 weeks ago

Why I Don't Need a Steam Machine

For those of you who are living under a rock, Valve announced three new hardware devices joining their Steam Deck line-up: a new controller, a VR headset, and the GameCube—no wait, GabeCube—no wait, Steam Machine. The shiny little cube is undoubtedly Valve’s (second) attempt to break into the console market. This time, it might just work. The hardware is ready to arrive in at your living room spring next year. The biggest question is: will it arrive at our living room? Reading all the hype has certainly enthused me (e.g. Brendon’s The Steam Machine is the Future , PC Gamer’s Valve is all over ARM , Eurogamer’s Steam Machine preview , ResetEra’s Steam Hardware thread ); especially the part where the Machine is just a PC that happens to be tailored towards console gaming. According to Valve, you can install anything you want on it—it’s just SteamOS just like your trusty Deck, meaning you can boot into KDE and totally do your thing. Except that this shiny little cube is six times as powerful. I’m sure Digital Foundry will validate that next year. Valve's newly announced Steam Machine: a mysterious looking sleek black box. However, this post isn’t about specs, expectations, or dreams: it’s about tempering my own enthusiasm. I’d like to tell myself why I don’t really need a Steam Machine. The following list will hopefully make it easier to say no when the buy buttons become available. So you see, I don’t really need a Steam Machine… Fuck it, I’m getting one. Related topics: / steam / games / By Wouter Groeneveld on 16 November 2025.  Reply via email . You’re a retro gamer. You don’t need the power of six Steam Decks. To do what, run DOSBox? Your TV doesn’t support 4K . Again, no need for those 4K 60 FPS. You generally dislike AAA games. With The Steam Machine, you might be able to finally properly run DOOM Eternal and all of the Assassin’s Creed games. That you don’t like playing. You don’t have time to play games anyway. Ouch, that hurts but it’s not untrue. The TV will be occupied anyway. The Steam Machine is not a Switch: you can’t switch to handheld mode. When are you going to play on the Machine if the TV is being used to watch your wife’s favourite shows? You already have too many gaming related hardware pieces. That’ll mean you’ll have to divide your time by an even bigger number to devote an equal amount to playing them. There’s no room for yet another nondescript box under the TV. See above: why don’t you first try to do something with that SNES Mini and PlayStation Mini besides letting it collect dust? You’re a physical gamer. This is Steam. There will be no insertion of cartridges, no blowing of carts, and no staring at game collections on a shelf. It’s Steam, not Good Old Games. Sure it can run GOG games but the Machine is primarily designed to run Steam. You avoid purchasing from Steam like the plague, yet you’re willing to buy a Machine dedicated to it? Are you crazy? The last time you booted Steam was over a year ago. Don’t tell me you’re suddenly interested in running the platform on a dedicated machine. You don’t have time to fiddle with configuration. Button and trackpad mappings to get the controls just right enough to play strategy games designed to be played with keyboard and mouse will only leave you frustrated. Your MacBook can emulate Windows games just fine. You recently bought CrossOver and played Wizordum and older Windows 98/XP stuff on it. It even runs Against The Storm flawlessly. No need for Proton or whatever. In two years, you’ll upgrade your M1 to an M4+: there’s the power upgrade. If CrossOver is struggling to run that particular game you so badly want to play, it’ll be buttery smooth in a few years. You’re going to do the laptop upgrade anyway regardless of the Steam Machine. You already have a huge gaming backlog. Thanks to your buddy Joel you bought too many physical Switch games that are still waiting to be touched. Are you really ready to open up another can of worms? You dislike a digital backlog. It’s easy to have hundreds of games on there: see your GOG purchases. Why don’t you try to count the ones that you actually played, let alone finished. You’re not going to use the Machine to run office software. Your laptop and other retro machines are good enough at handling that task. What are you really going to do with this cube besides gaming? Those cool looking indie games will be released for Switch in due time anyway. Remember Pizza Tower ? It’s out on Switch now. Remember to buy the cart on Fangamer, together with the Anton Blast one. It’s rumoured to cost more than . Save that money for a Switch 2 if the games are starting to become interesting to justify that upgrade, as currently, they’re not. Also, see the backlog point above. All HDMI ports both on the TV and your external monitors are occupied . Unless you’re willing to constantly switch cables, you’ll need to invest in a HDMI switch. Another . You can’t buy this without buying the Steam Controller. That’s easily another you already spent buying the Mobapad controller for your Switch as a replacement for the semi-broken Joy Cons. You can’t buy this as an expense on the company. You’re closing down the company, remember. (More on that later) The cool looking LED and programmable front display don’t justify an expensive purchase. After the initial excitement wears off, the LED will become annoying and you’ll simply turn it off.

0 views
Playtank 2 weeks ago

Maximum Iteration

The quality of your game is directly related to the number of iterations you have time to make. The adage is that game development is an iterative process . We know we should be tweaking and tuning our game until it feels and runs great. To make it the best it can be; greater than the sum of its parts. Early on, to make sure that the features we work on are worth pursuing. An iteration can be as small as an incremented variable or as big as a complete reset of your entire game project. What iterations have in common is that the only way to get more of them is to teach yourselves the right mindset and to continuously remove anything that costs time. For the past few years, this has been at the top of my mind: how to maximise iteration . At the very highest level, you need to remove obstacles, clicks, and tools. The fewer things a developer needs to know and do per iteration, the better. Those three are what this is all about. I’ve come up with five areas where you need to optimise iteration, that I’ve obsessively built into my own pipelines. These five are what the rest of this post elaborates on: Iterating on object and state authoring means creating new objects and states and connecting them to data. A character that can roam, shoot, and take cover, and has MoveSpeed, TurnSpeed, and Morale, perhaps. This is one of those things where many developers will get used to how their first engine does things and forever see it as the norm. But most tools for object authoring are actually quite terrible (in my opinion), and are also highly unlikely to match your specific needs. They are far more likely to present you with hoops to jump through and prevent you from achieving fast iteration. It’s not unusual for getting a new object into a game to take hours and involve multiple people. Particularly if the game’s pipeline has grown organically over several years of production. Where you only had to add a single collision capsule at first, maybe you must now add a full ragdoll, two different sets of hit capsules, IK targets, and a bunch of other things before the new asset works as intended. Some of which has to be created manually. Forget one step, and your game may crash or exhibit weird results. This is a big threat to iteration. Maybe the biggest. So if you can, you should make your own tools for object authoring that are perfectly suited to your needs, require as few steps as possible, and waste as little time as possible. Or use a tool that’s specifically made for exactly the thing you need, if you can find it. I tend to think of objects in systemic design as Characters, Props, and Devices. This is not in any way strict, it’s only what my favorite designs tend to need. If you are working on a grand strategy game, a puzzle game, or something else, the nature of your objects may vary. The key to object authoring is variation. A lamp is not the same thing as a crate or a human, but they should be able to interact in interesting ways. To make them interact, you need to be able to vary them easily and then hand off responsibility to the game’s systems in a predictable way. Something that can’t be stressed enough is to always set working defaults for all of your objects. Make sure that objects work out of the box so iteration can begin immediately. Few things waste more time than “oops, forgot the flag that did the thing.” The most intuitive way to represent objects is to use objects, unsurprisingly. A Character can be expected to do certain things and a Door will do other things. Enemy and Player can now inherit from Character and they may make use of a Gun or a Broom depending on the kind of game you’re making. With this setup, authoring objects is no harder than inheriting from the right class and then tweaking the numbers. This is how Unreal Engine is used by many teams. But this gets cumbersome if you want a character that can fly or to utilise the dialogue system in a character but for something that cannot move. Or maybe the spline following that characters have, but now for a train car. Authoring with object-oriented systems seems intuitive but doesn’t handle exceptions well. Everything now needs to be a character if it wants to access certain things, and designers will have to learn the intricacies of all the objects in the game before they can truly begin iterating. If you want your object to collide with things in a physics simulation, you add a Collider. If you want it to move on a flow field, you add FlowFieldMove. The sum of an object’s components dictates its behavior. This may use many different types of component setups, but the two most common are GameObject/Component (GO/C) and Entity Component System (ECS). Both Unreal and Unity uses the first, but in very different ways. Both Unreal and Unity also provide ways to use the second, but in ways that are mostly incompatible with the first. Conceptually, component-based object authoring is great. In practice, it tends to be a deep rabbit hole of exceptions and flawed component combinations that have grown organically through an engine’s lifetime. Most game engines today are data-driven at some level. You plug data in, it gets compiled into an engine-friendly format, and voila: the engine knows what to do. The data is picked up by a renderer, physics engine, or something else, and things simply happen just the way they are supposed to because the data is clear enough to just chug along. Like feeding coal into a steam engine. With a data-driven approach, you will usually be collecting all that data and bundling it up using authoring tools. Bring in the mesh asset, animate it using animation assets, play some sound assets on cue, etc. The data itself will drive the process. For example in a “target-based” setup, where one piece of data activates another which activates a third, etc., until the game level or other logic has run its course. You need ways to define how something goes from Alive to Dead, or when something should be Idle instead of Moving. This layer of authoring and iteration is very rarely straightforward, and parts of it are almost always deep down in the code for your game. This is bad. So let’s discuss how to make it not bad, and how to open up your game for more direct rules authoring through state transitions. If my use of the word “state” in this post gets confusing, you can look into the state-space prototyping post to see what I mean. This is not standard jargon used by all game developers, but it is a key part in my own framework. A good state authoring tool allows you to list which states an object can be in, where it can collect changes from, and how it behaves in relation to other objects and their state. Just to be clear: this doesn’t have to be complex at all. It can be enough to list the actions an entity can use and then leave it to other systems to actually select actions. Take a look at the An Object-Rich World post if you are curious about other models for working with permissions and restrictions. The most important element of permissions and restrictions is predictability . There are many cases where our games become interconnected in ways that are not immediately visible. For example, when you say that a character’s ability to Move has been restricted due to a state, you may have to manually add this to multiple places. Perhaps the sound, animation, and head-bobbing system also need to be paused separately. This is extremely bad, because it means both that you will get unpredictable results and that you will often have to revisit the same changes. A specific state is only relevant for a particular object. A generic state can be used by any object sharing the same characteristics. Think of the idea of spotting something, for example. A sensor picking up that an object can be seen. If a player is going to spot something, this needs to be specific , since the player’s avatar, unlike a NPC avatar, will generally have a camera attached to it. So to check if the player spots something, we can use the camera’s viewport to determine if the thing is on-screen or not. A generic version of the same thing could instead use the avatar’s forward vector, an arbitrary angle, and perhaps a linecast, to determine if the object can be seen. This could be used by any avatar, player or otherwise, and would probably be accurate enough if your game doesn’t need more granularity. An exclusive state is the only state that can be run at a given time, whereas an inclusive state also allows other state to run alongside it. Parallell states are made to run at the same time as each other and may therefore not poke at the same data, or you could get unpredictable results. A state is conditional if it only activates based on preset conditions. It’s your if-then-else setup. Conditionals will often need considerable tweaking, and if you’re not careful in how you build such systems, they can turn into a tangled mess. Just like nested ifs. Common ways to handle conditional states are predicate functions, tags, flags, and many of the other things brought up in the A State-Rich Simulation post. Preferably, setting or changing conditionals should be just a click or two, and it should respect the type of data separation mentioned earlier. When a game has multiple dynamic sources for conditions, it quickly gets complicated. For this reason, your tools should provide debug settings for visualising where conditions are coming from, and you can also log everything that gets triggered by certain conditions during a session. A state is injected when it’s pushed into an object. This can follow any number of systemic effects , from straightup addition to slightly more granular propagation . Common points in a game simulation for state to get injected are collision events, spawning or destruction, proximity, spotting, and various forms of scripted messaging. This means that having a solid system for defining such injections is a great starting point for how transitions will work in your game. If you have the concept of a Room, for example, this Room may keep track of what’s inside of it and then propagate that knowledge to anyone visiting the room. Objects would then inject their presence into the room, while the room would inject relevant state into the objects in turn. An explicit conditional state is something like the Idle state pushing a Move state onto an internal stack because move vector magnitude is higher than zero. These are the only circumstances where Move will ever happen, making it an explicit transition. A dynamic state would be something like a gunshot killing you by injecting the Dead state. This is a dynamic transition because it can happen at any time, and beyond any restrictions on the injection itself (ammo, aiming, etc.), you won’t be defining anything in advance, and you’re not really waiting for it to happen. It happens when it happens, or it may not happen at all. A state is timed if it remains active for a limited time. It can also loop over a given duration and either bounce back (i.e., from 0 to 1 back to 0) or it can reset and repeat. The current value of the timed state is often referred to simply as T and should be a normalized (0-1) floating point number. This type of state is extremely handy, and you will want to tweak how the T value output gets handled in as many varied ways as possible. You want to be able to use curves, easing functions, and all thinkable different kinds of interpolation. Timed state can be used to achieve anything from a Thief -style AI sense of “smell,” to a menu blend, to an animation system, to reward pizzazz. It’s the perfect type of state for an interstitial and is where you will be able to do much of your polish. A state is interstitial when it’s added between other states without affecting them beyond the delay this may cause. Screenfades, stop frames, and sound triggers, are some examples of this. Objects and states will be defining the game at its highest level. But you will also want to change the rat catcher’s catching range from 2.3 to 2.5 and maybe add an additional key to a curve to make a fade-in smoother. It’s been mentioned before, but may be worth repeating: you should separate data from objects from the very beginning of your project. Every second you can avoid having to navigate the jungle of files in your project is a second gained towards additional iteration. Remember: remove clicks and remove tools. Many games will expect either a database approach (“spreadsheet specific,” in Michael Sellers’ terms), or they will have a hard connection between an object and its data. But a good data authoring tool is either integrated with the game engine or is an established external tool, such as a spreadsheet or database, that has a single-click or dynamic export/import process into the game. Many games still to this day keep data hard-coded into their compiled executables. This can be done for security or obfuscation reasons, out of habit, or because the engine used for a certain game is structured that way. For a small game with simple data, this is rarely an issue. You can make your changes, recompile, and then test, within seconds. But for bigger or more complex projects, it can have a cascading effect on iteration complexity. It also forces you to rely on programmers even for changes that have nothing to do with game logic or code. If you can avoid this, do so. It doesn’t matter if a compile takes five minutes, it’ll be stealing those five minutes over and over again. It will also decrease the number of iterations you can make. Issues with compiled data are not new. One common way to avoid some of them is to use lightweight text files that can be loaded and interpreted at runtime. This can be done in one of two ways. You can construct data this way . The below is a small example of this, where Lua was used to package information about different sectors in a space game. In this case, a sector has details about which other sectors the player can travel to, which pilots are present in the sector, and which stations and colonies can be visited. This is information that could’ve been hardcoded into the client, but this way it’s made available at runtime and much easier to iterate on. You can build logic this way . The next example is also Lua, but is a narrative sequence from the same space game. By exposing gameplay features to Lua, it becomes possible to script these sequences that can be loaded and parsed by the engine on demand. One benefit of this is that you can rewrite the script, make the engine reload the data, and then test within moments of making the change. If there’s such a thing as a standard today, it’s to store your data in a database. This database may live on a proprietary server owned by the developer or publisher, or it can utilise something in the cloud, like Microsoft Azure or Amazon Web Services (AWS). It can also be an offline database that you store with your game client much like a script. A database forces you to decouple data from objects and allows live editing of data (if in the cloud). Most modern live service games do this for some of its data, if not all, as it makes it a lot easier to respond to community feedback and fix data-related issues. Planning how you structure your data before a project begins can save you many headaches. If you want to do MoveSpeed, you could have a MoveSpeed baseline multiplier at 1.0, each object could have a MoveSpeed attribute of maybe 10-20, and gear or other props could then add their own MoveSpeed modifiers on top as additions, multipliers, cumulative multipliers, or some other thing. You’d get something like MoveSpeed = Baseline * (Attribute + Modifier(s)) . If you manage to separate these from their objects you can mix things up for any reason you want without ever touching or even looking for the objects ever again. The amount of time this saves for more iteration can’t be overstated. (Again: remove clicks, remove tools.) Maybe you want to modify Baseline based on difficulty, so that MoveSpeed is 1.5x on Easy, but only 0.75 on Hard. Or go in there and double the MoveSpeed attribute for all enemies that have the Small trait. With this type of separation, all of those things can suddenly be done in seconds. This makes everything from bulk operations to conditional exceptions a lot easier to make and therefore to iterate on. A change set is a collection of changes made to your existing data. You can look at it as a changelist or commit in version control. Bundling variables into change sets is a handy way to keep track of what you are doing and makes it easier to compare one change to another. Change sets really come into their own if you can combine them, turn them on/off, and provide more than one at a time. Over time, these sets can become like a log for your earlier tweaks, creating a kind of tweak history for your game’s design. To know how any iteration works out you need to play it. But it’s not enough to merely play as you usually do. You need to compare changes and report when something doesn’t work out. Even as a solo developer, a solid reporting tool can be the difference between fixing problems and shipping with them. This is where your change sets from before will work their magic. Let’s say you made a “goblin damage debuff” change set where you decreased how much damage the goblin dealt by half, and you now go into your change set tool to activate that change set. Or you tell external playtesters to play once with and once without the change set. You can suddenly talk about balancing the same way you’d talk about feature implementations. I encounted Semantic Versioning during my first mobile game studio experience, at Stardoll Mobile Games. I’ve stuck to it ever since. The summary for Semantic Versioning is so simple, yet so powerful: “Given a version number MAJOR.MINOR.PATCH, increment the: This is a convenient way to plan your assets. The Patch version can be automatically incremented whenever you build your game to identify each change and you can regulate when the Minor and Major version must be incremented. For example, you can plan that you only release a new Major when you are releasing new content and a Minor when features are added or changed. At Calm Island, we used to maintain one Dev and one Stable branch. The latter meant we could always show the game to any external stakeholders, even if it may have been an older build. The stable version was also the one deployed to stores after final validation. The idea to always keep your game playable may sound self-explanatory, but good processes for this are uncommon. Many studios still use a single main branch for everything and when a deadline looms the only way to safeguard its health is to enact some kind of commit/submit stop where no one is allowed to push anything that risks the playability of the build. This often results in a rush of new code and content right after the stop is lifted, that almost always breaks something and may take days or weeks to resolve. A common issue with playtesting is that you need to jump through hoops before you can test the thing you’re actually working on. This can be because you need to launch the game, go through the splash screen, load the right level, noclip or teleport to the right place, etc., before you actually play . If your game is unstable (see Always Playable above), this can be further exacerbated by crashes or bugs that are not yours to fix. To avoid this it’s important to be able to do targeted testing. Using isolated environments, such as a “gym” level for movement testing, and testing exactly the thing you just tweaked or implemented without any distractions. You need to be able to mix and match both systems and change sets in your game, to iterate as much as possible. Play without the enemy AI running, no props spawning, or with that goblin damage debuff or double move speed turned on or off. You can look at this like the layers in Photoshop, where you can turn things on or off so they don’t impact your testing when you need to test something specific. Once you have a modular setup, make sure that you can switch quickly and easily between different modules as well. Make them incerchangeable. If you need to test playing against only a single goblin, but that goblin can’t move, and you have only torches and stale bread; then it should be as few clicks and tools involved as possible to do so. Once the data is separated, you can take it one step further: you can remove entire segments of your game and isolate iteration and testing to retention loops or other longterm systems. Think of a standard game loop. You have some inputs into each session, such as matchmaking settings or difficulty selection. This input affects how the session plays. Once the session completes, you get outputs , such as XP or treasure , that you can then reinvest into progression. This is the template for many standard game loops. Simulated state allows you to pretend that one of these steps happened without actually having to take the time to play them. You can randomise the inputs and then play, or skip the session entirely to only work on the output and investment cycle. Once you reach the modular and interchangeable iteration dream, this is quite possible. The value of this type of testing is high, since longterm systems often don’t get the testing they need simply because you must finish a real session of gameplay to get the “proper” outputs. Being able to compare different iterations to each other and choose which comparisons to make is more of a meta tool than it’s directly testing related. It’s more about comparing the results you gain from testing than the testing itself. Look at the Game Balancing Guide for some inspiration on what kinds of things you could potentially compare. If you find something that’s not great or that you want to revisit, make it easy to take notes or report to a central system; you may even go so far as to generate planning tickets from an in-engine event. Have your testers press some easy to access key combination (on controllers, maybe to hold both triggers and both stick buttons down for one second). Sometimes in a big team, the more technical tasks involved with the build and distribution process are invisible to you. You may hear about porting or signing or compliance, but you never have to deal with any of it. You happily playtest on whatever is easy and available, usually your development computer. Sometimes even inside of your development environment. The reason this happens is because your updating process is not built with iteration in mind. Builds take too long, frequently don’t work, and distributing to local devices is a hassle. Many teams “forget,” or rather downprioritise, testing on their proper target devices. One of the stranger things I’ve run into is developers who not only dislike testing on their current target platform but basically refuse. It’s so much easier to stay in your comfortable development environment indefinitely. Some studios may even resent some of their own target platforms, for example mobile platforms or consoles, because they are allowing personal opinion to affect their professionalism. But there’s really no excuse: you should always test on your target devices. Something that’s easy to overlook is to keep visible and easily copy/pasteable version information on-screen in your game. This is good for a product after launch too, so that players can provide you with more detailed information if they experience bugs or crashes. One of the first things I did in gamedev was to drive cars along a race track’s edges to make sure that the collisions worked like they should. A kind of testing that you can automate relatively easily. In test-driven development , testing and automation is already part of the thinking, and there’s really no need for game development to be different. Automate the right things, however. An automated test can’t tell you about quality. It can’t suggest design changes or warn that a player may not understand the phrasing of a dialogue line. Automate regression testing, compliance testing, integration testing, and the driving along the tracks to test collision. But don’t automate quality testing. Building for all of your platforms without having to do so manually is an essential element of game development. No amount of testing in a development environment compares to testing real builds. Automated builds are often triggered by new commits or version increments. It’s also common to have nightly builds, hourly builds, and build cadences based on testing needs and build duration. What’s important for such a pipeline is that it can clearly say what’s going wrong by posting logs and details to the relevant people. A Slack channel, for example. What you absolutely don’t want is to put developers on fulltime duty to get builds out. Once you have a build, you need to get that build onto the right device for testing. Most devkits and software platforms allow remote connection. You can usually set up jobs to trigger automatically when a build completes and publish your game to your testing platform (or even live) without requiring any work at all. Hopefully, this post provides some food for thought on iteration and what it really means. If not, tell me every way I’m wrong in an e-mail to [email protected] or in a comment. Here’s the list: Remove obstacles . Make the process of iteration as fast as possible, by removing gatekeepers and bottlenecks. Maybe you shouldn’t go through the full approval process for a quality of life improvement, maybe your playtesters should get three separate sets of things to test instead of just one, and maybe a developer can prioritise their own tasks rather than sitting in hours-long meetings or being micromanaged. Remove clicks . I once heard the suggestion that you lose 50% of viewers with every required interaction on a website. More clicks will invite more pain points, more potential human errors, and will also lead to fewer iterations. Just imagine (or remember) not having box selection in a node tool vs having it. Remove tools . You need special skills, licenses, installation time, and more, the more tools you require. Everything in your pipeline that can be either bundled into something else or removed entirely via devops automation should be considered. Not least of all because tools development is itself a deep rabbit hole . Authoring objects and data. Transitioning objects between states. Tweaking and rebalancing data. Testing and comparing iterations. Updating the game for testing and distribution. For object-oriented authoring: clearly visualise what an object can (and can’t) do based on its inheritance; don’t hide logic deep into a dropdown hierarchy. For component-based authoring: make non-destructive tools with opt-in as the default rather than opt-out . Provide good error messaging for when requirements are not met. For data-driven authoring: provide clear debug information and visual representations for where data is coming from, when, and what it allows. Make it clear what data is expected where, so no steps are missed. Make it easy to list states and transitions per object. Provide state transition information with data reporting, so that you can keep track of all the whens and whys. Make states have meaning; if a state says that an object cannot move, this should be definitive. Differentiate between Specific and Generic states, so that you will never accidentally add state to an object that won’t work. Set clear guardrails between Exclusive, Inclusive, and Parallell states. Plan what you need each state to be able to do and where to get its data. Visualise which conditions apply at a given moment and why. Show when conditions are unavailable and why. Log transition changes and which conditions made them change. Show when, how, and from where a state injection occurs. Make it clear which explicit states are running at any given time. When dynamic state is triggered, make all of its relevant overrides predictable and singular: it should always be enough to turn something on or off once . Provide visualisations of start and end positions for timed states. Allow developers to scroll timed states manually to preview them. Allow states to resume after interruption, so that you can use interstitials in a non-destructive way. Separate your data into logical containers, such as Baseline, Attribute, and Modifier. Bundle collections of changes into change sets . E.g., “double move speed.” Identify change sets modularly, so you can test more than one thing at a time. MAJOR version when you make incompatible API changes MINOR version when you add functionality in a backward compatible manner PATCH version when you make backward compatible bug fixes” Maintain clear versioning, even if just for yourself. Make sure that you can always play a recent version of your game. Provide shortcuts and settings that let you avoid time sinks. Make it easy to choose what to test. Make it clear what is being tested. Make your systems modular. Make modules easy to toggle. Allow testers to easily switch out and modify what they are testing: anything with the same output should be able to tie into the correct input. Make it possible to simulate the systems without running them. Show the data; show comparisons. Make it easy to file bug reports and provide feedback without leaving your game. Integrate screenshot tools and video recording. Test on target devices. Test your lowest spec targets. Make version numbers visible in all game builds, including release. Automate functionality testing, but not quality testing. Building the game automatically and get new builds continuously without requiring manual intervention. Remove all obstacles for build distribution: make it a single click (or less) to get a functional build to play on the right device. For object-oriented authoring: clearly visualise what an object can (and can’t) do based on its inheritance; don’t hide logic deep into a dropdown hierarchy. For component-based authoring: make non-destructive tools with opt-in as the default rather than opt-out . Provide good error messaging for when requirements are not met. For data-driven authoring: provide clear debug information and visual representations for where data is coming from, when, and what it allows. Make it clear what data is expected where, so no steps are missed. Make it easy to list states and transitions per object. Provide state transition information with data reporting, so that you can keep track of all the whens and whys. Make states have meaning; if a state says that an object cannot move, this should be definitive. Differentiate between Specific and Generic states, so that you will never accidentally add state to an object that won’t work. Set clear guardrails between Exclusive, Inclusive, and Parallell states. Plan what you need each state to be able to do and where to get its data. Visualise which conditions apply at a given moment and why. Show when conditions are unavailable and why. Log transition changes and which conditions made them change. Show when, how, and from where a state injection occurs. Make it clear which explicit states are running at any given time. When dynamic state is triggered, make all of its relevant overrides predictable and singular: it should always be enough to turn something on or off once. Provide visualisations of start and end positions for timed states. Allow developers to scroll timed states manually to preview them. Allow states to resume after interruption, so that you can use interstitials in a non-destructive way. Separate your data into logical containers, such as Baseline, Attribute, and Modifier. Bundle collections of changes into change sets. E.g., “double move speed.” Identify change sets modularly, so you can test more than one thing at a time. Maintain clear versioning, even if just for yourself. Make sure that you can always play a recent version of your game. Provide shortcuts and settings that let you avoid time sinks. Make it easy to choose what to test. Make it clear what is being tested. Make your systems modular. Make modules easy to toggle. Allow testers to easily switch out and modify what they are testing: anything with the same output should be able to tie into the correct input. Make it possible to simulate systems without running them. Show the data; show comparisons. Make it easy to file bug reports and provide feedback without leaving your game. Integrate screenshot tools and video recording. Always test on target devices: no amount of emulation will ever compensate for real qualitative testing. Have as many diverse target devices available as financially and physically possible. Test on target devices. Test your lowest spec targets. Make version numbers visible in all game builds, including release. Automate functionality testing, but not quality testing. Building the game automatically and get new builds continuously without requiring manual intervention. Remove all obstacles for build distribution: make it a single click (or less) to get a functional build to play on the right device.

0 views
Xe Iaso 2 weeks ago

Valve is about to win the console generation

Today was a big day for gamers as Valve just introduced three products: the Steam Controller, the Steam Machine, and the Steam Frame. When you add this alongside the Steam Deck, I think it's safe to say that Valve is about to win the next console generation. I have basically nothing to say about the Steam Controller. It's the Steam Deck's input but in a controller. There's no way they can really mess it up in a way that isn't recoverable. What else is there to say? The Steam Machine of yore was one of the biggest tech flops in history and led to a lot of the changes that has made Valve hardware so good. Based on what they've announced, the software ecosystem I know and love on SteamOS, and response from developers I talk with, there's a reasonable chance that this new Steam Machine is going to be the most compelling console on the market. TL;DR: The Steam Machine's specs are on par or better with the PS5. It's got 16 GB of ram, a dedicated GPU with 8GB of video ram, and it's about the size of three M1 Mac Minis stacked on top of each other with a slightly bigger footprint than a Nintendo GameCube. I see no real way that this could be a failure in the same way that the last Steam Machine was. If they don't fuck this up, I could pretty confidently say that Valve is going to win this console generation. In retrospect, I think that the failure of the first Steam Machine was probably one of the best things to ever happen to Valve. Proton, Steam Play, and the Steam Deck are the proof that Valve learned all the lessons they needed to in order to make a next generation Steam Machine a viable console. The biggest difference between SteamOS and other console operating systems is that SteamOS is just an immutable image-based fork of Arch Linux with a skin on top. If you can do it with a normal PC, you can do it on SteamOS. Wait, you said that you can do anything you can do on a normal PC, but you also said it's running an immutable OS. What if my definition of "anything" includes "install system packages"? Good point, I'm not worried about that for two main reasons: developers have already found ways to use things like distrobox to give you islands of mutablity in an otherwise immutable system on the Steam Deck, and you can just blow away the OS and install whatever you want (such as Bazzite ) or any normal Linux distribution. You could even put Windows on it if you needed to for some reason. This means that even though Valve will be selling this hardware at a loss, you can still buy one and never purchase anything else from them. You can install any compatible game from any marketplace. In their own words: Yes, Steam Machine is optimized for gaming, but it's still your PC. Install your own apps, or even another operating system. Who are we to tell you how to use your computer? I cannot even imagine the other console manufacturers saying this. I'd easily imagine that it'd have free reign across a majority of the Steam library. By sheer game count alone, this would make it one of the biggest console launch libraries on the market. This isn't even counting the fact that you can install alternative marketplaces like itch.io , GOG, or anything Lutris supports (EG: Epic Games). Valve does nothing and still wins. One of the bigger things that I don't think people really appreciate about the Steam Machine (or even the Steam Deck for that matter) is that the freedom to install whatever program, framework, background service, or OS you want means that every Steam Machine can be used to make games. Some of their promotional images show a Steam Machine in a dual-monitor setup split between Blender and Godot. I don't think you realize how big of a deal this is. By making every Steam Machine also powerful enough to do full on game development, Valve is making it so much easier to become an independent game developer. Just add ideas, skill, and time. Hilariously, this means that the Steam Machine is probably the only console on the market that's fully compliant with the EU's Digital Markets Act. It would be absolutely hilarious if the EU ends up using this as rationale for Nintendo, Microsoft, and Sony to open up their consoles for third party developers. Oh and to top it off, the internal storage is upgradable and can take full-size nvme drives. If you pop your microSD card out of your Steam Deck, you can put it into your Steam Machine and get all your games instantly. Reportedly the ram is user-upgradable too. The only way that they could mess this up is with the pricing. The price will be what determines if this is a PS5 killer or a mid-range home theater PC that can do games decently well. Given the fact that Steam prints so much money, I'd expect the pricing to be super aggressive. Worst case, this would be a great home theatre PC. I'd rock it in my media centre. It's going to run Plex, Twitch, and Youtube just fine. Valve also announced their successor to the Valve Index today, the Steam Frame , a standalone VR headset. It's basically a Meta Quest headset, but also a Steam Deck. They market it as being able to play VR and 2D games effortlessly. The weirdest thing about it is that it's running a 64 bit ARM CPU instead of a conventional AMD APU like the Steam Deck and Steam Machine. This means that SteamOS is going to be cross-architecture for the first time and they're going to use FEX to bridge the gap. The big thing I want to see in practice is their implementation of foveated rendering. This beautiful hack abuses the fact that human eyes have the most sharpness and fidelity at the exact centre of your field of vision, whereas your peripheral vision is abysmal at it. This means that on average you only have to render about 10% of the frame at maximum quality for it to feel like it's running at full resolution all over the screen. This should make the fact that the Frame is using a "weaker" CPU/GPU irrelevant. Games should look fine as long as they render the slice that needs to be in full quality fast enough. Even more fun, they take advantage of the same tricks behind foveated rendering for streaming games from a PC or Steam Machine. This means that you get that same optically perfect quality but with even less latency because less data has to be transferred to hit your eyes. I really want to see what this is like in practice. Reportedly there's no perceptual difference between this setup and rendering games at 100% full quality. The Steam Frame ships with a USB dongle that lets you use the might of your gaming tower for low latency VR gaming. I'll need to see this in practice in order to have opinions. I think that in the worst case it can't possibly be any worse than it was streaming VR games to my Quest 2 over Wi-Fi. That was tolerable and viable for mid-level Beat Saber. I have confidence that it will at least be sufficient for high level Beat Saber gameplay. Remember how I said that it's a Steam Deck in a headset? The Steam Frame runs full SteamOS. You can just boot it into a full KDE desktop and use it as a normal computer. I have no reason to doubt that every Steam Frame is also a development kit in the same way that the Steam Machine is also a development kit. They also claim you can load arbitrary Android apps into the Steam Frame. I need to see this in action before I have opinions about it. It would be exceptionally funny if this meant you could take apps/games made for the Meta Quest and just plop them onto the Steam Frame without modification. I'm not holding my breath, but it would be funny. The only possible flaw I can see is that the strap it ships with doesn't go over the top of your head. If this ends up being an issue in practice, somebody is going to make a third party strap that just fixes this problem. I'm not concerned. Really, the only thing that can go wrong with any of this hardware is the price. I would still be happy if the pricing was the worst part of this lineup. It would be really cool if there was a bundle. I'm at least planning on getting a Steam Machine on day 1 and making a review. What would you like to see in that? Let me know on Bluesky .

0 views
JSLegendDev 2 weeks ago

What Caused Performance Issues in My Tiny RPG

In a previous post, I mentioned having strange performance issues regarding a tiny RPG I was secretly working on. The crux of the matter was that the game (built using web technologies) would run noticeably less smoothly when wrapped as a desktop app on my machine than when running in Firefox. I initially shared the project’s executables on the KAPLAY Discord server (KAPLAY being the library I used to make the game in JavaScript) and none reported the performance issues I had. Seeing this, I decided to make a Substack post inviting my wider audience to try the game out and report its performance. This led to someone sharing the post on Hacker News which resulted in a large influx of views and feedback. In this post, I would like to explain what went wrong (as best as I understood it myself). First of all, I have mostly fixed the performance of my game. It now runs much more smoothly and I have updated the executables on itch. I would still greatly appreciate feedback regarding how these run on your machines. (Download the ones tagged with -v2) Here’s the link : https://jslegend.itch.io/small-rpg-performance-playtest To build executables for Windows, Mac and Linux, I use either NW.js or GemShell. Similar to Electron but easier to set up. It packages a Chromium instance for rendering. Results in bloated executables but the same rendering engine is used across platforms. Similar to Tauri in how it uses the operating system’s webview to render the app rather than packaging a Chromium instance. This results in leaner executables but different web engines with varying performance differences are used on different platforms. However, contrary to Tauri, GemShell is a one click tool that generate executables for all three platforms. I wrote a post about it recently that delved into more detail. Since I wanted to build executables quickly, I decided to try out GemShell for this project. Executables that I distributed to get feedback were made with this tool. KAPLAY is a library based on the concept of game objects and components. A game object is created from a list of components, many of which, are ready made and offer functionality out of the box. This makes the library very easy to understand and productive. The issue is that it’s by default less performant than other alternatives (Phaser, Excalibur, etc…) I use it because it’s so fast to prototype game ideas in. However, I used it for this project because it was the tool I knew best that would allow me to immediately start working on the game and focus on game design. In hindsight, I should have probably started invested in learning other more performant alternatives to a sufficient level so that I could easily pivot away if the needs of my project demanded it. This was often reported among people for who the game didn’t perform well. In KAPLAY, there is an option to cap the FPS to a maximum amount. It’s used when first initializing the library. The idea behind this option is to enforce a consistent frame rate resulting in more consistently smooth gameplay. However, setting this to 60 in my game resulted in the game eventually slowing down to a crawl all while the debug fps count still displayed 60 fps. I conclude that this happened when the machine running the game wasn’t able to sustain 60fps or more at all times. The fix was simple, remove it. Why did this option behave this way? Probably a bug a in the library. A maintainer is currently working on it. Since GemShell was used to make executables, the underlying web engine used to render the game on a Mac is Webkit and not Chromium. While I knew that Webkit was less performant than Chromium, I didn’t think it would be that noticeable. The apparent solution to this would be to move off of GemShell and use NW.js instead. However, it turns out that MacOS does certain things to not allow Webkit to use its full potential. The dev behind GemShell apparently has a fix for this situation. Below is what they shared on their Discord, which you can join if you’re interested in the tool here . This would be great since it would be nice to have the best of both worlds, more consistent performance across platforms while still having lean executables. Since I’m still not done with the development of the game, I can afford to let the dev cook, as we say! This is the strangest performance issue I experienced. While I could conceive of the game performing better on Firefox VS Safari (since it uses Webkit), I was caught off guard by Chrome performing poorly than Firefox. Chrome is supposed to be more performant due to the Chromium Web engine. The Chrome profiler seemed to indicate that the way I was rendering text in my game probably needed to change. KAPLAY Game Objects and Text Rendering In KAPLAY, if you look at the examples provided in its playground , you’ll find that it’s often shown that to render text you first, create a game object using a text component and then pass the text to that component. However, it turns out that this is inefficient since game objects have a greater cost in terms of performance. For rendering simple text it’s far better to draw it directly in the draw loop. Here’s a simple example. The same logic applies to drawing static images like backgrounds. Instead of doing : I needed to do : Additionally, to not disable batching it was important that all drawSprite calls be placed together in the draw loop before rendering text with drawText calls. Doing this led to better performance on Chrome and Safari. However, there was one last obvious performance improvement I needed to do. In the battle section of my game the player must avoid getting hit by a horde of projectiles thrown at them. A common optimization technique used in this case was to reuse bullets that leave the screen rather than creating new ones. This technique is known as object pooling. I had planned on implementing something like this eventually but didn’t do it since I was developing the game using Firefox as my preview, and the performance was great. There weren’t that many projectiles in the first place so I felt that this would be useful later. However, considering that Chrome and Safari were struggling performance wise probably due to their garbage collector working differently, I resigned myself to implement it now. As expected the game performed much better on both Chrome and Safari. For Chrome, I now had a constant 60fps on my machine (Macbook Air M3, 16 GB RAM) but for Safari it was more around 45-60fps. To stress test my pooling system, I added a bunch of projectiles. Here is footage. I’m happy that I can now resume development and focus more on game design. However, what this adventure taught me is that I should probably invest my time learning other frameworks and game engines. While I eventually ended up fixing the performance issues in my game, I can’t help but think of scenarios where problems could arise later that are unfixable due to limitations of the tools I’m using. In that case, I would have to halt development to learn a new tool at a proficient level on top of having to reimplement the game which would take a lot of time and result in my project getting significantly delayed. If I start learning something else right now, I can at least go faster if I eventually need to reimplement the game. Finally, if you’re interested in keeping up with the game or like technical posts like this one. I recommend subscribing to not miss out when new posts are published. Subscribe now In the meantime, here are few of my previous posts that could interest you!

0 views
Ruslan Osipov 2 weeks ago

PC Gamer physical edition is good, actually

I spend a lot of time in front of a computer or a phone, even now that I have a kid. Hey - she needs to sleep, and I have some time to kill. Many of my hobbies revolve around a screen too - like playing video games, tinkering with stuff, or writing. It’s unsurprising that I’ve been wanting to take a step away from the screen and find a way to engage with physical media more. I used to read a lot of books - I don’t anymore. I listen to audiobooks sometimes, but it’s been a good year or two since I last sat down and read a book cover to cover. That’s fine - life ebbs and flows, and even though sitting down and reading books used to be a huge part of my life - they aren’t today, and that’s okay. But it’s nice to put down devices and just hold something in your hand. I worked around this limitation though and decided to get more into magazines. Yeah, print media is still alive and kicking. We have two physical publication in our household this year - The New Yorker, and PC Gamer. Two very different magazines, and you can probably tell which subscription appealed to my wife - and which one to me. I’ve been reading both, although I’ll admit that PC Gamer has received more of my attention. Hey - unlike The New Yorker, which oppressively sends you a new issue each week, PC Gamer has been sending me issues monthly. And I don’t need to tell you that The New Yorker is a great publication - it’s got hell of a reputation, and for a good reason. It’s quality journalism, and peak writing, or so I’m told, but it certainly reads that way despite my limited knowledge on the subject. But I do know a thing or two about video games, and one thing I know is that gaming journalism from major publications - PC Gamer included has been steadily declining in quality over the past decade. Between corporate relationships, out of touch and burnt out reviewers, and sanitized, often generic pieces - I have been avoiding mainstream gaming media. There are lots of small independent reviewers who do a wonderful job covering the titles I care about, and I trust those a lot more. I’ve read somewhere that the print edition of PC Gamer is somewhat different. You still have the same people working on the issue, but the time pressure’s different, articles can’t be updated once they go live, and there’s much more fun and creative writing. I’m sure all of that’s available offline too, but I don’t think I would’ve read any of that if the magazine wasn’t already in my hands. Reading editions of PC Gamer feels like stepping a time capsule, in big part due to fairly substantial retro game coverage - you can’t exactly publish breaking news in a monthly print, so the focus is much more on having interesting things to say. Chronicles of Oblivion in-character playthroughs, developer interviews, quirky reviews - there’s lots to love. I’ve heard Edge Magazine is well known for high quality writing and timeless game critique. I think I’ll check that out too - here, I just subscribed.

0 views
JSLegendDev 3 weeks ago

I'm Making a Tiny RPG and I Need Feedback Regarding Performance

This past month, I’ve been working secretly on a small RPG game. While the game is not ready at all and I didn’t plan on talking about it, I’m now kind of forced to. I’ve been using JavaScript + the KAPLAY game library to make this game but I’ve been experiencing performance issues. However, it seems that others aren’t experiencing them so now I wonder, is it just my machine? I’m using a Macbook Air M3 with 16GB of RAM. Normally, things should be smooth and they are when playing the game in the browser via Firefox. However, since I’m making this game with Steam in mind, it’s especially important that the game performs well when wrapped as a desktop app. For this reason, I decided to reach out to you, my audience, for feedback. I have included a build of the unfinished game for Windows, Mac and Linux. It would be very nice if you could try it out on your machine. Additionally, recording gameplay and sharing the link in the comment section of this post would be greatly appreciated. Here is the link to the game in its unfinished current form : https://jslegend.itch.io/small-rpg-performance-playtest Below is a gameplay video to give you an idea of how the game is supposed to be played. You can move around with arrow keys and enter battle by overlapping with a star in the overworld. Performance issues, if any, occur mostly during battles. Thanks in advance! UPDATE 7/11/2025 : It seems that this post was shared on Hacker News and is getting more attention than usual! If you’re new to my Substack and are potentially interested in updates regarding this project, I recommend subscribing. Subscribe now In the meantime, you can read some of my previous posts!

0 views
ava's blog 3 weeks ago

my loot drop - what's in my inventory?

You've slain me. On your quest to rise up the Bearblog Trending mountain, you had to go past me. As your final hit rains down on me and my HP bar depletes, my body pulsates on the floor and slowly evaporates. What I leave behind are the following items: Matcha Drink Powdered green tea beverage with a nutty, slightly bitter taste. +5 Energy . Benji Charm Legend says he has provided strength in the most hopeless nights. While holding or keeping the plushie nearby, you gain advantage on saving throws against fear, despair, or stress-related effects. Crystal Ring Ring It hails from the far away fae lands. Forged from living quartz harvested under a moon. +2 Strength . Law Book Spell Book Forged by sages and legislators who believed privacy itself was a form of sacred protection, this tome channels the invisible rules of data protection into tangible wards and bindings. Spell: Right to Be Forgotten Effect: Erases traces of your identity from archives, magical records, and memories weaker than your Intelligence modifier. Enemies who knew you must pass a Wisdom save or simply forget your name. “Knowledge is power, but consent is sacred.” — Preface to the Data Protection Codex, Volume I AirPods Equipment Ancient blacksmiths of the techno-age forged them to fend off the chaos of constant noise. +4 Focus. Drawback: While active, you may miss crucial social cues or warnings. Other players gain advantage on Stealth checks against you, especially when they are of the type "wife". Pirate is hosting the Bearblog Carnival topic this month , inviting us to consider what we have in our inventory. I wanted do it less like a "what's actually in my bag", but more game-oriented. :) Reply via email Published 04 Nov, 2025

1 views
Raph Koster 3 weeks ago

Game design is simple, actually

So, let’s just walk through the whole thing, end to end. Here’s a twelve-step program for understanding game design. There are a lot of things people call “fun.” But most of them are not useful for getting better at making games, which is usually why people read articles like this . The fun of a bit of confetti exploding in front of you, and the fun of excruciating pain and risk to life and limb as you free climb a cliff are just not usefully paired together. In Theory of Fun I basically asserted that the useful bit for game designers was “mastery of problems.” That means that free climbing a cliff is in bounds even though it is terrifying and painful. Which given what we already said, means that you may or may not find the activity fun at the time! Fun often shows up after an activity. There’s neuropsych and lots more to go with that, and you can go read up on it if you want . Anything that is not about a form of problem-solving is not going to be core to game systems design . That doesn’t mean it’s not useful to game experience design, or not useful in general. Also, in case it isn’t obvious – you can make interactive entertainment that is not meant to be about fun . You can also just find stuff in the world and turn it into a game! You can also look at a game and choose not to treat it as one , and then it might turn into real work (this is often called “training”). This rules out the bit of confetti . A game being made of just throwing confetti around with nothing else palls pretty quick. Bottom line: fun is basically about making progress on prediction. There are a lot of types of problems in the world . It is really important to understand that you have to think about problems games can pose as broadly as possible. A problem is anything you have to work to wrap your head around. A good movie poses problems too, that’s why you end up thinking about it long after. You can go look at theorists as diverse as Nicole Lazzaro, Roger Caillois, or Mark LeBlanc for types of fun. You’ll find they’re mostly types of problems , not types of fun. “I enjoy the types of problems that come from chance” or “I enjoy the types of problems that come from interacting with others” or whatever. This is not a bad thing. This is what makes these lists useful. Your game mechanics are about posing problems, so knowing there’s clumps of problem types is very useful. In the end, though, a problem is built out of a set of constraints. We call those rules, usually . It also, though, has a goal. Usually, if we come across a set of rules with no problem, we just play with it, and call it a toy. Building toys is hard! Arriving at those rules and constraints to define a nice chewy problem is very challenging. You can think of a toy as a problematic object, a problem that invites you to play with it. On the other hand, it’s not hard to turn a toy into a game, and people do it all the time. All you have to do is invent a goal. We shouldn’t forget that players do so routinely. Building a toy is an excellent place to start designing a game. Bottom line: we play with systems that have constraints and movement, and we stick goals on them to test ourselves. Games are machines built around uncertainty . Almost all games end by turning an uncertain outcome into a certain one. There’s a problem facing you, and you don’t know if you can overcome it to reach that goal. Overcoming it is going to be about predicting the future. If there’s one thing that good games and good stories have in common, it’s about being unpredictable as long as possible . (This is also where dopamine comes in, it’s tied to prediction; but it’s complicated and nuanced). If a problem basically has one answer, we often call it a puzzle. There’s not a lot of uncertainty built into a binary structure. You can stack a bunch of puzzles one on top of the other and build a game out of them (which then introduces uncertainty into the whole), but a singular puzzle isn’t likely to be called that by most people. It happens quite often that we used to think something was a game, and it turned out it was actually a puzzle. Mathematicians call that “solving the game.” They did it to Connect Four – and you did it to tic-tac-toe, when you were little. Good problems for games therefore all have the same characteristics : A lot of very good problems seem stupidly simple, but have depths to them . Math ones, like “what’s the best path to cross this yard?” but also story ones like “For sale: baby shoes, never worn.” I recently watched a video that included the statement that “picking up sticks” is not a useful loop. Picture a screen with a single stick in the middle. The problem posed is to move the cursor over it and click it. Once you do it, you get to do it again. Guess what? The original Mac shipped with games that taught you how to move a mouse and click things. Once upon a time, mousing was a skill that was challenging; for all I know, you have grandparents who still have trouble with it. For them, it has uncertainty. For you, probably, it doesn’t. Bottom line: the more uncertainty, indeterminacy, ambiguity in your game, the more depth it will have. Now, imagine that the stick pops to a random location each time. Better, yes? The core of a loop is a problem you encounter over and over again. “How do I get the next one?” But something needs to be pushing back , that’s what makes it an interesting problem and is usually what takes it past being a puzzle. I like to say “in every game, there is an opponent.” Even it’s just physics. People talk about the core loop of a game. But there’s really two types of loops. One is what we might think of as the operational loop . This is the loop between you and the problem, it is how you interact with it. You look at it. You form a hypothesis. You poke the problem. You see a result. Maybe it was success, and you grabbed the stick. Maybe it was failure. Maybe it was partial success. You update your hypothesis so you can decide what to do next. The second loop is really your progression loop but is better thought of as a spiral . It’s what people usually mean when they say “a game loop.” They mean picking up the stick over and over. I say it’s a spiral, because clicking on the same stick in the middle of the screen over and over is not usually how we design games. That would actually be repeatedly doing the same puzzle. Instead, we move the stick on the screen each time, and maybe give you a time limit. Now there’s something you’re pushing against, and there’s a skill to exercise and patterns to try to recognize. Far more people will find this a diverting problem for a while. It’s a better game. It’ll get even better if there are reasons why the stick appears in one place versus another, and the player can figure them out over time. This matters: the verbs are in a loop. “Pick up,” over and over. But the situation isn’t. And you are learning how to reduce uncertainty of the outcome: move the mouse here and click, next move it there . That’s why it is a spiral: it is spiraling to a conclusion. It’ll be fun until it’s predictable. You can think of the operational loop as how you turn the wheel, and the situations as the road you roll over. A spot on the wheel makes a progression spiral as you move. One machine, many situations — we call these rules mechanics for a reason. Bottom line: players need to understand how to use the machine, and the point is to gradually infer how it works by testing it against varied situations. You can’t learn and get better unless you get a whole host of information . There are fancy names for each of these, and you can go learn them all . Everything from “affordance” and “juice,” to terms like “state space” and “perfect information” and very confusing contradictory uses of the words “positive” and “negative” paired with the word “feedback.” Feedback in general can, and should be, delightful. That means it’s where you get to use all those forms of fun that I threw away at the beginning. It can be surprising. It can be a juicy multimedia extravaganza. It can be a deeply affecting tragic cutscene that advances the game story. If you have too little feedback, players cannot go around the interaction loop. Picture Tetris if the piece you drop is invisible until it lands. If you have bad feedback, players cannot go around the learning loop either. Picture Tetris if sometimes your score goes down when you complete a line and sometimes it goes up. You can’t draw any conclusions about what the problem in the way of the goal actually is , in that crappy version of Tetris . Feedback needs to act as a reward to help you draw conclusions. But there’s a third mistake: you can supply a gorgeous and compelling set of feedback and not actually have a real problem under there. At minimum you’re making shallow entertainment. At worst, you are building exploitative entertainment. People will be willing to go along with pretty simple and pretty familiar problems as long as the feedback is great. Bottom line: show what you can do, that you did it, what difference it made, and whether it helped. If you are trying to design and are thinking of a specific problem scenario you are not doing game systems design. You are doing level design. “How to multiply numbers” is a problem. “What is 6 x 9” is not a problem, it’s content . Now consider the game of Snake , or Pac-Man . They are also games where the core loop is picking up a stick. The difference is that something is an obstacle to you picking up the stick: you get longer when you pick up the stick, and can crash into yourself. You have to avoid ghosts as you gather the stick. How long you are in Snake is a different situation . Where the apple to eat is located is a different situation. To be specific, you have the same problem in different topology. Where you are relative to the ghosts, and which dots are left, and what directions you can go in the maze are different situations in Pac-Man . You want the verbs you use in the loop to end up confronting many many situations. If your verb can’t, your core loop is probably bad. Your core problem (aka your core game mechanic) is probably shallow. What you want is to be able to throw increasingly complex situations at the player. That’s how they climb the learning ladder . Ideally, they should arrive at interim solutions (lots of words for that, too: heuristics, strategies) that later stop working . Pac-Man actually got solved, by the way! That’s why Ms. Pac-Man was invented. Sometimes, the way to escalate is to change the rules, and that’s what Ms. Pac-Man did. It did it by adding randomness, and in fact using randomness is one of the biggest (and oldest) ways to create situation variation in games. Bottom line: escalate the situations so that theories can be tested, refined, and abandoned. Since we can put all this this down very much to problem solving and learning and mastery, it means we can steal a whole bunch of knowledge from other fields. People learn best when they can experiment iteratively, which we also call “practicing.” That’s why loops make sense. There’s a lot of science out there about how to train, how to practice (and also a lot of educational theory that overlaps hugely), and your game will be better if it follows some of those guidelines. People learn best when the problem they are tackling is right past the edge of what they can do . If it’s too far past that edge, they may not even be able to perceive the problem in the first place! And if the reverse is true and they see a solution instantly, they’ll either be bored, or they might just do that over and over again and never develop any new strategies and not progress . There’s an optimal pacing shape. It looks just like what you see in your literature textbooks when they diagram tension, or whatever: sort of like a rising sine wave. You start slow, then speed up, hit a peak challenge, then back off a bit, give a breather that falls back but not all the way, then speed up… we have conventions for what to put at those peaks (bosses!). But what matters is the shape of the curve. You need to structure your game so that you push players up. They might need to climb the curve at different paces, which is why you might also have difficulty sliders. They might not be capable of getting all the way to the top, and that’s okay. You also need to pace to allow room for everything that isn’t mastering the problem — such as having fun with friends socially . But at the same time, things to do in the game need to come along at the right pace too! Bottom line: Vary intensity and pressure, give players a chance to practice and moments to be tested . Remember the game about clicking on a stick that appeared at a random location on screen? That’s also a rail shooter. You move the mouse and click on a spot in 2d space. Which is also not that different from an FPS — only now you move the camera, not the cursor. Almost no games are made of only one loop. Instead, we chain loops together – complete loop A, and it probably outputs something that may serve as a tool or constraint on a different loop. An FPS has the problem of moving the camera (instead of the mouse) to click on the stick. It also has a loop around moving around in 3d space. Moving around is actually made of several loops, probably, because it may be made of running and jumping and spatial orientation. Those are all problem types! We speak sometimes of value chains : that’s where one loop outputs something to the next loop. We speak also of game economies , which is what happens when loops connect in non-linear ways, more like a web. This is not the sort of economy where you are simulating money or commerce. Instead it’s a metaphor for stocks and flows and other aspects of actual system dynamics science. In this view, your hit points is a “stock” or, if you like, a “currency” you spend in a fight. Games nest fractally, they web into complex economies, and they unroll chains of linked loops. That’s why they can be diagrammed in a multitude of ways. At heart though, you can decompose them all into those elemental small problems, each with an interaction loop and a learning loop centered on that problem. Bottom line: build small problems into larger webs, and map them so you understand how they connect. The common question is “okay, so how do I design a problem like that?” And that is indeed the unique bit in games, because the other items here are common to lots of other fields. The list of possible problems is, as mentioned, enormous. This is a big rabbit hole. And once you consider that you can stack, web, and otherwise interlink problems, it means that there’s a giant composable universe of games (and game variants ) to create. Just bear in mind that because of varied tastes and experience, the diversity of the set of problems you pose is going to affect who wants to play your game. There are basically a set of categories of problems that we know work, and this is the absolute simplest version of them: These break down into a ton of sub-problems, but there are less than you think, and you can actually find lists of them . The hard part is that often they each seem so small and trivial that we don’t think of them as actually being worth looking at! They are also often in disguise: the problem behind where a tossed ball will land, and the problem of how much fuel you have left in your car if you keep driving at this speed, and the problem of when your hit points will run out given you have a poison status effect on you are the same thing . But the more of them you as a designer have wrapped your head around, the more you can combine. And you’ll find them very plastic and malleable. In fact, you could almost make a YouTube video about each one . So where do you get them? Steal them. Other games, sure, but also, the world is full of systems that pose tough problems. You can grab them and reskin them. Bottom line: not every mechanic has been invented, but a ton have. Build your catalog and workbench. In the end, the feedback layer of a game is everything about how you present it. The setting, the lore, the audio, the story, the art… How you dress up the problems can change everything about how the player learns from it, and how they perceive the problem. The exact same underlying problem can be as different as picking up sticks or shooting someone in the face, or as mentioned, the calculus problem of estimating the trajectory of a variable in a system of rates of change (the ball, the car and its gas, the hit points and poison) might be the same but dressed extraordinarily differently . When you think about how you dress up the problems, you are in the realm of metaphor . You are engaging in painting, poetry, and music composition, and rhetoric, and the bardic tradition, and all that other humanities stuff. This is a giant and deep universe for you as a designer to dive into. A lot of this stuff gets called “game design,” but then again, we also often say that a given game designer is a frustrated moviemaker, too. It is really easy to create an experience that clashes with the underlying problems it is teaching. There are fancy critical terms for this. You also need to be very conscious about whether you are building your game so that you are telling the player a story, or so that the player can tell stories with your game . So the takeaway should be: this stuff is deeply, deeply synergistic with the “game system” stuff that this article is about, but they are not the same thing. And games is not the best place to learn how to do these things. Those other fields have much longer traditions and loads of expertise and lessons. They won’t all apply to the issue of “how do I best dress up this collection of problems” but most of them will. It does not frickin’ matter if you start out wanting to make interesting problems, or if you start out wanting to provide a cool experience . You are going to need to do both to make the game really good . Bottom line: game development is a compound art form. You can go learn those individual arts and the part unique to games. Researchers have done a ton of studying “why people play games.” This gets called “motivations.” Motivations are basically about people’s personal taste for groups of problems and how those problems are presented, and characteristics of those problems and the situations in which you find them. Some people like problems where you destroy stuff. Others like problems where you bond with others. Some have trouble trusting other people. Others want to cooperate. Not everyone likes the same sorts of problems or the same sorts of dressings. Some of this is down to personality types, some of it is down to social dynamics, how they were raised, what their local culture is like, what trauma they have had, and countless other psychological things. That’s why one fancy term for this is psychographics . The big thing is, it’s not enough that the problems need to not be obvious to you, and also not be baffling to you. They also have to be interesting to you. What problems fit in that range is going to depend entirely on who you are, what your life experiences have been, what skills you have, and even what mood you are in. Picking motivations and selecting problems based on them is a great way to design. But motivations are not the same thing as fun. They’re a filter, useful in marketing exercises and in building your game pillars (which is an exercise in focus and scope). Scientists have spent a bunch of time surveying tons of people and have arrived at all sorts of conclusions that map people onto reasons to play and from there onto particular problems. If you start with motivations, then you can go from there to types of problems, types of experience, and even player demographics. And then, if you want problems that are about interacting with people, well, there’s lists of those. If you want problems that are about managing resources, or solving math issues, there’s lists of those too. Bottom line: no game is for everyone, so you will make better games if you know who you are posing problems for. I run into game developers who do not understand the above eleven steps all the time . And understanding all eleven is more valuable than building expertise in just one, because they depend on one another. This is because getting any one of the eleven wrong can break your game. The real issue is that each of these eleven things is often multiple fields of study. And yeah, you do need to become expert in at least one. To pick one example, some of us have been working out the rule set for how you can link loops into a larger network of problems for literally over twenty years. Others have spent their entire career doing nothing but figuring out how best to provide just the affordances part of feedback . So game design is pretty simple. But the devil is in details that are not very far below the surface. It’s fairly easy to explain why something is fun for an given audience. It is much harder to build something new that is fun for an arbitrary person. That said, every single one of those fields has best practices, and they are mostly already written down. It’s just a lot to learn. Put another way — every single paragraph in this essay could be a book. Actually, probably already is several. Bottom line: each of these topics is deep, but you want a smattering of all of them. Some of you may not like this deconstructive view on how games are designed. That’s okay. Personally, I find it best to poke and prod at a problem, like “how do I get better at making games?” and treat it as a game. And that’s what I have done my whole career. The above is just my strategy guide. Someone else will have different strategies, I guarantee it. But I also guarantee that if you get better at the above twelve things, you will get better at making games. This is a pragmatic list. And it will be helpful for making narrative games, puzzle games, boardgames, action games, RPGs, whatever. I breezed through it, but there are very specific tools you can pick up underneath each of these twelve things. It really is that simple, but also that hard, because that’s a frickin’ long list if you want to actually dive into each of the twelve. What that also means is that people designing games fail a lot at it . You might say, “can’t they just do the part they know how to do, and therefore predictably make good games?” No, because players learn along with the designers. If you just make the same game, the one you know how to make, the players get bored because it’s nothing but problems they have seen before and already have their answers to. Sometimes, they get so bored that an entire genre dies. And if you instead make it super-complicated by adding more problems, it might dissolve into noise for most people. Then nobody plays it. And then the genre dies too! Game designers will routinely fail at making something fun. When the game of making games is played right, it is always right outside the edge of what the designers know how to do. That’s where the fun lives, not just for the designer, but also for their audience. That’s it, the whole cheat sheet. That’s it. Hope it helps. They need to have answers that evolve as you dig in more – so they need to have depth to them. Your first answer should only work for a while. There might be many paths to the solution, too. This is why so many games have a score – it helps indicate how big a spread of solutions there are! They need to have uncertain answers. (When you’re little, this universe is a lot larger than it is when you’re older – peek-a-boo is uncertain up to a certain point!). The problem should be something that can show up in a lot of situations. You need to know what actions – we usually call them verbs — are even available to you. There’s a gas pedal. You need to be able to tell you used a verb. You hear the engine growl as you press the pedal. You need to see that the use of the verb affected the state of the problem, and how it changed. The spedometer moved! You need to be told if the state of the problem is better for your goal, or worse. Did you mean to go this fast? Mathematically complex puzzles Figuring out how other humans think Mastering your body and brain

0 views
Brain Baking 4 weeks ago

Favourites of October 2025

This year’s announcement of autumn, SPIEL Essen , Halloween season, and daylight saving time switch is already officially behind us. 2025 has only two months left: I see people starting heated debates on the upcoming Game of the Year awards and I see people planning their Christmas home decorations—seemingly every year a day earlier. We went mushroom spotting in the woods with the kids a couple of weeks ago which seemed like a fitting October thing to do. I have a decade old mushroom identification guide lying around that always manages to induce more confusion than it solves but we had great fun nonetheless. Previous month: September 2025 . This is getting embarrassing. Maybe I should simply omit this section in future monthly overview posts? I’ve managed to read a few pages from the two Senet Magazine issues I ordered (issue and ) after seeing someone on Mastodon boast about theirs. Senet is a pretty sizeable independent print magazine on all things board games that is easy to recommend to cardboard fans. I managed to finish three short games: A week after finishing Wizordum , Limited Run Games happened to have Rise of the Triad: Ludicrous Edition stock left in their vault. Since Wizordum got me back into the retro shooters vibe, I figured why not. The Turok trilogy is another one I’m currently eyeing at. For those suckers like me who buy physical Switch games, I didn’t know the scene was that weird and scattered: here’s AntDude Plus on YouTube revealing some of the quirks: As for board games, nothing except the try-outs at the SPIEL fair… October was a pretty rough month in terms of spare time. Related topics: / metapost / By Wouter Groeneveld on 2 November 2025.  Reply via email . Wizordum , a bright and blocky throwback shooter that’s a cross between Wolfenstein 3D and Heretic . It’s a fun diversion that doesn’t stand out from the increasingly busy indie boomer shooter crowd. Wonder Boy: The Dragon’s Trap , the 2017 remake built on top of the 1989 Sega Master System original that helped pioneer the Metroidvania mechanics. It still holds up remarkably well and the new lick of paint is beautifully applied. Halloween Harry (or rather, Alien Carnage ) was the DOS Game Club’s game of the month. I played this one back in 1994 but didn’t really get into it and now I can see why. It’s average at best thanks to typical mediocre DOS platform jank such as cheap enemy placement, hit boxes that clip through stairs and shitty controls. But at least now I can say to my younger self that it was good to have skimped over this one. Dan Q created Paint-grade QR codes to fool around with. It’s wonderful to see these QR visualisations sparking people’s creativity. Speaking of drawing stuff, Stone Tools put out an excellent article from Christopher Drum on Deluxe Paint on the Commodore and Amiga. I think Natalie was the first to turn her LEGO Game Boy into a working one . Many geeks followed suit . PekoeBlaze explains why retro FPS games weaken their rocket launchers . DOOM II ’s super shotgun deals as much damage as the rocket launcher! Expect more retro shooter links, such as these Blake Stone maps that greatly help navigating the levels and their dizzying amount of (locked) doors. Frank Sauer, the artist who created the pixel art for Agony on the Amiga, writes about his workplaces from 1982 to now. Tarneo shares his experience trying to kick the AI addiction : congrats for those months being sober! Eli from Oatmeal posted on music, games, and text editors and reminded me I should add Isles of Sea and Sky on my backlog and try out the Helix editor. PC Gaming’s Weirdest Weapons In Gaming list contains a few oldies but goodies such as the sheep from Worms and any crazy weapons from Build Engine shooters ( Shadow Warrior , Blood ). Brit Butler hits the nail on the head with this ethical critique on LLMs . This older post by Joe Siegler on the history of Rise of the Triad was very educational on how the game’s concepts came to be as Joe himself was part of the development team. Harvard University published Generational Data Interviews on digital preservation. They asked 14 people the same question: If you were given unlimited funding to design a system for storing and preserving digital information for at least a century, what would you do? The Amiga Graphics Archive is awesome. A new Heroes of Might & Magic game is in the making called Olden Era ! It looks beautiful, hopefully it manages to retain most of what made III so great. The Sounds Resource is a handy site where you can download specific sound clips of old games. This is where I got that Redneck Rampage shotgun sound from as I no longer own a copy of the game. There’s an interesting thread on ResetERA on dungeon crawling RPGs or “blobbers” where I picked up the little indie game Heroes of the Seven Islands that’s inspired by Might & Magic VI(I) . Faceclick is a lightweight Emoji picker with keyword search I don’t need because I use a handy Alfred plug-in and try to avoid Emoji usage like the plague but it might be of use to others. I might be needing this in the near future: Wizardry Combat Strategies for the original AppleII/Digital Eclipse remaster. The menu font when in Switch handheld mode is annoyingly small though. Did you know that next to the traditional shareware model, postcardware also exists? Aaron Giles, the creator, scanned everything he received and put them up at https://postcardware.net/ .

1 views
JSLegendDev 4 weeks ago

Export Web Games for Desktop in One Click

In a previous post , I tackled the various options one could use to make their web games playable offline as installable desktop apps. This would enable using web technologies to make games that could be sold on a platform like Steam. I also mentioned that the options available could be divided into two broad categories. Those who packaged a web engine with the executable and those who instead, used the default one available on the user’s system. I concluded, that the first category of options led to a more reliable experience because the same web engine was used on all operating systems. This however, led to more memory and storage usage making the resulting executables bloated. This was the case for Electron and NW.js which packaged a specific Chromium instance alongside the app. An empty project could easily exceed 100 MB in size. The second category led to more lean executables but required the dev to test on all operating systems as there could be differences in how the game was rendered since each used a different underlying web engine. Examples that fit in this category are Tauri, Neutralino and Wails. Finally, I concluded that the easiest option was to use NW.js since it was like Electron but easier to set up and that the bloated nature of this solution was not a big problem considering that it was expected for games to use more resources than normal apps. However, I recently discovered a new tool called GemShell which allows you to export for all 3 platforms in what amounts to one click! In this post, I’d like to present it. GemShell is available on itch.io under two versions. The Lite version which is free and the Pro version which is paid. Let’s go over the Lite version first. When you open the app, you’re first greeted with a section where you can provide the folder of your game’s build. For example, if you’re using a build tool like Vite, what you need to provide is the folder that is generated after running the command . Otherwise, if you’re not using a build tool, your web export is essentially your source code. Once the relevant folder is provided. You can go to the next section where you’ll be able to configure your game’s metadata like its title, window dimensions, author, whenever you want the window to be resizable, etc… Once the metadata is configured, you can choose for which platforms you want to build executables. Finally, you can reach the last section where you can build executables in one click. Once building is completed, you can either launch the build for your current operating system or open the folder containing all the generated builds. GemShell will put all the builds relevant to your game in a folder called GemShell-Builds which will be created in the Desktop directory of your computer (if it doesn’t already exist). What’s in The Pro Version? Since the developer of GemShell provided me with a pro version of the software, I can show you what it contains compared to the lite version. First, you now have the ability to set an icon for your executables other than the default using any image you want. However, the app recommends using a 1024x1024 png image. Second, you can toggle off the splash screen that appears before your game starts. Other pro features include : Performance Mode : Which claims to add a 15-40% FPS boost for 3D games. Since I only make 2D games and know almost nothing when it comes to 3D, I didn’t see a difference with/without this option toggled. Asset compression : As the name implies, it compresses your assets. I have tested this feature on a small pixel art based game I was working on and didn’t notice a difference between the Pro and Lite build. They both clocked in at 5.4 MB which is already incredibly lean. I assume that this would come in handy when using bigger assets. Code Minification : This compresses the code. However, build tools like Vite already do minifcation when making your web build. I assume this feature is useful for projects not relying on NPM and build tools. Preload Critical Assets : Claims to increase game start speed by 30-50% by downloading big files in parallel. I think this feature is mostly targeted to devs making muliplayer games where the desktop app is a client of some sort. Personally, I have not noticed a difference but remember that the games I make use pixel art based assets which are usually small in size. I would also like to note that regardless of if you use the Lite or Pro version, they both load extremely quickly when I tested them. The only difference is due to the splash screen taking 2 seconds before the game actually starts which is near instantaneous. Finally, a feature for detecting duplicate assets and removing console.log statements. While not available yet, there seems to be security features planned for future updates. One of the main reasons someone might want to package their web game as a desktop app is to have the ability to save user data permanently and reliably. This would allow a player to save their progress and play again later. Instead of writing data to an external file, you can simply use localStorage or IndexedDB. GemShell uses a hidden ID file set in your initial game’s folder. Therefore, data is not lost when updating your game’s build. An existing player can carry over their progress from one version to the next. If you’re interested in this tool, I recommend trying the Lite version with some of your projects to see if it fits your needs. In addition, if you have issues or would like certain features to be added, the dev has a Discord server where you can provide feedback. GemShell : https://l0om.itch.io/gemshell GemShell’s Discord server : https://discord.gg/b24q5B8ZAY Now you might be wondering if I still recommend using NW.js or do I now recommend switching to GemShell? It’s undeniable that GemShell is extremely convenient compared to the setup needed for NW.js which itself was simpler compared to other alternatives I explored in the previous post. If we were to only consider how quickly you could make builds for desktop platforms, GemShell takes the cake. However, it’s important to consider that GemShell is built upon Neutralino, a technology that uses the system’s webview to render the game. The web engine used is different on each operating system, therefore, you don’t have a guarantee that things will render the same way and perform the same way on all three platforms. This isn’t a theoretical problem. Let’s consider the KAPLAY library, the one I’m using to make most of my games. It turns out that this library doesn’t run as well on Safari. Since Safari uses the default web engine available on Mac called Webkit, this means that the Mac version of my game built with GemShell will perform significantly worse than on Windows which uses a Chromium based web engine name Edge. On one hand KAPLAY is known to not be the most performant web game framework, but Webkit is also weaker for canvas based apps compared to Chromium. This led me to stick with NW.js for my current project since it packages a Chromium instance with the build. I can rest assured that the game will have the same performance on all three major operating systems. This wouldn’t have been a major issue if I had used a more performant framework like Phaser or a rendering library like Pixi.js. While not mandatory, if you want to put your game on Steam, you might want to integrate features like Steam achievements. To achieve this with NW.js, you can use the steamworks.js node package since NW.js gives you access to a Node based environment. As for GemShell there isn’t a straightforward way to achieve this, at least, currently. To conclude, if you want : an extremely convenient way of packaging web games as desktop apps. builds that are very lean and start up quickly. don’t really care if there are differences in rendering and performance between platforms. are using a framework/library that is known to work well under all major web engines (Chromium, Gecko, Webkit, WebkitGTK). don’t care about integrating with the Steam SDK to implement features like Steam achievements. pick GemShell. If you want : to be sure that the game renders and performs the same way across platforms or/and are using a game framework that perform noticeably worse on web engines used as default webviews of some operating systems. to integrate with the Steam SDK to implement Steam achievements in your game. don’t care if the builds take more storage and consume more memory compared to leaner alternatives. don’t mind taking the time to do some setup work before being able to generate builds. Speaking of NW.js, I have a 1-hour long course on Patreon you can purchase that teaches : How to use Vite and NW.js together, so that you can develop for the web (therefore benefiting from hot reloading) while still being able to build an executable that will work as is. We can achieve this by using Vite’s environment variables allowing us to gate code which will run in the desktop version exclusively. This is useful when it comes to writing and reading files from/to the disk which is code that should run only in the desktop version. How to use NW-Builder to create a script to build executables programmatically rather than having to manually download binaries from the NW.js website. How to make a space shooter game using KAPLAY. If you’re interested, check it out here . If you enjoyed this post and want more like it, I recommend subscribing so you won’t miss out on future publications. Subscribe now In a previous post , I tackled the various options one could use to make their web games playable offline as installable desktop apps. This would enable using web technologies to make games that could be sold on a platform like Steam. I also mentioned that the options available could be divided into two broad categories. Those who packaged a web engine with the executable and those who instead, used the default one available on the user’s system. I concluded, that the first category of options led to a more reliable experience because the same web engine was used on all operating systems. This however, led to more memory and storage usage making the resulting executables bloated. This was the case for Electron and NW.js which packaged a specific Chromium instance alongside the app. An empty project could easily exceed 100 MB in size. The second category led to more lean executables but required the dev to test on all operating systems as there could be differences in how the game was rendered since each used a different underlying web engine. Examples that fit in this category are Tauri, Neutralino and Wails. Finally, I concluded that the easiest option was to use NW.js since it was like Electron but easier to set up and that the bloated nature of this solution was not a big problem considering that it was expected for games to use more resources than normal apps. However, I recently discovered a new tool called GemShell which allows you to export for all 3 platforms in what amounts to one click! In this post, I’d like to present it. GemShell is available on itch.io under two versions. The Lite version which is free and the Pro version which is paid. Let’s go over the Lite version first. When you open the app, you’re first greeted with a section where you can provide the folder of your game’s build. For example, if you’re using a build tool like Vite, what you need to provide is the folder that is generated after running the command . Otherwise, if you’re not using a build tool, your web export is essentially your source code. Once the relevant folder is provided. You can go to the next section where you’ll be able to configure your game’s metadata like its title, window dimensions, author, whenever you want the window to be resizable, etc… Once the metadata is configured, you can choose for which platforms you want to build executables. Finally, you can reach the last section where you can build executables in one click. Once building is completed, you can either launch the build for your current operating system or open the folder containing all the generated builds. GemShell will put all the builds relevant to your game in a folder called GemShell-Builds which will be created in the Desktop directory of your computer (if it doesn’t already exist). What’s in The Pro Version? Since the developer of GemShell provided me with a pro version of the software, I can show you what it contains compared to the lite version. First, you now have the ability to set an icon for your executables other than the default using any image you want. However, the app recommends using a 1024x1024 png image. Second, you can toggle off the splash screen that appears before your game starts. Other pro features include : Performance Mode : Which claims to add a 15-40% FPS boost for 3D games. Since I only make 2D games and know almost nothing when it comes to 3D, I didn’t see a difference with/without this option toggled. Asset compression : As the name implies, it compresses your assets. I have tested this feature on a small pixel art based game I was working on and didn’t notice a difference between the Pro and Lite build. They both clocked in at 5.4 MB which is already incredibly lean. I assume that this would come in handy when using bigger assets. Code Minification : This compresses the code. However, build tools like Vite already do minifcation when making your web build. I assume this feature is useful for projects not relying on NPM and build tools. Preload Critical Assets : Claims to increase game start speed by 30-50% by downloading big files in parallel. I think this feature is mostly targeted to devs making muliplayer games where the desktop app is a client of some sort. Personally, I have not noticed a difference but remember that the games I make use pixel art based assets which are usually small in size. I would also like to note that regardless of if you use the Lite or Pro version, they both load extremely quickly when I tested them. The only difference is due to the splash screen taking 2 seconds before the game actually starts which is near instantaneous. Finally, a feature for detecting duplicate assets and removing console.log statements. While not available yet, there seems to be security features planned for future updates. How is Data Saved? One of the main reasons someone might want to package their web game as a desktop app is to have the ability to save user data permanently and reliably. This would allow a player to save their progress and play again later. Instead of writing data to an external file, you can simply use localStorage or IndexedDB. GemShell uses a hidden ID file set in your initial game’s folder. Therefore, data is not lost when updating your game’s build. An existing player can carry over their progress from one version to the next. Try it Out If you’re interested in this tool, I recommend trying the Lite version with some of your projects to see if it fits your needs. In addition, if you have issues or would like certain features to be added, the dev has a Discord server where you can provide feedback. GemShell : https://l0om.itch.io/gemshell GemShell’s Discord server : https://discord.gg/b24q5B8ZAY GemShell VS NW.js Now you might be wondering if I still recommend using NW.js or do I now recommend switching to GemShell? It’s undeniable that GemShell is extremely convenient compared to the setup needed for NW.js which itself was simpler compared to other alternatives I explored in the previous post. If we were to only consider how quickly you could make builds for desktop platforms, GemShell takes the cake. Issue #1 However, it’s important to consider that GemShell is built upon Neutralino, a technology that uses the system’s webview to render the game. The web engine used is different on each operating system, therefore, you don’t have a guarantee that things will render the same way and perform the same way on all three platforms. This isn’t a theoretical problem. Let’s consider the KAPLAY library, the one I’m using to make most of my games. It turns out that this library doesn’t run as well on Safari. Since Safari uses the default web engine available on Mac called Webkit, this means that the Mac version of my game built with GemShell will perform significantly worse than on Windows which uses a Chromium based web engine name Edge. On one hand KAPLAY is known to not be the most performant web game framework, but Webkit is also weaker for canvas based apps compared to Chromium. This led me to stick with NW.js for my current project since it packages a Chromium instance with the build. I can rest assured that the game will have the same performance on all three major operating systems. This wouldn’t have been a major issue if I had used a more performant framework like Phaser or a rendering library like Pixi.js. Issue #2 While not mandatory, if you want to put your game on Steam, you might want to integrate features like Steam achievements. To achieve this with NW.js, you can use the steamworks.js node package since NW.js gives you access to a Node based environment. As for GemShell there isn’t a straightforward way to achieve this, at least, currently. Conclusion To conclude, if you want : an extremely convenient way of packaging web games as desktop apps. builds that are very lean and start up quickly. don’t really care if there are differences in rendering and performance between platforms. are using a framework/library that is known to work well under all major web engines (Chromium, Gecko, Webkit, WebkitGTK). don’t care about integrating with the Steam SDK to implement features like Steam achievements. to be sure that the game renders and performs the same way across platforms or/and are using a game framework that perform noticeably worse on web engines used as default webviews of some operating systems. to integrate with the Steam SDK to implement Steam achievements in your game. don’t care if the builds take more storage and consume more memory compared to leaner alternatives. don’t mind taking the time to do some setup work before being able to generate builds. How to use Vite and NW.js together, so that you can develop for the web (therefore benefiting from hot reloading) while still being able to build an executable that will work as is. We can achieve this by using Vite’s environment variables allowing us to gate code which will run in the desktop version exclusively. This is useful when it comes to writing and reading files from/to the disk which is code that should run only in the desktop version. How to use NW-Builder to create a script to build executables programmatically rather than having to manually download binaries from the NW.js website. How to make a space shooter game using KAPLAY.

0 views
Raph Koster 1 months ago

Stars Reach visual upgrades

For months now, we have been working on a big overhaul to the visuals in Stars Reach . This has involved redoing most of the shaders in the entire game, and going back and retouching every asset. We started by redoing all the plant life and flora, and we have hundreds of those assets that had to be redone. Further, they all need to grow, change in response to seasons, be able to catch fire and burn, freeze, shed leaves and die, and so on. We don’t pre-design our biomes; we derive them on the fly from the simulation based on the environmental conditions. The right plants grow in the right places based on the temperature and the humidity and the soil types. (Yes, we even have a dozen soil types). All that means that every tree you see in the game grew there , and propagates across the landscape just like real plants. Seeds fall and grow into trees, forest fires happen and so on. Further, everything in the landscape itself can be changed. Mountains can be flattened, roads built, and so on. What you see in this screenshot and the videos is all dynamic, evolving, and modifiable by players. In this picture, that cliff face can not just be climbed, it can be melted into lava. You can see an ice rim along the top — pour water on the ground there, and it freezes and you will skate on the resulting ice. We are finally at a place where we do not need to compromise on the visual quality in order to deliver the simulated living world we have had working for years now. We also have been working on improved lighting, volumetric fog and other effects. And there is more coming, such as a much improved global illumination model. Truly dark caves are on the way! Some of these things are in the game now — we’ve been slowly putting in the new assets for months — but a lot of it is still pending a big patch to the game to roll out the technical features. But we’re at the point in development where it made sense to share some of the new visuals as a teaser. Environments are well along, and we are tackling all the hard surface objects next. Then, we will redo characters and creatures too. It should all add up to a pretty significant change in the game’s style, though we are sticking to a somewhat stylized realism look since the games market is currently chock full of photorealistic games that are indistinguishable from one another. All of this is also coming with pretty significant optimizations as well, resulting in smoother framerates and general performance. Plenty more to do! I thought you might be amused to see just how far we have come, so here’s a selection of images from way back when to now. When we first announced and got pushback on the graphics, we said we would keep working on it. Well, iteration takes time. But I think it’s really cool to see the incremental steps forward over time. I know plenty of folks are probably wondering, “okay, but what about gameplay?” This update is about visuals, but there’s been quite a lot of game stuff rolled out since I last posted! Banks, player run shops, combat updates, and more. Multiple player cities have been built and destroyed this year so far, and we have even blown up a few entire planets. And coming real soon: player governments. If you want to check out the state of gameplay, there are tons of videos up on the Stars Reach Youtube channel.

0 views
fLaMEd fury 1 months ago

Armageddon Expo 2025

What’s going on, Internet? I love a long weekend. Yesterday was Labour Day here in Aotearoa. If you read my last post, you’ll know I spent the first two days playing golf . Sunday was more of a family day; swimming lessons with the kids in the morning and an afternoon trip to the zoo to check in on the penguins and meerkats. On Monday (Labour Day), my son and I headed to the Armageddon Expo at the Auckland Showgrounds. We lucked out with passes from family friends who’d been at the expo on Saturday and Sunday but were flying out that morning. Armageddon Expo is New Zealand’s pop culture convention; a mix of comics, gaming, anime, film, and cosplay. Think Comic-Con, just on a smaller scale. Saturday and Sunday pulled big crowds thanks to Elijah Wood and Andy Serkis being there, but Monday was quieter, which suited us perfectly. The kid found it fun but a bit overwhelming at times with so many people around. We wandered the main expo hall where all the merch stalls were; Pokémon and Magic: The Gathering cards, stickers, art prints, 3D-printed dragons, and some sweet skateboard decks. We came across a couple of second-hand comic sellers, where I picked up a few X-Men issues to fill some gaps in my collection. We spent a bit of time at the main stage watching cosplayers perform K-pop songs and dances, which he enjoyed; it was fun seeing him clapping and cheering. But I think the real highlight for the little guy was the food trucks: hotdogs, burgers, fries, and ice cream. I’m not going to lie; I was pretty stoked about luch too. We also tried a Sonic racing kart game that looked like Sega’s take on Mario Kart. He loved spotting people in costumes, saying hi to Batman, waving at Mickey Mouse, and keeping his distance from a remote-controlled Star Wars droid that got a little too close. He was too shy to for a photo with any of them; maybe next year. The only thing we didn’t get to see that I was hoping to was the Doctor Who panel with Billie Piper; that would have been fun to watch. After checking out every stall in the expo hall, we called it a day and phoned home for a ride. The little guy was exhausted. So was Dad. Hey, thanks for reading this post in your feed reader! Want to chat? Reply by email or add me on XMPP , or send a webmention . Check out the posts archive on the website.

0 views
Brain Baking 1 months ago

Spiel Essen 2025

A friend convinced me to attend SPIEL Essen this year, the largest board game fair in the world that attracts over two hundred thousand visitors yearly. It’s crazy to have something like this close by. When we Belgians read about “the world largest whatever”, we usually say “oh must be in the US, bummer”. But no, this one’s in Essen 1 , and that German city is only two hours driving away—not counting another hour of patiently queuing at the parking lot. Yesterday was my third SPIEL visit, the last one being from 2017, so it’s been a while. That being said, I don’t think I’ll want to do this again any time soon, especially on a Sunday. As you can imagine, the halls were overcrowded, the queues were long, most shops were sold out, and the fresh air was long gone. We didn’t stay to find out how busy the connecting highway was going to get during closing time. My friend—his first time on the fair grounds—called it an experience . At the Jumbo stand, on our way to the Iello one (the yellow one in the back). The experience being rushing towards hall two and three to get our hands on an English version of the SETI expansion that supposedly is nowhere else available (yet). The person behind the counter told us we were lucky because they had a few copies left and it was basically sold out since Friday. We were less lucky trying to score the mini-expansion of The Lord of the Rings: Duel for Middle-earth : only the German editions were left. Most shops in the halls only sold German editions of games which is a bit odd considering people all over the world come to SPIEL to enjoy a good board game. Knizia’s new Lord of the Rings roll and write? Sold out. I moved Fate of the Fellowship to my Christmas list instead. During all that running around, I did spot a cheap English copy of Dorfromantik Sakura , a Carcassonne -like tile laying game with some Legacy elements to it. You gradually unlock more tiles that score differently and it’s supposed to be lovely as a laid-back cooperative experience. Or you can enjoy it on your own. It was stamped for approval by my wife after our first playthrough today so it must be doing something right. The second game I bought was Urbion , a solo card game in the Onirim universe (“Oniverse”) by Shadi Torbey. Shadi himself manned their small stand and helped us by explaining the difference between a few of the card games as I hesitated between buying Urbion or the more well-known Onirim . These have been on my list for a long time and it was great to meet an indie designer on the fair: most official meet-and-greets were planned on Friday. We even got to try R.A.V.E.L. , their latest logical puzzle involving flipping of dice in order to meet certain criteria. We enjoyed Iello's Little Soldiers but the rules were spread a little too thin for my taste. After the essentials were bagged, it was time to play. Depending on the free table spots, that is. We didn’t really fancy waiting an hour just to play the popular ones and we also skipped heavier board games as these tend to take too long to explain let alone play. I did want to try out Tea Garden but had to content myself with staring at others playing it instead. The box was and the steeper price kept me from instantly buying it. Fate of the Fellowship was , by the way. Ouch: almost 12% more expensive than my usual shop (where it’s out of stock but that’s beyond the point). If you were expecting some kind of special fair prices, you’d be sorely disappointed. Creature Caravan is another entry on the wishlist I hoped to try out but was nowhere to be seen. The Cult of the New strikes again: SPIEL is mostly about new releases, not about previous year’s games, even though Creature Caravan is barely a year old. Instead, I discovered yet another iteration on Uwe Rosenberg’s Bohnanza but this time with flowers. Yay, I guess? Speaking of Rosenberg, I found a German Hallertau in a shop (pass) while looking for the English Nusfjord (fail), making this my first SPIEL without buying a Rosenberg game. Sad times! For me, one of the biggest reasons to attend this huge fair is BoardGameGeek’s “ Math Trade ”, a way to swap or buy/sell games from other Geek members that are also attending. Usually, around lunch time, on a set location in-between the halls or at the foyer, you’ll see a lot of silly people walking around donned in bright striped T-shirts and straw hats, waving plaques in the air toting their BGG nickname to find their swapping buddy. That’s usually the place to do great deals and get your hands on these rarer out of print boxes, but it does require carefully following the BGG SPIEL Math Trade forum thread which I neglected to do this year. I bought a near mint copy of Nightfall for only from a British chap there once. Now, Nightfall is nowhere to be found (contact me if you’re interested). The last game we played was Bravest from Maxime Rambourg, known for The LOOP and The Big Book of Madness . Bravest is an interesting road tile placement game where you try to fill up your board to maximize your score whilst also hate drafting tiles you think your opponent might use. I’d rather play his Dracula vs Van Helsing but hey, that game is two years old so doesn’t get any table presence. I’m glad I went home with “only” two games as there are a few funded Kickstarters coming my way early next year and I still have to dig into Earthborne Rangers that same friend gifted me for my birthday. So many games, so little time! I suppose that is because board gaming in Germany is huge: most publishers you know are German ones (Kosmos, Haba, Pegasus Spiele, Lookout Games, Amigo, …).  ↩︎ Related topics: / activity / boardgames / By Wouter Groeneveld on 27 October 2025.  Reply via email . I suppose that is because board gaming in Germany is huge: most publishers you know are German ones (Kosmos, Haba, Pegasus Spiele, Lookout Games, Amigo, …).  ↩︎

0 views
Raph Koster 1 months ago

New stuff on the site

I really have been neglecting the blog lately. But that doesn’t mean I haven’t been adding content to the site all along. I figured it might not hurt to do a little summary of items that have been added over the last year and a half or more. The last talk I posted up was my GDC talk from 2024 ! So, here’s a bit of a catalog… For folks who are interested in the history of Ultima Online , I finally gathered up the various snippets I have posted about why exactly the original ecology system didn’t survive to release. There’s a theory out there that it happened because players were like locusts and killed everything and caused it to collapse, and that’s not quite correct. Players were like locusts. But the ecology system came out of the game for economic reasons and for performance reasons. So if you’re curious, you can read the answer to “did players destroy the UO ecology?” here . I have done a lot of podcast interviews over the last while. Mostly, these end up on the Interviews and Panels page, but I haven’t been calling attention to them here. So here’s a list in chronological order… you’ll notice the rise of “metaverse fever!” The last major talk I gave was on “The Evolution of Online Worlds,” and I managed to share it social media and never talk about it here. It was filmed, and video as well as PDFs of the slides are available here . There’s some other stuff too — for example, I did a lot of work around emulation a few years ago, and I finally collected a lot of those materials here, so if you need Vectrex overlays, or want to play the Microvision again, or are baffled by Atari 8 bit computer emulation, you find find some stuff to read on the Emulation page. I’ll make the usual promise here to be better about keeping the blog updated, but… we’ll see. I haven’t even been good about posting updates on Stars Reach here! An MMORPG.com interview from 2022 that is all about MMOs and what the hell a metaverse even is. This one has video! Naavik cornered me on The Metacast to talk about game design, Playable Worlds, player-driven economies, and more. At the GDC Showcase in 2023, Game Developer senior editor Bryant Francis interviewed me for a “game design career” fireside chat . Famed game devs Alex Seropian (founder of Bungie, Wideload, Industrial Toys) and Aaron Marroquin (Art Director, Game Designer, part time magician) have a great podcast called The Fourth Curtain where they interview devs. It was my turn back in the day . I got to share the stage with Wagner James Au and Cory Ondrejka at Gamesbeat and get real about the practical steps towards a metaverse of any sort. But not everything was about metaverses! The Here’s Waldo podcast instead wanted to talk about indie studio startups. So here’s a great conversation with Lizzie Mintus about that. If you are more interested in some stuff about Stars Reach and game design, this recent interview with grokludo gets nice and crunchy on design topics.

0 views