Categories
Game Design Game Development Geek / Technical

Freshly Squeezed Progress Report: The Counterintuitive Holiday Slowdown

In my last report, I was still migrating my code to SDL3, specifically SDL3_mixer, for a Major Update(tm) for my strategic leaf-raking business simulation game, Toytles: Leaf Raking.

Despite having time off from the day job, I got less done this week than normal.

Sprint 2025-MJ_7: Preproduction

In progress:

  • Update SDL2 to SDL3

The holidays are always strange in terms of predicting how productive I will be.

Having time off from the day job doesn’t always translate into having more time to work on my business. Family activities and preparations for big visits naturally dominate.

Even when I do find myself with “idle” time, I might be exhausted. I think I napped more in the last week than I have in most months!

Some forward progress is better than none, of course, and I always manage to do something. I was updating code to use my new MixTrackManager that I mentioned last week, and a few more hours should be enough for me to finally finish this migration work.

And of course, last Friday kicked off the itch.io Black Friday sale which I am participating in, although I wish I had been more deliberate and prepared for it.

While I work on updating Toytles: Leaf Raking, you can get it now and ensure that you’ll get those updates for free in the future, when I will likely raise my prices!

Thanks for reading, and stay curious!

Want to learn about future Freshly Squeezed games I am creating? Sign up for the GBGames Curiosities newsletter, and download the full color Player’s Guides to my existing and future games for free!

Categories
Game Design Game Development Geek / Technical

Freshly Squeezed Progress Report: Managing Mixer Tracks

Last time, I reported that I was still migrating my code to SDL3, specifically SDL3_mixer, for a Major Update(tm) for my strategic leaf-raking business simulation game, Toytles: Leaf Raking.

Alas, I am still, STILL working on it.

Sprint 2025-MJ_6: Preproduction

In progress:

  • Update SDL2 to SDL3

Again, the main migration work that I have left is audio-related. To make things easier, I decided to create a MixTrackManager to manage my MIX_Track objects.

Basically, when I initialize my game, I will also configure a set of tracks, grouped by name.

For example, I might have one track for all user interface sound effects. Every button click and swooshing transition will likely play on its own. That is, if you clicked a button, you couldn’t have clicked a second button simultaneously, so won’t need a second track to play both sounds. One track will work just fine for “UI” sounds.

However, maybe there will be lightning crashes, the sound of rain hitting a roof, and the sound of wind. All of these might be “ambient” sounds that could play together, so I should have at least as many tracks available.

SDL_mixer lets you tag tracks, but the main use is to treat a bunch of tracks that are so-tagged as a collective group of tracks to play at once, for instance.

What I want is to be able to say “Play this sound effect on the first available track in the ‘ambient’ tracks”, and hence the MixTrackManager.

The old SDL_mixer just let me specify -1 as the channel to play on, and it would play on the first available channel rather than require me to specify a specific channel. I wanted to have something similar while also retaining the ability to have separate sets of tracks for different purposes.

So MixTrackManager allows me to create a set of tracks for a given tag, but I use my tags differently from how SDL_mixer is using them.

But maybe calling them “tags” even though the purpose is to just name a set of tracks (and even as I use that name to use SDL_mixer’s tagging functionality, too) is confusing things.

I might consider renaming things, but the functionality it will allow is the key: I will be able to play audio more or less the way I did before.

It’s taking me a long time to get to this point, and frankly I am not sure why exactly it has taken me so long, but I’m almost there.

Thanks for reading, and stay curious!

Want to learn about future Freshly Squeezed games I am creating? Sign up for the GBGames Curiosities newsletter, and download the full color Player’s Guides to my existing and future games for free!

Categories
Game Design Game Development Geek / Technical

Freshly Squeezed Progress Report: Fixing Tests and Designing SDL_mixer Usage

In my last report, I continued migrating my code to SDL3 for a Major Update(tm) for my strategic leaf-raking business simulation game, Toytles: Leaf Raking.

And once again, I continued the work.

Sprint 2025-MJ_5: Preproduction

