Categories
Game Design Game Development Geek / Technical

Freshly Squeezed Progress Report: New Title Screen

Now that I have finished updating all of my projects to use SDL3, I can focus my efforts on the Major Update(tm) for my strategic leaf-raking business simulation game, Toytles: Leaf Raking.

I started with a new logo and title screen.

Sprint 2026-MJ_18: Update logo

Complete:

  • Create new title screen logo
  • Update title screen background

Since it was first released in 2016, the title screen has basically looked like this:

Toytles: Leaf Raking - old title screen

It was just a simple text title, with some very pixelated imagery on a simple grass background and some weird looking leaf sprites.

When I was originally developing the game, I remember deciding NOT spend too much time on trying to make the art look good. I am not an artist by trade, and while my programmer art is potentially better than most, it’s still programmer art, and I knew from past projects that I can spend a lot of time polishing something and still end up with an ugly result. At least if I was quick about it, I could be more likely to actually finish the game.

The end result isn’t pretty, but it’s kinda got its own charm. I hope, anyway?

But for the upcoming 10 year anniversary of this project, I think it is time for a facelift. Here’s the latest version of the title screen:

Toytles: Leaf Raking - new title screen with new logo

I made the new logo using Inkscape. Since I always intended for there to be a series of Toytles games, this logo can be reused for future projects. Toytles: Snow Shoveling? Toytles: Lemonade Stand? Toytles: Go-Kart Racing? There’s a lot of potential.

I decided to replace the leaves with something that looks better. After looking into creating something more stylized, I ended up taking a picture of some leaves of the maple tree in my backyard, then using one of them as the model that I traced.

I also created a new rake sprite, but I decided to hold off on putting it on the title screen until I had more screen real estate, which required changing the menu.

I ended the week working on updating the buttons. The existing buttons are basically static images that I created by using a rounded rectangle inside of another rounded rectangle. I can use better, more button-looking buttons that animate.

I also plan to rearrange the buttons so that there are fewer options to choose from, and some of these buttons could be on a submenu.

And with submenus, I can add new backgrounds. And transitions. And better fonts for the buttons and blocks of text.

I am quickly finding that even simple improvements bring a cascade of changes, many of which I anticipated, but some of which I didn’t realize would feel so necessary rather than be considered a separate nice-to-have.

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
Politics/Government

I Wish I Was More Excited about the World Cup

If you know me, you know I like soccer, and that specifically I’m a fan of the United States Men’s National Team.

I have been since the 1994 World Cup, when the tournament was hosted in the United States for the first time.

And so you’d think that I’d be anticipating the return of the World Cup finals to the United States, which starts today, but I think the current state of American politics makes it hard to be anything but embarrassed as the entire world turns their attention here and visits a country that is quite a bit less free than it should be.

Before the summer of 1994, I actually didn’t care much about soccer. Soccer was the thing my father watched on Sundays when RAI would broadcast Serie A games, and it prevented me from watching cartoons.

But in 1994, I learned two things:

  1. The United States was an underdog in the tournament, and I love an underdog story.
  2. The United States had just barely gotten into the 2nd round and was going to play tournament favorite Brazil on July 4th, America’s birthday.

And for over 70 minutes, I watched a scrappy, determined underdog hold its own against eventual tournament winners. I remember when the broadcast cut to the stadium in Rio de Janeiro and the energy there was deflated because Brazil just couldn’t score against what was supposed to be an easy opponent. I remember when Tab Ramos took an elbow to the head and had to leave the game due to an injury, when Alexi Lalas wouldn’t let an opponent dribble past him and then threw his arms up in the air in victory, when it felt like Earnie Stewart almost did the impossible to get the US into the lead, when the entire US team stood in front of the goal to stop a direct kick, and when Tony Meola cried after the final whistle blew.

My family may have been behind Italy, but I found myself becoming a fan of the United States in a sport that I surprisingly enjoyed.

That next year I signed up for a rec league, and then in high school I played all four years. I remember being disappointed in the US team’s 1998 run in the next tournament, one in which I had high hopes. I remember going to see the Chicago Fire when they started playing at Soldier Field in their first year in the new MLS (“Chicago Fire and Crisco Oil, a winning combination” was my favorite announcement over the speakers). Seeing DaMarcus Beasley play for the Fire and then for the US team was inspiring.

