(I don’t know if I’m warping terminology by calling this a post-mortem, but since the project is dead it seems appropriate.)
Quadrix is a game concept I came up with last year. It was inspired by Jesper Juul’s writeup on the history of tile-matching games. At the time, I was playing a lot of Planet Puzzle League on the DS as well as digging deeper into the casual games world. Seeing the family tree in Juul’s essay made me reflect on how Tetris has this obscure but substantial place in the history of matching tile games. Despite this, the emphasis on spatial geometry in Tetris hasn’t exactly mapped to tile-matching games, or at least not in the same way. Rather than looking for shapes to fill gaps, the tile-matching player is scanning for colors to bring together.
So when I was looking for a “quick” game concept I could use to get my feet wet in Flash game development, I decided to try to create a new branch in the family tree. Quadrix’s goal was to combine the four-block shape emphasis of Tetris with the color-matching emphasis of more recent tile-matching games.
Use the mouse cursor to swap two blocks horizontally. When a change occurs, the game looks for tetromino shapes that have been formed of the same color, checking for any instances of one tetromino configuration before looking for another. eg. All possible L-shapes get cleared before any four-in-a-row shapes are recognized. The screen begins and is kept filled with blocks, with new blocks dropping down as others are cleared. (I didn’t decide on end-game or scoring yet; my intention was to play with the prototype and experiment with those rules.)
I got a semi-working version of this concept up and running; it’s slow, it’s a bit buggy, and as with the above rules it doesn’t have a proper scoring mechanism or end goal. But disclaimers aside, you can take a look at it here:
What went wrong
1) Weird design goals. Conceptually, my goal was to create an experience in the player of scanning for tetrominos, gaining a natural familiarity with them and pushing their geometric pattern-matching. In a sense this was my attempt to give some “props” back to Tetris from within the world of tile-matching games. While this sort of worked in my own mind as I tested it, initial responses from others who weren’t already in that mindset were that this was simply matching four of a color instead of three – in other words, it felt completely derivative.
I did have some ideas on how to better convey the tetromino focus through presentation and animation, as well as in the scoring. My thought for scoring was to give fewer points for easily-created tetrominos, and more points for the rarer ones. Animations in the scoring window on the side would highlight the prioritization in a simple way – eg. by illustrating the shapes and lighting them up in a fast sequence as the game scanned for matches. However, I couldn’t convince myself that this would overcome the real problem of the game’s core mechanic simply not feeling unique enough.
2) Coding and production time. This was supposed to be my “quick” project to get me kick-started before I put time into a different project. Unfortunately, what I didn’t account for was that matching tetrominos in arbitrary configurations within a grid of blocks is actually a little trickier to program than a simple check for a filled row or three-in-a-row. And because I was fixated on emphasizing tetrominos, I couldn’t simply match any group of blocks of size four or greater. And even worse, if I wanted to score specific shapes differently and prioritize how they were cleared, I couldn’t just check for any arbitrary match of four connected shapes!
These problems did all get solved, but the code tended towards being over-engineered and it took much longer than I had intended. By the time I had it working, I felt like I had committed too much time to simply throw the idea away if it didn’t work. This added more indecision to how I budgeted my time, which was the last thing I needed.
What went right!
1) It succeeded in giving me practice in Flash coding. The game would still need to be optimized for speed, and some bugs to fix, but from a coding perspective this was largely a success. I got past a few hurdles and made it work. I also learned a lot about my own coding style – I tend to over-engineer if I’m lost, which is something for me to keep an eye out for in the future. I spent some time after this project playing with much less code-ambitious Flash toys and forced myself to use as little overhead as possible, just to get a feel for quick, light hacking in Flash. Hopefully this’ll help me choose the right balance between formal OOP and “throw code on Movie Clip instances” in the future.
2) Deciding to stop. No, seriously. I could have kept pushing at this and trying to force it to be fun and wasted much more of my time than I did. This was a good exercise in the somewhat painful task of dropping a project when the prototype is indicating that the core gameplay isn’t really there.
3) Finding an art style I could handle. I’m studying art, but I’m much more comfortable with technical media (photography, code) than I am with drawing. Despite this, I was determined to come up with something that at least had a coherent visual style. I’m happy with the vector-based, hand-drawn look that was emerging. Of course, I dodged the real challenge by stopping before trying to integrate a background image and a more complete visual theme. But “clean, simple, and cute” was a good combination.
Hopefully this can be a learning experience for others; it definitely was one for me. Good game design is an experimental art, and learning from “failures” is part of the process.
I still maintain all rights to the game as it stands, naturally. There’s still a part of me that wishes this design could get somewhere useful and be fun, so if you think it’s worth revisiting, don’t just steal this .swf or clone it – talk to me! There’s no sense in others duplicating my effort, and if someone wants to make use of this prototype to create a finished game I’m very willing to sign up for a deal that’s fair to all parties.