In progress:

  • Update SDL2 to SDL3

I realized at one point that my unit tests were not running after a build for GBLib, which is my non-game-specific infrastructure code that all of my games make use of. Framework might be too heavy and formal a word to describe it. Anyway, I must have disabled it in the past while attempting to change something unrelated.

I have tests for my game and for GBLib. Normally, after my code builds, the build system will run the tests automatically.

I probably should have thought this migration work was too easy when I noticed that I didn’t have to make changes to my unit tests to keep things passing.

Once I turned the tests back on, I saw a bunch of errors, so I spent time updating my unit tests to more closely match my updated SDL3-based code.

By the end of the week, I was starting to test-drive changes to my audio-related GBLib code. Like the previous week, a good chunk of this effort was spent figuring out what I wanted my code to do to manage audio. Again, SDL_mixer is completely different than it was. It’s not a matter of merely updating some function names or parameters.

I’m disappointed that I ended the week without finishing this migration work yet again, but the main work left in this effort is audio-related, and I did prove that I can now play audio with part of an update to GBLib when I did a one-off test on the main menu in which I played a piece of audio when I clicked on the screen.

Managing tracks isn’t something I had to worry about before, and I’m making sure my games have the tools available to manage them in a way that is flexible and easy.

Thanks for reading, and stay curious!

Want to learn about future Freshly Squeezed games I am creating? Sign up for the GBGames Curiosities newsletter, and download the full color Player’s Guides to my existing and future games for free!

Categories
Game Design Game Development Geek / Technical

Freshly Squeezed Progress Report: Almost Done Upgrading to SDL3

Last time, I reported that I was still working on migrating my code to SDL3 for a Major Update(tm) for my strategic leaf-raking business simulation game, Toytles: Leaf Raking.

I continued the work this past week.

Sprint 2025-MJ_4: Preproduction

In progress:

  • Update SDL2 to SDL3

At some point, I finally fixed the last compile error, and I was able to run the game, and I was surprised at how well it Just Worked(tm).

Well, I found an issue with the mouse cursor not being where I expect it to be if I change the size of the window. I’ll figure this issue out later, but I suspect it has to do with the game being at a “logical” set of dimensions but scaling the rendering without scaling the mouse cursor’s position.

And I also don’t have text and audio.

Toytles: Leaf Raking - running but without text

Toytles: Leaf Raking - running but without text

I am using the library NFont, and it hasn’t been updated in years, which means it doesn’t have an SDL3 update yet.

So I commented the use of the library out of my code, which explains why there is no text rendering to the screen.

And the audio is missing because SDL_mixer is so different from before that I have to figure out how to change my code to use it.

Within a day, though, I got text back. Originally I thought I would just remove NFont and try to use SDL_ttf directly, but instead I did the work to migrate NFont to SDL3 myself.

Toytles: Leaf Raking with text again

I even submitted a pull request for my changes to NFont in case the library does get updated one day.

Which just leaves SDL_mixer updates. So far I am initializing it with MIX_Init() and creating a Mixer object, but I am also no longer initializing it the way I did before with a frequency, number of channels, and chunk size.

I know I need to load sound effects and music into SDL_Audio objects, and I know that to play them that they should be set to Tracks.

What was nice about SDL_mixer v2 was that if I wanted to play on an open channel and not care about the particular channel I played a sound on, I could just use a channel ID of -1. It is possible to play and SDL_Audio file once, and it will be assigned to an internal track, but it doesn’t let me set the audio to loop or do any other effects I might want, so the fire-and-forget option isn’t ideal.

So I’m trying to figure out if there is a mechanism to do something similar with SDL_mixer v3, or if there is a better approach to playing sounds on tracks.

But I expect I’ll have sound effects implemented soon, and then I just have to fix a few issues like that mouse cursor issue I mentioned above, and then I’ll have Toytles: Leaf Raking running with SDL3.

And then the real update work can start.

Thanks for reading, and stay curious!

