Just today I discovered how easy it would be to make Go Tetris! (my first video game, written in Flash) playable again on this website. (It required exactly one line of javascript, to include the awesome open-source library Ruffle!)
So that’s the big news: that you can just follow the link in the nav here, and play the game again. Woo-hoo! But then I thought I’d take this opportunity to talk about a few of the ways I’ve worked on making the game playable again over the many years since I wrote it initially.
First of all, worth noting that I think of the game now as “Action Go”. This is because my immediate next project (my second video game) following Go Tetris was called Action Chess. Originally it was called Chesstris (the name of this website) but I renamed it Action Chess to be less of a target for The Tetris Holding Company, which at the time had just had a high-profile lawsuit over an app in the iOS App Store called Tris.
So I’ve been thinking of “Go Tetris” as “Action Go” (for consistency) for a long time. I realized just now that I’ve got two website categories for blog posts here related to this game. I’m going to try and see what I can do about that.
Anyway, every project to remake Go Tetris has used the name Action Go. As near as I can remember, there have been three such projects:
The first remake was a native project for Apple platforms. You can watch a video of this version in a blog post from 11 years ago – back in 2014! That was before I started using Swift, so it was written in Objective-C. I remember at some point while I was working on it Apple announced the Apple TV as a development platform, so the project actually includes an AppleTV target, and I remember playtesting it with the little touchpad on the end of the AppleTV remote control. I remember this version as pretty short-lived, but I was definitely happy about how quickly porting the original ActionScript to Objective-C went. (IIRC, it only took an afternoon or two.) All the drawing was just flat color primitives, (much like the Flash version), which I actually think looked pretty good, but I abandoned that for the next version.
You might argue that I should probably have polished that version up and released it, but instead I decided the game deserved “true cross-platform”, and began remaking it in Unity. Again, getting the game playable was not the hard part. This would probably have been sometime around 2015, when I got “serious” about making games in Unity (mostly so I could make stuff for VR).
The Unity version got pretty far along! All the existing game modes were implemented, and where I got hung-up was on menus and all the boring stuff that a “real” game release requires. I’d commissioned some artwork from “Quantum” Bill Nagel, and the game even had a single (but really nice) music loop by Dev Jana. (We were talking about doing some more complicated stem-based music stuff as well, but if I got any of that stuff from Dev, I don’t think I ever got around to implementing it. Sorry Dev!)
I also remember that I wrote some code for two-player split-screen multiplayer! IIRC, it was mostly working, but there were some timing bugs related to when the garbage fell on your opponent. I couldn’t quite get it working before showing the game at Minnebar one year. (It may have also been shown at other local conventions too, but I can’t quite remember.) I still have a binary that opens just fine and plays the game, but somehow the menus don’t show up at all, even though they were at least passably working way back then.
Eventually, I stopped working on the Unity version of the project, and I don’t know if it was mostly because I stopped working in Unity entirely, or if I just got distracted by other projects.
Finally, toward the end of 2023, I became pretty focused (in my “game development” time) on porting the project to the Swift programming language. This was really just one aspect of a concerted effort on my part to find some way to write cross-platform games in Swift. (An effort I haven’t wholly abandoned, but am not actively working on at the moment.)
I was trying to write it to be as framework-agnostic as possible, but of course as soon as you want to render anything to the screen, you’ll need to talk to some kind of drawing API. I settled on a project called GateEngine. While GateEngine is open source, it’s written and maintained by just one developer, and I would say that it hasn’t gained the traction or maturity to where I would call it “usable” just yet. I did document some of my experiments in a thread on the Swift.org forums, (where the GateEngine developer was also active).
Finally, (and this is not directly related to Go Tetris), one last note is that I’ve been working on another Tetris -inspired game, this time in Godot. It’s been a couple of months since I’ve opened the project, truth be told, but I ported just the Swift Tetromino code (which exists in this Github repository) to Godot, and then even did some work to enhance it. Who knows when, or even if, that project will see the light of day.
In the mean time, please enjoy the original Flash version of Go Tetris once again.