All this time, I was also watching the US team in the Gold Cup and learning about the strong rivalry with Mexico. I was also learning about Project 2010, the US Soccer Federation’s plans to make the US team a serious contender by the 2010 tournament.

When I was in college, the 2002 World Cup tournament was in Japan and South Korea, and I watched the US make it to the quarter-finals after upsetting Portugal and then fall to Germany. I also really enjoyed watching Senegal that tournament. I understand that they declared a national holiday for their upset over France in the group stages.

I joined a rec league again, and other than getting an very early hamstring injury (make sure to stretch, kids!), I found myself enjoying life partly because I was making soccer a priority in it.

But things go in cycles, and in 2006 the US was once again eliminated in the group stages. I think this may have been one of the first times I’ve seen just how rough a USA vs ITA game can be.

And then there was the 2009 Confederations Cup. The United States was there due to being the Gold Cup champions, and they had to play Brazil, Italy, and Egypt in the group stages, and after two bad losses to Brazil and Italy, it didn’t look good, but Italy lost to Egypt whereas the US won their game by quite a few goals and so the tie-breakers worked out that the US advanced to play against Spain while Italy went home.

Spain at this point was #1 in the world and on a 35-game winning streak. I remember watching a quick interview in which US coach Bob Bradley was asked about their chances, and he had a smirk and said something along the lines of, “We know how to beat them.”

Then I watched the most amazing and coordinated defensive effort stymie the best team in the world, and the US felled Spain 2-0 and was in the finals of a FIFA tournament for the first time ever.

I remember when that game against Brazil started that my heart was racing. It feels ridiculous to type those words, because I was watching on TV at home. It wasn’t like I was there, and it wasn’t like I was playing. But then we were up 2-0 over Brazil, and it felt like we were finally going to get some redemption from 1994 and from the start of this tournament, another upset, until they came back with three goals to win. It was probably the first time I saw how disappointing it can be to come in 2nd.

The 2010 tournament was the first one I tried to watch all the games, and I remember watching Switzerland beat Spain 1-0 by playing what looked to me the exact same defensive performance that the US had the year prior, and then learned that the Swiss coach had actually studied the US vs Spain upset in preparations. Neat! The US losing to Ghana in the 2nd round? Less so.

The qualifying matches leading up to the 2018 tournament were heartbreaking. The US not qualifying for the tournament in Russia kinda meant that the World Cup was basically over for me. I can’t even remember that one well.

2022 was alright, and the US played England again, but the hype wasn’t as big as the 2010 matchup, and I don’t recall the scoreless draw was very exciting. Losing to the Netherlands in the 2nd round was disappointing, but I remember watching it with friends.

So here we are, it’s 2026, the US team is supposedly one of the best we’ve ever fielded, and we’re got the tournament in our own backyard. I clearly love watching the team, reading about the nuance of strategy and tactics, and again, I love the underdog story of a US team actually pulling off an upset in a sport that doesn’t even rank in the top five sports of this country.

But the United States I grew up in and learned about, the mythology and stories I internalized, isn’t the United States I know today.

Today we have Project 2025, we have billionaires with way too much influence pushing through policies that hurt everyone else, we have hateful and violent policies against immigrants and trans people, and we have so many attempts at trying to prevent people from being able to vote, the one action that is such a symbol of what we can do and be.

In a time when we should be aspirational and leading the world in science and technology, healthcare and education, and peace and stability, instead we’re becoming antagonistic and distrustful.

We’ve destroyed the very systems that made us such a powerhouse of research and development, and instead we exchanged it for an expansion of prison camps and the pollution of our drinking water. What an own goal!

We have a President who wants to pretend to be Mussolini. It is disturbing to see his large scowling face draped on walls and buildings. My wife recently went to visit a friend in Washingon D.C. and noted that they still have military officers doing patrols. And this is supposed to be the United States?

Hearing about when FIFA presenting a “peace” prize to this President was especially disgusting, especially in light of the January 6th coup attempt, and especially now with the ridiculously incompetent management of relations in the Middle East.

I think in the past, I could enjoy international soccer, and periodically wonder about the participation of countries like North Korea in prestigious tournaments. Rivalries were on the pitch, but otherwise politics and corruption was more or less separate or at least background context.