Want to learn about future Freshly Squeezed games I am creating? Sign up for the GBGames Curiosities newsletter, and download the full color Player’s Guides to my existing and future games for free!

Categories
Game Design Game Development Geek / Technical

Freshly Squeezed Progress Report: (Still) Upgrading to SDL3

In my last update, I said I was working on migrating my code from libSDL2 to libSDL3 for a Major Update(tm) for my strategic leaf-raking business simulation game, Toytles: Leaf Raking.

I continued the work this past week.

Sprint 2025-MJ_3: Preproduction

In progress:

  • Update SDL2 to SDL3

Toytles: Leaf Raking

I’ve modified almost 2,000 lines of build scripts and code so far. Most of them are renames of existing functions that didn’t change much, but some of them involved a bit more work.

For example, SDL_mixer is completely different, which means that my code now needs to be changed to create a mixer, then create tracks. Before I just had channels to worry about.

It looks like instead of getting one music track and a bunch of sound effects the way SDL_mixer provided before, I can mix and match multiple music and sound effects in a more unified way. So it will be nice when it all comes together.

Porting can be tedious, but it has been helpful to go through it step by step and see how this migration will directly impact things.

And there is a light at the end of the tunnel as the list of compiler errors is now fitting on a single screen.

So I’m almost done, but I’m not done yet, and these are the days when I wish I was able to dedicate full-time effort to the work.

Thanks for reading, and stay curious!

Want to learn about future Freshly Squeezed games I am creating? Sign up for the GBGames Curiosities newsletter, and download the full color Player’s Guides to my existing and future games for free!

Categories
Game Design Game Development Geek / Technical

Freshly Squeezed Progress Report: Upgrading to SDL3

Last time, I reported that I had started working on my first sprint for a Major Update(tm) for my strategic leaf-raking business simulation game, Toytles: Leaf Raking.

This past week I started the work of migrating my code from libSDL2 to libSDL3.

Sprint 2025-MJ_2: Preproduction

In progress:

  • Update SDL2 to SDL3

Toytles: Leaf Raking

Technically, this work started in the previous sprint, but it was a very short sprint that started near the end of the week.

Also, this is a somewhat technical update.

Years ago, I wrote an abstraction over my usage of SDL2. SDL3 is a major change from SDL2, but I anticipated that the impact should be isolated to a few files that directly reference SDL2.

Even so, I’m finding that while many variables, constants, and functions are merely renamed, there are some areas in which SDL3 changed how it does things, or at least there is enough change that it requires me to spend time digging into it to determine if the changes are relevant to what I am trying to do.

For instance, the SDL2 to SDL3 Migration Guide mentions that “SDL_WINDOW_FULLSCREEN_DESKTOP has been removed” and that “Windows now have an explicit fullscreen mode that is set, using SDL_SetWindowFullscreenMode()” which makes it sound like I can’t do what I did in SDL2, which is use SDL_CreateWindow() for either fullscreen or resizable windows.

But when I looked into it, SDL_CreateWindow() still lets me pass in a SDL_WINDOW_FULLSCREEN flag. Creating a fullscreen window is still fine, but the way to set an existing window as fullscreen is different…something I never do in my code, so I don’t have to worry about handling this change in my own code.

It’s a little tedious, but the migration guide is very helpful, and the error codes are incredibly helpful:

include/SDL3/SDL_oldnames.h:1168:26: error: ‘SDL_RendererFlip_renamed_SDL_FlipMode’ does not name a type
 1168 | #define SDL_RendererFlip SDL_RendererFlip_renamed_SDL_FlipMode

That’s very thoughtful of the SDL3 developers!

And it also gives me an opportunity to look through some of my oldest parts of my code to see if there is anything I can also cleanup.

My hope is that I can get this migration work accomplished quickly early this week, and then I can make sure that the game still runs the same as before. Then I can start the work of updating the game itself.

Thanks for reading, and stay curious!

Want to learn about future Freshly Squeezed games I am creating? Sign up for the GBGames Curiosities newsletter, and download the full color Player’s Guides to my existing and future games for free!

