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.

go-tetris.com

Very minor release today (1.1). I just fixed the bug where you couldn’t press “M” when entering your name at the end of the game. (Because it took you to the main menu instead. Oops.)

I also registered Go-Tetris.com, which simply redirects to the game page for now. I’m thinking I’ll probably offload go-tetris onto it’s domain when I get some free cycles. I was going to do this today, but I forgot that I’m using chesstris’s database for the high scores, and I’m not sure if flash will transmit the high scores correctly across domains, so I’ll want to do some testing before I make that plunge.

Pending Versions and Open Development

Hello Everyone! I’m very close to releasing a new version. I’ve got eyes larger than one space working, but I want to make some progress on the phantom bug I’ve written about earlier before I post this new release.

I’m really just writing to let you all know that I haven’t disappeared completely off the face of the planet. Most of my free time lately has been taken up with wedding preparations. Those are coming along great, but unfortunately, that doesn’t leave a lot of free time for game development.

I’m curious if anyone reading this would be interested in helping with Go Tetris!? I’m considering releasing most of the code as open source, and wonder if there is interest. If that is you, let me know, thanks!

Thanks for your patience!

Bugsville

Here’s what “alpha” means to me: Not yet “feature complete”. Also, buggy.

I’ve spent nearly all afternoon trying to reproduce the “phantom stones” issue. Stones that appear, after a Living group is removed from the board, hanging in the middle of nowhere. When you try and set something down on them, it’s as if they’re not even there. Great fun.

I did finally reproduce it, and have some small amount of further information, but no idea why it happened in this particular instance and not the dozens of times I had captured living stones in the same game before.

Long story short, if you experience this particular bug, and you think you might know why, or how to reproduce it reliably, please leave a comment below.

Thanks!

Go Tetris! 0.8 Alpha

A couple of minor updates tonight.

  • You can now rotate counter-clockwise! (With the “u” key.)
  • Fixed that pesky bug where the last character of the score was cut off if you got more than 1,000,000 points.

Thanks to stillflame for the comment about how to implement the “rotate left”. It’s a bit of a hack, because all the spaces for all three right rotations have to be empty for it to work… so there might be some weird behavior if you’re rotating at the last minute, but it’ll have to do for now.

For that matter, thanks to everyone who has left comments!!! I love hearing everyone’s thoughts and suggestions.

My next feature will be either a high score list, (with “submit your name” functionality), or possibly expanding the number of empty spaces that can be considered for an eye. I know how I’m going to implement that one, but it’s still going to take me an afternoon or two. That means I probably won’t get to it until I have a good solid day to spend.

Thanks for playing!

Go Tetris! 0.7 Alpha released!

Well, it’s taken me long enough, but I’ve finally finished the “two eyes” feature. It’s a big one, and one that I think really changes the gameplay. The only other change is that it now takes MUCH longer to go up a level. The next level is now reached when your total captures and total “living” stone captures equal LEVEL x LEVEL x 10. So to get to the second level, you only need ten captures, but for the second you need 40, and third you need 90. This means the game will get harder only very slowly, especially for new players.

I also added a check for those pesky “floating” stones that were basically hanging in mid-air all by themselves. Unfortunately, it’s much harder to check for groups of hanging stones, so those could still occur in the right circumstances.

I do think the new gameplay is very forgiving, and should make for a less stressful experience overall. More time for strategy and thinking!

A forthcoming post will explain how to make captures with two-eye groups.