But now it feels like I need to worry about my own country’s relationship with everyone else. How are visitors faring? How many people decided not to come watch the biggest tournament in the world because of fears of how the United States, of all countries, might treat them at the border? How did we go from being a supposed beacon of freedom in the world to being the kind of country that other countries give travel advisories about? Why is Amnesty International talking about concerns for human rights during this tournament?

Being a United States soccer fan and having the tournament here again should be so much more enjoyable than it is, but I can’t pretend that I’m not disappointed in how much far-right politics is marring things in a way that seems to purposefully mirror what was happening in Europe almost 100 years ago.

I really wish I could divorce the politics from the sport and from this tournament in particular, but I don’t know how.

Categories
Game Design Game Development Geek / Technical

Freshly Squeezed Progress Report: Clown Alley Creator SDL3 Update

In my previous report, I finished updating Toy Factory Fixer from SDL2 to SDL3, and then I started working on updating my family-friendly creativity tool that allows you to create your own fun and zany clowns, Clown Alley Creator.

It went fairly smoothly.

Sprints 2026-1 and 2026-2: Release SDL3 update version

Complete:

  • Ensure Android version can still be built/deployed
  • Ensure iOS version can still be built/deployed
  • Ensure Windows version can still be built/deployed
  • Ensure Linux version can still be built/deployed
  • Ensure Mac version can still be built/deployed

Clown Alley Creator - feature graphic

Clown Alley Creator and Toy Factory Fixer actually share a lot of the same infrastructure code, so other than finding a few differences, such as Clown Alley Creator needing to load different types of resources, and changing how it handled something needlessly differently, I had a smooth update.

I was able to build a release for Windows, Linux, and Mac, and I submitted the iOS and Android releases to the app stores for review.

The only tricky part was once again getting surprised that my automated scripts for building a release for certain platforms wasn’t working as expected, and I had to troubleshoot and find out why the Windows version wasn’t building correctly for Toy Factory Fixer and Toytles: Leaf Raking anymore. It was really bizarre, but it shows why it is important to have reproducible builds.

Now that the SDL3 updates are finished for all three of my projects, I can get back to working on Toytles: Leaf Raking’s Major Update ™ again. I finished the week by starting to work on the new title screen logo.

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: Finishing Toy Factory Fixer SDL3 Update

Last time, I reported that I was working on the SDL3 update for Toy Factory Fixer, my toy factory management game in which you hire and manage workers in order to ship toys by the deadline.

Aside from adding some new functionality to handle music differently, most of the porting effort was straightforward.

Sprints 2026-1 and 2026-2: Release SDL3 update version

Complete:

  • Ensure Android version can still be built/deployed
  • Ensure iOS version can still be built/deployed
  • Ensure Windows version can still be built/deployed
  • Ensure Linux version can still be built/deployed
  • Ensure Mac version can still be built/deployed

Toy Factory Fixer

SDL3_mixer works completely differently from SDL2_mixer, which meant my code needed to work completely differently, too.

Once I made changes so that I could play and stop music and change the gain on any given track easily, I then just needed to make sure that the audio was playing the same as before. I was able to play the old version of Toy Factory Fixer in one window and the new version in another, and it helped me determine when something wasn’t playing (it turned out I had a typo and named the wrong sound effect in one place) or was too loud.

Otherwise, I was able to quickly create a release for Windows, Mac, Linux, Android, and iOS, and I submitted the games for review to the respective app stores.

Next up is my family-friendly creativity tool that allows you to create your own fun and zany clowns, Clown Alley Creator, which I anticipate taking even less time to update to SDL3.

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: Toy Factory Fixer SDL3 Update Work

In my previous report, I was finalizing the SDL3 update for the iOS port of my strategic leaf-raking business simulation game, Toytles: Leaf Raking.

This past week, I resubmitted it for review and started working on the SDL3 update for Toy Factory Fixer, my toy factory management game in which you hire and manage workers in order to ship toys by the deadline.

Sprint 2026-MJ_16: Release SDL3 update version

Complete:

  • Ensure iOS version can still be built/deployed

Toy Factory Fixer

While I waited for the App Store to review and approve the newest release of Toytles: Leaf Raking, I started updating my first Freshly Squeezed Entertainment project to use SDL3 as well. Since I already did much of the work of figuring out what I needed to do to upgrade Toytles: Leaf Raking to use SDL3, I was able to get many of the updates completed quite quickly.