Categories
Game Design Game Development Geek / Technical

Freshly Squeezed Progress Report: Logos and Infrastructure

In my last report, I was concerned about how much work I identified for a Major Update(tm) for my strategic leaf-raking business simulation game, Toytles: Leaf Raking.

Last week, I put together an initial roadmap and started work on the first sprint.

Sprint 2025-MJ_1: Preproduction

In progress:

  • Update SDL2 to SDL3

Early in the week, I started looking into fun fonts to use for a new logo for the game.

The current logo, if you can call it that, is pretty simple and uninteresting:

Toytles: Leaf Raking old simplistic logo

So early in the week I started looking into fun fonts to use for a new log for the game.

I found quite a few, fell in love with one, then had to abandon it when it turned out that the font in question required me to pay a license fee for use in a logo for a limited number of uses.

So I found a few others and found that I can love a different font. Here’s an initial stylized logo that I really like:

Toytles: Leaf Raking new logo prototype

I toyed a bit with the kerning and outline, and a colleague added some iconography that showed some potential. Basically, don’t expect it to be the finished logo.

At the same time, though, I got really excited about the project upon seeing it. I think in the future I will spend time making a nice logo early in development of any new projects.

Later in the week, I set to work to finally update libSDL2 to libSDL3. I anticipate it might be tedious work, but I hope it isn’t going to require major surgery on my game’s code.

Thanks for reading, and stay curious!

Want to learn about future Freshly Squeezed games I am creating? Sign up for the GBGames Curiosities newsletter, and download the full color Player’s Guides to my existing and future games for free!

Categories
Game Design Game Development Geek / Technical

Freshly Squeezed Progress Report: How Is this Backlog So Huge?

Last time, I reported that I was grappling with big questions regarding the scope of a Major Update(tm) for my strategic leaf-raking business simulation game, Toytles: Leaf Raking.

I started by putting together everything I currently would like to see in a Major Update(tm) and would worry about what to cut or streamline later.

For my last few projects, I have found that I tend to have close to 100 high-level tasks.

But those were new projects, built from scratch, and with my part-time efforts, they can take me sometimes a year to develop.

A Major Update(tm) to an existing game shouldn’t be so bad, right?

So why do I already have 70 tasks identified? It’s almost like I might as well create an entirely new project!

Many of these tasks are actually quite big, with some unknowns that I will need to identify and break out into their own tasks.

For instance, if I want to create a better looking town, it isn’t enough to just redraw the background, streets, and sidewalks. I would also need to redraw the houses in the neighborhood, including their yards, and the trees.

And of course the general store will need a facelift.

Store

And that’s just what I can think of offhand.

I’ve also been giving considerable thought to the general art direction as well as audio. I originally thought I would try to preserve the slapdash nature of the art while making it a bit more appealing, but now I am considering really focusing on the “toy” part of Toytles.

What if the game looked like it was a bunch of toys being played with by a kid with an active imagination? The houses would need to look like toy houses, with decals and painted blocks. The characters should look like action figures talking to each other with perhaps barks that sound like a kid is mimicking all of the voices.

Which of course might also impact the scope. But I’m taking my time with figuring this all out before I commit to development.

Thanks for reading, and stay curious!

Want to learn about future Freshly Squeezed games I am creating? Sign up for the GBGames Curiosities newsletter, and download the full color Player’s Guides to my existing and future games for free!

Categories
Game Design Game Development Geek / Technical

Freshly Squeezed Progress Report: Asking the Big Questions

First, don’t forget that I’m asking for fan submissions for Clown Alley Creator. Send me your clowns, and I might share them here and on social media! See details at that link.

In my previous report, I broke down some of the ideas I had for a Major Update(tm) for my strategic leaf-raking business simulation game, Toytles: Leaf Raking, into a few major categories.

Toytles: Leaf Raking

This past week I had other priorities for my time and energy, so I didn’t make much progress on fleshing out the plan, but I did find myself chatting with a few people about what I am trying to do.

