Go Tetris / Action Go, latest developments

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.

Action Go “in action”

Here’s a video demo of my latest project, Action Go, in progress. I’ve got all the code from Go-Tetris (the flash version) ported, and capture / territory counts are updating correctly. Now it just needs a bit of visual polish, a way to switch between game modes, a help / tutorial screen, and maybe some GameCenter leaderboards and achievements. There are a lot of other things on my wishlist, like score multipliers when you make more than one capture/territory at once (super easy), or one I just thought of today — a bonus/multiplier for when you clear all of one color or, better yet, the entire gameboard.

Anyway, here’s the video:

ActionGo – Quick and Dirty

I’m still trying to finish up Catchup, the board game conversion that I’ve been working on for literally about a year now. (Obviously not full-time.) But I decided the week before last to take a quick break from it and update DrawCade to support the new MFi controllers. That took me all of about three days, (the second update, version 2.1 that fixes some issues from the 2.0 update is now live, yay!) But most importantly, what I got out of those days was a wrapper that supports iCade style controllers (pretending to be bluetooth keyboards), as well as the new GCController style controllers. (The Moga Ace Power and Logitech Power Shell are the only two available at the time of this blog post, but the first Bluetooth one has also been announced, but is not yet available.)

Anyway, I promptly decided I MUST create a game that would use the new controllers. The obvious choice is to port Go Tetris to iOS. This has been on my TODO for a long time, calling it Action Go to match Action Chess, but the big holdup was that I have never been satisfied with touchscreen controls for Tetris. It can be done okay, but not great. I’ll of course have some “okay” controls in there, but now that there are some viable controller options, I’m super excited to get it playable, and decided it was worth putting Catchup off for a few weeks to do so.

I started the project a little over a week ago, and promptly spent a day getting some cool menu animations (using AGGeometryKit) in there. I made the following video:

Then I spent three days preparing some changes to my GDC speaker proposal. (Which still hasn’t been accepted, but also hasn’t — yet — been rejected.)

If we were counting today, this would be the 5th day I’ve worked on it. I’ve got the tetris aspects pretty much done, but the piece capturing and two-eye breaking aspects are not yet complete. That is the bulk of the code that needs to be “ported”, and consists of about 800 lines of ActionScript. I’m maybe an 8th of the way there. Ironically, I’ve got the touch-screen controls finished, but still need to shoehorn my shiny new controller class in there. I decided I wanted it to be playable first. I’m guessing it’ll be another week or so of work.