Steam Deck stuff
Backstory
In December 2025, I got my hands on the Steam Deck OLED edition. I was aware of its existence for a while but thought I wouldn't need it - I was fine with using my desktop and an Xbox controller, thought that its portability is overrated, and was not used to the screen being between the buttons.
Months later, this was the best purchase I made in a really long time - I spend most of my gaming time on the Deck and it acts as my gaming PC/laptop while traveling (since I opted out of having an actual laptop). Gaming on the Deck on the couch is much more relaxing than gaming on a PC, or at least I don't feel like I just finished a chore at the end of a session. I've gotten to the point where many games feel unnaturally large and spread out on my PC monitor.
Really looking forward to the upcoming Steam hardware.
SpongeBob
You came for a guide on running old SpongeBob PC games on the Deck, right? Cool.
My girlfriend and I both have fond(ish?), independently obtained memories of old THQ point-and-click SpongeBob games. So, I downloaded a copy of SpongeBob SquarePants: Employee of the Month so we could try it again.
The obvious first choice was to run it on her Windows 11 PC - of course, I couldn't even get the installer running. Guess where the installer did run? My Arch Linux (btw) system, as a non-Steam game running in Proton. It's genuinely funny how Wine managed to make a more backward-compatible Win32 API implementation than Microslop themselves.
Anyway - I installed the game, changed the Steam entry's "target" property to the game's executable, and got the "insert the disc to play" message box. To get around this, you need to open winecfg for the game's prefix and mount the installation CD within what the game considers to be its host Windows system. Here's how you do this word gibberish on a Steam Deck:
- Start Desktop Mode.
- In the Discover app store, install Protontricks.
- In the terminal (Konsole), run
flatpak run com.github.Matoking.protontricks. This should open the window that lists all Steam games that use Proton and, most importantly, their prefix IDs. Note down your game's prefix ID, then close the window. - Now run
flatpak run com.github.Matoking.protontricks 000000 winecfg, where000000is the game's prefix ID. - In the newly opened window, select the Drives tab, then add a new drive and point it to the folder where you unpacked the installer ISO.
- Click "Show Advanced" and set "Type" to "CD-ROM".
- OK!
I think that there are ways to both retrieve the game ID and launch winecfg for it without using Protontricks, but this is the setup that worked for me, for Employee of the Month and The Movie games. Outside of the Steam Deck, it should be easier to install Protontricks via the system's package manager and call it directly rather than via flatpak run.
Sonic Adventure 2
(Battle)
I previously played Sonic Adventure DX and Sonic Adventure 2 Battle on the Dolphin emulator on my back-then Windows PC. I got all emblems in SADX, the easier two-thirds of A-ranks in SA2B, and bred a 5-S-rank chao. I would also emulate Sonic Pinball Party on mGBA so I could use its Tiny Chao Garden to send my chao between SADX and SA2B - the primary reason why I decided to emulate rather than play PC versions on Steam. That, and the transparent Shiny Jewel Chao (more on that later).
I stopped playing after the remaining non-A-ranked levels in SA2B got too difficult for me. Some time later, I lost my save files while wiping the drive during an OS reinstall. Ouch!
A few weeks ago, I decided to try this whole thing again on the Deck. Turns out, it can handle GameCube emulation just fine, even at the increased internal resolution. However, I spent a lot of time playing a blurry mess before I realized I need to tick "Start in Fullscreen" in Dolphin settings to get a crispy image.
That's one thing I don't understand about SteamOS - if the game displays a window, SteamOS will stretch the window's bitmap to fit the screen, rather than resize the window to match the screen's resolution. There doesn't seem to be an option to resize the window. I guess this model works if all "windowed" windows are just brief settings dialogs where the quality doesn't matter, but it makes you spend some time figuring out why your emulator looks blurry (and since SteamOS hides or doesn't render the window's caption bar, you don't even realize that it's windowed under the hood).
It also doesn't seem to handle controller input for multiple open games at once - if I have mGBA running and I also launch Dolphin, mGBA loses all input and needs to be restarted.
Anyway - 2x GameCube's internal resolution perfectly matches Steam Deck's native resolution vertically. With Widescreen Hack, the emulator uses 16:9 out of 16:10 of available screen space, so the remaining horizontal space is easy to ignore.
Oh, and as I write this, I just finished getting all 180 emblems in SA2B! Grinding those A ranks is so much easier on the Deck. I remember thinking that Cannon's Core is impossible to complete without losing a life, let alone A-rank all 5 missions - look at me now. Now I'll be trying to breed a 5-S-rank homozygous-black-shiny-jewel chao.
But where do I get enough rings for the Shiny Black Egg and all those Heart Fruits?
Tiny Chao Garden
During my previous SA2B playthrough, I figured that the easiest and fastest way to farm rings is to automate the Chao Memory game in TCG. This culminated in ChaoMemorySolver, a C#/WinForms app that takes screenshots of the mGBA emulator, uses primitive image recognition to track hidden cards, and sends keystrokes to the emulator's window to solve the game. And by "primitive image recognition" I mean that it literally compares parts of the emulator window to the dumped sprites, and compares them pixel by pixel to determine if the sprite is there. I would use the same technique nearly 10 years ago to write a bot for an online sandbox called Growtopia - those were the days...
Anyway, this code wouldn't work on Linux for obvious reasons, and last time I checked, there's no similarly straightforward API to either take screenshots of a window or send input to it (at least on Wayland).
Back when I first wrote this WinForms tool, I had already spent some time looking for an alternative solution based on the game's memory - simply because the screenshot-based solution was incredibly fragile, so much that I couldn't leave it running overnight as it would either misdetect something, or Windows would show something on top of the mGBA window. Anyway - mGBA has a built-in GameBoy RAM viewer and value finder, so I figured where the game stores all card positions and the cursor position - but I couldn't access the GameBoy RAM from within the mGBA process's RAM (which would make things easier, since I have experience reading process memory), and mGBA's built-in "Scripting" option was so terribly documented that I wouldn't even bother to try it.
Being on Linux, out of other options, I was much more motivated to look into mGBA's scripting capabilities. It uses Lua, has a minimal scripting UI (a stripped-down version of the browser console window), and a modest scripting API doc. With enough trial and error, Lua cheat sheets and tutorials, and examples of other scripts for Pokemon games (seriously, those docs really lacked some samples), I threw together a script similar to the previous one: see gist. The result is much more reliable, faster (spamming buttons each frame) and portable - I can actually use this with mGBA running on a Steam Deck.
As I write this, I made 100k rings overnight to transfer to my SA2B save file, and 40k more for the fruit from the TCG shop (it's a faster way to level up Chao stats, and TCG can give ever-so-slightly more stats per level-up - thanks, Chao Island).
Now what
I'm thinking, keep trying to make that perfect transparent Chaos chao, and also try to emulate classic GTA games on PS2 and PSP emulators.