And it got me thinking about all sorts of things, such as:

  • What is the exact impact that I hope to have with this Major Update(tm)?
  • How much time do I want to commit to it?
  • Should I look into contracting an artist, which will cost money but save time (hopefully)?
  • Does one big release make sense, or should I break it up into frequent, smaller releases?
  • Even with the new look and feel I hope to go for, how do I find customers who want to play it?

No matter how big of a Major Update(tm) I want to do, I am confident that I can create a solid game development project plan for it.

But how do I determine how big of a Major Update(tm) to do?

Because I also have to think about opportunity cost: time spent on trying to improve the appeal of Toytles: Leaf Raking is time not spent making a new game.

The faster I can make this update, the sooner I can put it out there and promote it.

But I don’t work on GBGames full-time (yet), so I know that there is only so fast I can go. It takes me months to do what a full-time game developer might do in days or weeks, which means that while I might want to only dedicate a month, realistically I might find that I would put hardly a dent in the update in that time.

In the end, I’m trying to determine how much I want to invest in this Major Update(tm). It’s hard for me to determine because I do not have a ton of market research and insight that justifies such an investment.

It is entirely possible that my strategy game about running a leaf-raking business aimed at pre-teens and teens won’t benefit significantly from significantly improved production values. I want to see what happens if it does, but I also recognize that I don’t want to spend years of effort on it.

Thanks for reading, and stay curious!

Want to learn about future Freshly Squeezed games I am creating? Sign up for the GBGames Curiosities newsletter, and download the full color Player’s Guides to my existing and future games for free!

Categories
Game Design Game Development Geek / Technical

Freshly Squeezed Progress Report: Getting Expansive with Ideas

Last time, I reported that I was starting to prepare for a Major Update(tm) for my strategic leaf-raking business simulation game Toytles: Leaf Raking‘s 10 year anniversary next year.

Toytles: Leaf Raking

This past week I spent time going through my old notes for the project, some of which date back to 2014.

I had some ideas that sounded good but got cut or changed as progress was made, and other ideas are…less good.

But I’m going through all of them to help me determine what I might want to put into this Major Update(tm).

I had a number of ideas that could be implemented relatively quickly, and other ideas that would require me to add entire features or systems.

At this point, I wanted to think about all the possibilities before limiting the scope by looking at the calendar, my capabilities, and reality.

But I’ve already started to categorize some ideas. Low-hanging Fruit are things like replacing background graphics, updating the font, using better sound effects, adding music, and updating the general user interface. These are things I can do without substantially changing the code or worrying about impacting the game play, but that I think will enhance things quite a bit.

Requires Some Effort to Enhance the Game are things that require me to add or modify code and art to support things that can’t be done yet. For instance, the game supports one save file, but there is no reason not to support multiple saves. There is no way to mute the audio, which makes sense since the game has no music yet, but I should allow the player to not only mute sound effects and music but also adjust their volumes. And I should create a proper ending, as right now the ending is quite anticlimactic.

And then there are Game Play Improvements, which not only require updates to the game but some hard design work to make sure that things are improved and not broken accidentally. I’ve mentioned this before, but I think the main game play of potentially getting interrupted by rain while raking leaves and needing to wait it out can be quite clunky. There are also awkward edge cases that result in what might be seen as unfair situations, such as finishing a yard at midnight and not getting paid because technically midnight is when leaves get added for the next day.

The first two are mostly technical in nature, as in I am doing art swaps or adding features with known constraints and parameters. The third is likely to be the most challenging because there is a risk of potentially unbalancing things and anticipating that I might need to do more work to rebalance the design.

I also have plans to update the app icon:

Toytles: Leaf Raking - app icon

Seriously, it could be a LOT better.

And I want to create a proper trailer and even add translations.

If you’ve played Toytles: Leaf Raking, I’d love to hear from you. What did you love about it, and what do you wish you could do in it?

Thanks for reading, and stay curious!

Want to learn about future Freshly Squeezed games I am creating? Sign up for the GBGames Curiosities newsletter, and download the full color Player’s Guides to my existing and future games for free!