In fact, I was surprised at how quickly I was able to get the game running with the new libraries.

The only thing that didn’t quite match was the music. Since my SDL3 update also involved updating the audio library SDL3_mixer, and since SDL3_mixer was a complete overhaul from SDL2_mixer, my own code needed to change quite a bit to handle audio differently.

And Toytles: Leaf Raking only has sound effects (for now), but Toy Factory Fixer has music.

And it wasn’t playing music quite right, partly due to how music is no longer a special piece of functionality that works on a single channel and is now just treated as generic audio on potentially multiple tracks.

Basically I need to add some code to stop playing one music track and start playing another when it transitions from menus to in-game and back again, and I almost had this work finished by the end of the week, so I expect that once I do, it will just be a matter of creating a new release for each platform the game is available on, and I expect I’ll be able to do so before the end of the week.

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: iOS SDL3 Porting Struggles, Part 3

Last time, I reported that I was still automating the SDL3 update build for the iOS port of my strategic leaf-raking business simulation game, Toytles: Leaf Raking.

I made good progress, but even though I thought I was done, it turns out that I’m not finished yet.

Sprint 2026-MJ_15: Release SDL3 update version

In progress:

  • Ensure iOS version can still be built/deployed

Toytles: Leaf Raking

My project’s build scripts can now load the .xcframework for Apple-based builds or normal libraries for every other port.

To get there, I learned a bit more about CMake and even cleaned up my own build scripts based on that new understanding.

I was able to successfully build the app more or less automatically and run it in the iPhone simulator.

Then I went to submit the app to the App Store. First, I click on Validate in Xcode, which I will confess to not exactly understanding what kind of validation it does, but I figure that if it passes here, then I don’t need to worry about the kinds of things it checks for.

Unfortunately, it seems quite limited, and so as soon as I submitted the app for review to the App Store, I had an email that told me I had a few things that needed to be corrected that I have never run into before.

Basically, since SDL3 has code that lets you access Bluetooth, the camera, and the mic, Apple detects this and thinks you need to have usage description entries in your app’s Info.plist to explain to your players what you need such access for, even if your app doesn’t use that functionality.

NSBluetoothPeripheralUsageDescription, NSCameraUsageDescription, and NSBluetoothAlwaysUsageDescription were flagged in the email I received, but I also addressed the mic with NSMicrophoneUsageDescription. I use variables for the project title because my Info.plist gets generated by my build scripts:


<string>${GB_PROJECT_TITLE} would like to use Bluetooth controllers for input.</string>
<key>NSBluetoothAlwaysUsageDescription</key>
<string>${GB_PROJECT_TITLE} would like to use Bluetooth controllers for input.</string>
<key>NSCameraUsageDescription</key>
<string>${GB_PROJECT_TITLE} does not use the camera.</string>
<key>NSMicrophoneUsageDescription</key>
<string>${GB_PROJECT_TITLE} does not use the microphone.</string>

I confirmed the right project name showed up by looking at the Info.plist file that was generated and at what Xcode showed, and I submitted the app again.

This time, it successfully kicked off a review, but unfortunately on Saturday it was rejected because the app crashed on startup.

So, that’s not good, and it shows that I should have tested it on my own hardware before submitting it. I now have to figure out why it is crashing in the first place, then fix it so that it doesn’t.

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: iOS SDL3 Porting Struggles, Part 2

In my previous report, I said that I was working on the SDL3 iOS port of my strategic leaf-raking business simulation game, Toytles: Leaf Raking.

I am sorta finished, but why am I still working on it?

Sprint 2026-MJ_14: Release SDL3 update version

In progress:

  • Ensure iOS version can still be built/deployed

Toytles: Leaf Raking

How am I “sorta finished” with the iOS port?

I mean that I was able to successfully build the app and run it in an iPhone simulator.

Normally, I would just move on to building the app and testing it on my actual iPhone and iPad test devices.

But my goal isn’t to just manually build this app and submit it to the App Store and move on.

I currently have three different games that I support across Windows, Mac, Linux, Android, and iOS. I’ve been trying to automate my builds as much as I can to make it easier for me to support these existing games and support the new ones I will be making for hopefully many years to come.

