
I have been interviewed by Game*Spark in Japan about GearHead Caramel. I can’t read Japanese, but the Google translated version of my answers seems pretty accurate.
Aug 03
I have been interviewed by Game*Spark in Japan about GearHead Caramel. I can’t read Japanese, but the Google translated version of my answers seems pretty accurate.
Jul 31
Version 0.910 of GearHead Caramel has just been released. You can get it from all the usual places- Steam, itch.io, Patreon, and GitHub. The big changes with v0.910 are the addition of flying mecha and a complete overhaul of the combat interface. The first two flyers to be featured are the Wraith and the Neko, though you can of course make as many as you want in the mecha editor. The combat interface now features an action clock so you can see exactly how much of your precious time any given action is going to take. The movement UI has been changed to match the style of the other combat interfaces. In addition, there’s now a counter for multi-target actions that should make it more clear what you’re doing.
As usual, try it out and let me know what you think.
Jul 22
GearHead Caramel v0.903 has just been released. It’s available from all the regular places- itch.io, Patreon, GitHub, and now Steam. Hooray! You know how that say that in the week before releasing on Steam dozens of old bugs that you have never seen before will suddenly show up? I can now confirm that this is absolutely true. To help with future bugs I’ve added an exception logging system. This will record bugs as they happen, which should make finding and fixing them much easier.
The big changes this time around include replacing the old Mecha Tarot system with the new Challenge/Resource system; increased stability; prettier + more varied deadzone villages; improved Start Campaign and Load Campaign menus; tons of bug fixes plus a new error logging system; improved info displays for mecha, beings, and clothing; lancemates keep their colors when switching mecha (unless you turn this feature off); more personal scale equipment; and some new old friends from GearHead Arena.
As usual, try it out and let me know what you think.
Jul 08
The GearHead Caramel “Coming Soon” page is now up on Steam. If you have a Steam account, please wishlist the game so that when it releases on the 21st it’ll appear higher in the rankings. The more money I can make on GearHead Caramel, the more time I can work on GearHead Caramel, and the less time I need to hustle for private lessons and academic copy editing jobs (if you are an academic in need of proofreading or copy editing, contact me).
Jul 01
I’d like to talk for a bit about procedural narrative, which has been an important feature (probably the central feature) of the GearHead series since its inception. But first, a song.
By the time this gets to you the language will be nonsense,
words all lose their meaning by the time they leave the tongue.
Sometimes ain’t about making the whole world understand you;
words just speak for moments like the light speaks for the sun.
The Bourbon tabernacle choir, “by the time”
Procedural narration is the use of a computer program to help make up a story. According to at least two separate people, GearHead Arena (2002) was the first game to successfully incorporate procedural narrative (I’m sure I could find a third person if I asked around on Twitter). The effect of procedural narration is that no two playthroughs of GearHead Arena are the same. Different events will happen; characters who were your friend one time around might be your enemy next time. From the player’s perspective each story is both unique and coherent.
The definition of procedural narrative that I gave in the previous paragraph is a bit broad so I’m going to split it in two. And, being an English professor, I’m going to use a metaphor to do it. Most people approach procedural narrative as a matter of technology. They look to AI projects like GPT-3 for an algorithm that can produce meaningful texts. I’m using “text” here in the broad way that English professors use the word- in this case, the story of a computer game can be a text. This technique can produce interesting and useful results. The game AI Dungeon, for instance, is a simulated game master that creates a story in response to user actions. I’m going to refer to this technique as sorcery. It involves calling upon powerful algorithms that the programmer can never fully understand and has limited direct control over (in this case, a trained AI system). It’s not unlike a sorcerer calling upon a genie (daemons, alas, are a completely different type of software).
I don’t do sorcery. I do magic.
As everybody knows, or at least as everybody who studied literary criticism in the mid 90s knows, the meaning of a text is not contained entirely within the text. Instead, meaning-making is an active process performed by the receiver of a text. When you read a book your brain reconstructs the meaning not just from the words on the page, but also from your cultural background, your preconceptions, your dialect, and a million other factors that affect how you see the world. This is one reason why different people can have different interpretations of a text. It’s also a reason why texts from different times and places can be difficult to understand, or may have a different meaning here and now than was originally intended by the author. The same is true of computer games.
GearHead Arena uses a technique that is now pretty standard for procedural narrative. The story is constructed from a series of plot fragments, each of which describe something that could happen. The plot fragments themselves are mostly self-contained; they don’t need to communicate with other plot fragments. The story generator strings the plot fragments together such that each fragment logically follows from the fragment before it. It doesn’t worry about the story as a whole just as long as each individual transition makes sense. It is the player’s brain that constructs a coherent story from these disparate pieces. This is magic. It’s an illusion- trickery!- but an illusion that relies on the willing participation of the audience. The computer isn’t really creating a story; it’s just sorting bricks according to a set of mechanical rules. But that’s not what the player sees. The player sees a living world, a place they can interact with and change. What they don’t realize is that they are the co-creator of this world.
The whole thing is very similar to Scott McCloud’s theory of how closure allows a reader to see two comics panels and combine them into a single story.
It is not about the technology; it is about the performance. That’s the difference between sorcery and magic. Almost every time I’ve explained GearHead’s procedural narrative algorithms to a programmer they’ve been amazed (sometimes disillusioned) by the simplicity. You can read more about Markov Chains and Propp’s Ratchet in other posts on this blog.
GearHead Caramel, the latest game in the GearHead series, uses more advanced techniques to string plot fragments together but it’s still just another magic trick. I only hope that you continue to enjoy my performance.
Jun 21
GearHead Caramel v0.830 has just been released. There have been a lot of changes under the hood and to the Scenario Creator, but the most visible change for most players will be the addition of Mystery Challenges: collect clues to solve randomly generated puzzles. You can download v0.830 from the usual places:
As usual, try it out and let me know what you think. Thanks for your support!
Mar 31
There was a bug with the previous release of GearHead Caramel; the loverboy facial hair image file was not included in the package. I saved it to the wrong folder, but somehow the image loader could still find it on my computer, so when I tested the packed version it looked like everything was working. Then when I tried to solve the problem the loverboy facial hair image file, which was clearly showing up in game, was mysteriously absent from the source folder! It was a bit confusing to say the least. Fortunately, it’s fixed now. Even better, v0.821 also includes improved keyboard controls. You should now be able to play the game entirely using the keyboard. Scroll column widgets act like menus when they’re active. You can move and target things using the numeric keypad instead of the mouse. All keys can be customized by editing the config file.
As usual, you can download the new version from itch.io, Patreon, or GitHub. Try it out and let me know if you find any more problems!
Mar 26
3D model of Hyolee
Yesterday I finished up a 3D print model of Hyolee from GearHead (which will be uploaded to Patreon soon, then my itch and Cults3D shops later). I’ve been working on these games for over 20 years now, and all that time I’ve wanted miniatures of my creations- which, thanks to 3D printing, is now a possibility. Anyhow, the bit of this miniature that gave me the most trouble was adding the knit texture to her dress. First I tried drawing the cords by hand, but that was a Bad Idea. After that I tried using a texture brush in sculpt mode, but that doesn’t work great for textures that need to be evenly applied to an entire surface.
Eventually I learned how to apply a texture so it physically deforms the mesh it’s attached to, but it’s not as simple a process as I hoped it would be. So now I’m writing this blog post in the hopes that my onerous journey of pain and suffering experience might be useful to other sculptors. To demonstrate the steps involved I’ll be making a miniature of the Servitor, a synth monster from GearHead Caramel.
I chose this monster for the tutorial because let’s be honest- it’s just a d20 with legs. So I start with a ico sphere with 1 subdivision.
Next, I choose a texture to apply to the model. I want to retain the geometric shape but give it an organic looking skin. I found this texture on pixabay.com/:
I add a material to the ico sphere, then set the Base Color of the material to an image (by pressing the circle that doesn’t really look like a button, but trust me it’s a button, to the left of the color selector). Then I set the Vector to “Generated” and the mapping method to “Sphere”, resulting in the following:
This looks pretty good to me as an organic texture. But right now it’s not a texture, it’s a material. Materials and textures are different. I don’t know why they are different. I have very little experience with 3D graphics and just want to make tiny plastic toys. Is that too much to ask? No, no it isn’t. But it is going to take a bit of work.
For the next step, I’m going to prepare the ico sphere to accept the texture. Note that we’ll be using the Deform modifier, and the Deform modifier only works with the vertices the model already has (in this case 12). You could use the Subdivision Surface modifier to split each face an arbitrary number of times, but instead I’m heading into Sculpt mode to Remesh the model with a Voxel Size of 0.05m. This will provide us with a metric crapton of vertices, which will come in useful later.
Go from Sculpt mode to Edit mode and UV/unwrap the ico sphere. You can use the regular unwrap menu item or one of the fancy ones. Don’t ask me; I don’t know the difference.
Alright, now our prep work is done. Next we need to convert our material to a texture. You’d think this would be one of those things that is a simple menu option. Oh, you innocent fool, you sweet pixel art child. We haven’t even started that process yet.
Step one: switch your render engine from Eevee to Cycles. Eevee doesn’t do this.
Next, go into the Shader Editor, where we will find the material we just created waiting for us.
We’re going to have to do a few things here. First, get rid of that Principled BSDF node and connect the texture directly to the material output. The Principled BSDF handles lighting for your scene, but we want to apply this texture without concern for lighting. We also need to add a new Texture/Image node with a new image- make sure the image is pretty big (I selected 4096 x 4096; I heard there’s some advantage to using a power of 2 but dunno why) and click the 32 bit float box.
Add a UV Map node, select the UV Map of your ico sphere (which should just be named “UV Map” unless you renamed it) and connect this to the Vector input of the Image Texture. Then, open up the Scene panel over on the right, and with the Image Texture node selected press the “Bake” button.
When the baking process finishes, you can find the baked texture in the image editor. You will note that it is quite different from the texture you started with. Save it to disk.
Head back into the 3D view. Create a new texture, and load the baked texture you just created (NOT the original texture! That’s important!).
Add a Displacement modifier to the ico sphere. Set the coordinates to UV and the UV Map to the UV Map created above (which, again, should be named UV Map unless you renamed it). Bam! Immediately the cube is deformed to match the texture, with bright/white areas being raised and dark/black areas being recessed.
You can play around with the Strength and Midlevel values until you are happy with the thickness of the deformation. In general, I try to make sure that texture extends at least 0.3mm above the surface. Details on miniatures should be exaggerated, so when in doubt go thicker than you think you need.
Also: you’ll probably notice that using a straight black and white texture resulted in sharp deformations. For a more organic look, I should have used a texture that has smoother color gradation. For example:
I’m not entirely happy with this texture either, but I’ve got some more to try. Anyhow, that is how you transform a material to a texture to a mesh in Blender3D. Hooray!
Jan 14
I made a video this morning to show off the new procedural narrative system I’m developing for GearHead Caramel. The Challenge system is a further refinement of the Mechanical Tarot, which was based on Smart Terrain Causality Chains. Its big difference from those systems is the fact that instead of linking interactions to lead to a desired outcome, the challenge system can be used to construct scenarios with interactive parts and multiple or even no preset endpoints.
Here’s how it works. A Challenge can be defined in the scenario generator. This Challenge describes some aspect of the world that the player character can interact with- this is usually going to be a need or want that the PC’s actions can fulfill. The Challenge is described in sufficient detail that other parts of the adventure and the scenario generator can add opportunities and resources which the PC can use to complete the Challenge. Challenges can be linked, such that completing one Challenge is necessary before another Challenge is unlocked.
The completion (or defeat) of a Challenge will typically alter the game world directly. Political alliances may shift. The player character may gain friends or enemies. The state of a city may be altered, such that a previously wealthy town in thrown into ruin or a tyrannical ruler may be dethroned (or defenestrated). There may be unintended consequences depending upon which Challenges are completed and which are not.
In the video, and example is shown of two deadzone communities at war with one another. The war itself consists of two challenges- C1War and C2War, which control city 1’s military actions against city 2 and vice versa. The scenario creator adds a random factor into the war- a casus belli, the reason why the two towns are fighting. This reason may load its own challenges- maybe a diplomacy challenge to argue for peace, but that might not be possible unless other factors are addressed first. Maybe City2 can’t grow enough food and has attacked City1 to capture some arable land. Maybe the leader of City1 has their sights set on building a small wasteland empire and City2 is just the first city in their sights.
This brings me to another big difference between the Challenge system and the Mechanical Tarot- while the Mechanical Tarot attempted to build story components that could be used universally, Challenges divide the labor between the Challenge class (describing a very specific scenario) and the Opportunity/Resource events (which handle the mechanics of Challenge interaction, are mostly universal, and draw their specific details from the data contained in the Challenge object). The Challenge object itself is primarily a description of what’s going on. It’s the other parts of the system which bring that to life.
Anyhow, this is still a fairly new system, but I think it shows great promise. I plan to make a new release featuring the Challenge system soon after a bit more testing and polishing.