Popular Posts

Monday, July 4, 2011

State of the Nullpo: Volume I

I know some of you might be wondering what this is all about.

NullpoMino 7.5 is a pretty good piece of software on the outside, I think. It might be a little hard to use, but it's fairly functional and packs in just about every feature that anyone would want. We have a really robust engine that can accomodate just about any game of Tetris your mind craves for. So what's the point of all this? What's the point of taking NullpoMino from scratch to a full game once again if we're not going to get much out of it? Aren't there enough features already?

Simply put, no.

There are a lot of things that we can improve upon and make better, and a lot of features that are still left to include. But even if we'd accomodated most of Tetris, we still have all the other gametypes to think about, and then on top of that, we have to ask the question... is playing Tetris in the dark the only thing we want from NullpoMino?

That was the driving force behind the original introduction of netplay in NullpoMino 6.5. We'd included most of the single-player content we could think of doing or had the resources to do at the moment, so what was the next area to expand into? Obviously, Nullpo was going to become big in the multiplayer area as well. So, Noname put together functional (though somewhat kludgey, but not terribly so) netplay functionality, and with that NullpoMino was introduced to Hard Drop and its constituency and purpose took a hard swerve.

However, it soon became difficult to do much. Adding features to netplay often involved changing things in a bunch of areas, and it was non-trivial to add new modes to netplay. Converting single-player modes to be netplay-ready was a tedious process as well. Not only that, but there was controversy over the nature of rated games and whether or not it should be controlled by rule lock or something else. Players often found the room creation to be far too in-depth. Some of these concerns were mitigated, and Nullpo is a pretty viable platform for multiplayer right now.

But that's enough of a history lesson. Nullpo is missing something, and this is what Nullpo 8 seeks to fix.

Certain things were difficult to change before because of the design of Nullpo 7 and prior. The rendering code wasn't designed well, for example. As a result, we had issues changing the GUI of the game, because we would often have to change it in three different places. We tended not to touch the GUI because of this. In Nullpo 8, this is not an issue, because you can "plug in" a different graphical toolkit, so to speak, by binding some functions and objects. If you bound it correctly, it will look the same as the others, and you didn't have to muck around with any of the drawing code directly. This is a huge improvement.

However, other parts of the game were not designed up to par in the last iteration. One issue is that it is very difficult to do anything that takes effect across multiple areas of the game. It took a hacky fix to allow people to change their rules while connected to the server, and you still had to leave to change your tuning settings, for example. Achievements would have been next to impossible because there was nothing that acted as a central point for all parts of the game.

As was the case with the Wii and its software, many parts of NullpoMino run on the "bare metal" of the JVM (Java Virtual Machine). Nothing really ran above it all to act as the central point that could ensure consistency and regularity across the entire game. This was an issue, because it meant that if we wanted to reproduce functionality in more than one place, we had to copy and paste the code, which is a symptom of bad design. Whenever we wanted to change this code, we then had to seek out every instance and change them all accordingly. This makes developers loath to fix things at times. This is, obviously, not good.

There were also some limitations that were implicit in the design of the engine itself. For example, the engine was only built to be able to run the logic of a game with 1 player. This doesn't seem like much of a big deal, but it does completely prevent functionality like TGM-style doubles. The mode definitions themselves were mostly copied and pasted, as well.

Then there is what we call the "rule zoo". Like the particle zoo that existed before physicists came up with the Standard Model, there is an issue with the way we think about things. Currently, every "rule" is felt to be elementary, even if the differences between them are as simple as the soft drop speed alone, or maybe a different color set. Because of this, we now have an extraordinary amount of rules with a similarly extraordinary amount of redundancy, and this is often confusing for new users who want to know what the difference between Standard-Zero and Standard-Fast is. Rules themselves were able to enforce changes in play timings, leading to some tricky situations, especially in multiplayer.

The solution to those was rule lock, but it was inadequate for a number of reasons. I play with ARS (Classic) rules. What happens when I want to play against someone who uses SRS (Standard)? Am I forced to use their rotation system? Should they be forced to use mine?

This was further complicated by the introduction of tuning settings. This allowed some element of player preference in the general flow of the game, but in the end it was very flawed because it was allowed to override any other setting for the values it dealt with. No longer could single-player modes enforce a certain amount of ARE or certain DAS settings, because the mode settings were now deferent to player preference. This was a rather ugly state of affairs.

The fact is, if we want to go beyond the scope of the current NullpoMino, then we're going to have to do something about its design. This means we're going to have to take it from the top again.

I know that some of you are thinking that we are going to spend all this time rewriting the game just to give you a new version with basically the same features as the old one, or take what seems like a very long time in comparison to the features we're including. That could not be further from the truth. Even if NM8 was no more functional than NM7.5 (and trust me, it will be), it would still have the advantage of being much easier to extend. Adding new features to NM8 will be a much quicker and less tedious task than adding new features to NM7.5.

Right now, NullpoMino 8 is barely in its infancy. It is very much a pre-alpha, and has a lot of framework with only a little functionality. This will change in due time.


No comments:

Post a Comment