If I had to manually fight with Xcode each time that I wanted to create a new release of any one game, it would be error-prone and a waste of my time. Each release would be painful, and I would do it less often.

Now you could argue that I’ve spent too many days on this work as it is, that I’m already wasting time.

To that I would say that maybe I agree with you, that I do feel like this effort is taking too long. I am really behind on my plans due to all of this automation work I’ve been investing my time into.

So if anything, I’ll admit that I’m worried I am justifying all this effort and time when instead I should be moving more quickly.

My plans are basically on hold until I get these new releases finished, and the releases are on hold until I can automate their creation as much as I can. And maybe I’m wrong to do so?

But on the other hand, I’ve been living this manual build and release life for years, and I think I’m finally willing to put in the hard work to make my life easier.

If I have any concerns, I think it is that I so easily let myself keep working on a task long after the time I thought it was going to take, and I feel like I should be a bit more deliberate about actually deciding how to proceed.

Anyway, I fully expect that I’ll finally have this work actually automated soon. Basically, my build scripts need to be changed to do this one-off wacky thing involving supporting Apple xcframeworks for my iOS port, while pretty much all of my other ports do not have to worry about 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: iOS SDL3 Porting Struggles

Last time, I reported that I was working on the SDL3 mobile ports of my strategic leaf-raking business simulation game, Toytles: Leaf Raking.

I continued to fight with the Apple ecosystem to create my iOS port.

Sprint 2026-MJ_13: Release SDL3 update version

In progress:

  • Ensure iOS version can still be built/deployed

Toytles: Leaf Raking

I am so close. Every SDL2 to SDL3 update for each platform I support is finished except for iOS.

I ended up looking at the script libSDL3 uses to build its Universal library, and it is TOO Universal! It combines everything: Mac, iOS, visionOS, tvOS, and watchOS.

I don’t need all that, so instead I adapted my own library build scripts to create my own Universal libraries to support just iOS, and I did the same for SDL3_image, SDL3_mixer, and SDL3_ttf.

Now I have a few .xcframeworks that I can use to build my app and have it run in the simulator or on an actual hardware device. That’s a lot nicer than having separate builds like I used to with SDL2.

But to get there involved a lot of false starts, such as installing needed things like the Metal toolchain and deciding not to include the debug symbols because I would get errors that they weren’t valid debug symbols.

Next was updating my own application’s build process. I used to have static libraries for SDL2, but now that I have dynamic SDL3 libraries, I need to be able to not only build my app with those libraries but also run the app by pointing to those libraries when they are embedded in the app.

I ran out of time last week, but once again I am making slow and steady progress.

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: Mobile Ports Are Mobilizing

In my previous report, I finished working on the Mac port of my strategic leaf-raking business simulation game, Toytles: Leaf Raking, and then I proceeded to work on the Android port.

I finished the Android work relatively quickly and started working on the iOS port by the end of the week.

Sprint 2026-MJ_12: Release SDL3 update version

Completed

  • Ensure Android version can still be built/deployed

In progress:

  • Ensure iOS version can still be built/deployed

Toytles: Leaf Raking

As I said last time, I had an Android port that was almost finished. I basically needed to test it out manually on my phone to make sure it worked correctly, then I created a bundle and submitted it to Google Play for review.

Then I spent the bulk of the week figuring out what I needed to change to get SDL3 libraries built for iOS. The documentation for SDL3 has suggestions for how to incorporate the library as a subdirectory or submodule of my project, but I would rather build the libraries separately, especially as I will be using these libraries in each of my apps. I should need to build the library for each one.

I had a script that basically built static SDL2 libraries that I incorporated into my app, but the downside was that I needed to build one set of libraries for an app for the iOS simulator to test in and a completely different set of libraries for an app for testing on an actual iPhone or iPad.

Apple allows you to create Universal libraries, but ever since the development of Silicon-based Macs, you couldn’t make assumptions that x86_64 was for the simulator and arm64 was for the iOS hardware.

However, apparently SDL3 allows you to create a very Universal .xcframework. That’s great, except I ran into trouble building it, both on my Intel-based Mac and the Mac in Cloud M2-based Mac, although for different reasons.

I was able to use my old Intel-based Mac Mini to work on the Mac port, but I ultimately ran into a problem in which SDL3 uses and expects newer iOS SDKs than my obsolete machine supports. And on the newer Mac, I ran into problems because it was depending on SDKs for platforms I don’t care about and don’t want to bother with, like visionOS or watchOS.

I will need to do most of my work with Mac in Cloud, unless I get myself a Silicon-based Mac. Either way, I’ll figure it out and hope that the SDL3 port for iOS doesn’t take too much longer.

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: A Mac Port, Finally

Last time, I reported that I was fighting with Apple’s development ecosystem to automate the creation of a Mac port of my strategic leaf-raking business simulation game, Toytles: Leaf Raking

In the end, I wasn’t able to completely automate the creation of the Mac application, but my scripts do a lot more than they used to so I can spend as little time in Xcode as I can.

Sprints 2026-MJ_8, 2026-MJ_9, 2026-MJ_10, and 2026-MJ_11: Release SDL3 update version

Completed

  • Ensure Mac version can still be built/deployed

In progress:

  • Ensure Android version can still be built/deployed

Toytles: Leaf Raking

My apologies if you aren’t interested in the technical, behind-the-scenes work, but this post is going to be a somewhat technical, behind-the-scenes post.

My goal was to automate the creation of a Mac version of the game and get it published on itch.io as quickly as I could.

I already have a deployment script that works for Windows and Linux, so adding the Mac port wasn’t difficult.

But I first needed the Mac port.

I was already using CMake to create an Xcode project. As much as possible, I tried to get my CMake configuration and scripts to create an Xcode project that had as much configured as possible. A long time ago I used to manually copy in my resources directory, which holds all of the images and audio files that I use in the game, but eventually I got the configuration to do that for me automatically. Similarly, I got my account/team information tied in so I didn’t have to manually specify that I wanted to use my account for code signing the project.

I still had issues with other things being a manual effort, though, such as creating a Universal binary, which can run on older Intel-based machines as well as the new Silicon-based ones. Last time, I had to create a set of SDL2 libraries on my Intel-based MacMini and another set using Mac in Cloud, then use something like lipo to combine them together into a “fat” binary, then build my project in Xcode using those fat libraries and making sure to configure the project to also be a Universal build.

But now my build scripts can create SDL3 libraries that are Universal binaries, and I can create a Universal app that I can test easily once the build is finished.

Unfortunately, I struggled to automate code-signing and notarizing. Between Apple’s documentation strongly encouraging using their GUI-based Xcode, rarely mentioning their xcodebuild CLI tools, and needing to dig deeply into the details of certificates and provisioning, something that Xcode’s manual effort handles automatically, I decided I had been working on this automation work for way too long and to cut my losses.

I made progress. I can create Universal libraries and a Universal app automatically, so I can quickly go from nothing to a program I can run and playtest. I can confirm that everything works, that it has the right permissions, and is packaged together properly. Archiving, notarizing, and exporting are relatively quick manual steps, and then I am finished and can upload my new Mac app to itch.io.

Next up was the Android build.

It was fairly straightforward to update my project’s build scripts. SDL3 provides an android-project directory, which I copy into my project, and then use CMake/configure to update files based on my project’s details.

I ran into problems running it, however. It seemed to keep crashing when launching the game.

Ultimately it came down to having an older version of SDL3. There was a mismatch between the android-project’s Java code and the C code related to SDLControllerManager, and it took me awhile to find it, but the discrepancy was already addressed in the latest SDL3 version. Once I grabbed the latest SDL3 and built it with my project, it finally ran successfully.

Then I had to update how touch presses were handled, which I think was potentially due to the high DPI of mobile devices. Basically, SDL3 touch events are scaled from 0.0 to 1.0, and I would multiply it by the screen width and height that I requested in order to identify where on the screen the touch event occurred.

But in high DPI mode, if you use SDL_ConvertEventToRenderCoordinates(), it scales to the screen width/height already. So I was basically taking an event’s coordinates and multiplying them by the dimensions of the screen a second time, which made it seem like the inputs were happening way, way offscreen. No wonder it seemed like input wasn’t working right!

So I ended the week pretty close to having a new Android version ready, but I wanted to test it some more to ensure that there weren’t any other quirks or surprises. Then I’ll work on the iOS version.

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!