If you don't know what Minecraft
is, it's basically this:
You're this little person who wanders around this 3D world with nothing better to do than build things. So that's what you do. Then someone else comes along and builds a giant swastika on the side.
After writing my own server and effectively-enough solving the problem with griefers, I began to develop a long list of stuff about the game that annoys me.
Number one was the rendering perspective. If you look at something straight ahead, it looks one size. Then turn so that it's at the side of your view, and suddenly it's twice as large.
Number two was the fog, specifically the way that it wasn't circular around the player position, but based only on z-depth into the field of view.
Then there were the block types in the game. They mostly suck, as the color selection is a painful array of what Phaelonimaire accurately describes as "faggot purple" and of the non-color blocks, only a few are really useful for building anything that looks nice. ...and the most annoying aspect of this is that it would be so easy to add more block types to the game, but it'll never happen.
Then there's the game scale, or lack thereof. Depending on what you use as cues, you get a different sense of scale for the game. Go by the height of the player, and the blocks are about one meter in size. Go by the size of the bricks on the brick block, and the blocks are about 0.4 meters in size. Go by the size of the planks on the wood blocks, you again get something else. Size of the books on the bookcase block? Maybe the size of the TNT sticks in the TNT block? Or maybe you'd like to judge by running speed, or the acceleration when the player falls to the ground from up high? There's no limit to the number of ways you can arrive at a different feel for the scale of the game, and the result is that everyone builds at a different scale, and everyone's creations look out of whack to half of everyone who looks at them because they see the game at a different scale.
Then there's the chat. Messages are limited to 64 characters, minus the length of the player's name, and usually minus another 4 characters for color codes. Then the chat is rendered in a scaled-up low-res font, with only a displacement rendering of the text below it as a poor shadow which barely does anything to make the text more readable. Check it out in the top left corner of the image above. When people want to chat in the game, they have to go find a solid color to look at while they read the chat text. ...but most annoying is the 50-or-so character limit, too short to fit even a full sentence.
Then there's the mouse button assignment. The game uses left click to destroy blocks, right click to create blocks. It's the reverse of what any sane person would expect. Even the instructions below the game describe the reverse assignment, claiming that left click creates blocks. Left click usually creates things, but not in Minecraft. It took me three full days of playing the game before I stopped trying to use left click to create blocks. As best I can guess, destroying blocks was the first thing added to the game, so it got the main mouse button, then when the ability to create blocks was added, the developer was already too used to destroying with left click, so create went on right click. What's more, I still suspect that much of the problem with people joining the game and doing nothing but destroying stuff is from people clicking the button they usually use and not figuring out how to do anything else.
However, what bothered me most about the game was that its popularly was completely in spite of itself. Take Notch's server from his web site and run it for a while. You end up with a server map that is flooded, random holes everywhere, and a forest of single-block-wide towers. This happens for a few reasons:
Most importantly, Notch's server has only retroactive access controls. You can kick people and ban people, but any new random person automatically has build permissions. So you can ban someone who misbehaves, but a new random person will follow along shortly.
Another factor is the difficultly of moving around with Notch's client. People log into a server and it's a bit of a mess and they wonder if there's anything there. So they build a tower to get up high to look around. Then they see nothing but garbage, and log out, leaving the tower. Then more people follow along and do the same.
If it were only Notch's server, no one would play Minecraft. The only reason the game is popular because of all of the work done by independent developers to create servers with useful access controls, and some other group of people who created a hack for the game client to allow people to fly around and walk through walls.
So, it all rather pissed me off. Here Notch was with a game that was extremely popular, which he was getting millions of dollars from, despite the fact that everything people really liked about the game was someone else's work.
It really made me want to write my own client to go with my server. It'd be so easy to fix the problems mentioned above, if only programming weren't such a pain in the ass.
Then Phaelonimaire came to the rescue by researching how to use OpenGL and finding some useful examples I was able to learn from. With that I was able to create a rendering engine in all of about two days. Since then we've spent the last four or five months working on this thing, whenever each of us doesn't feel like shit and can work on it.
So far, we have this:
This is a house I built, using blueprints I found in the internet which I then drew a grid on according to the map scale, then built in the game. I went through such effort because one of my priorities with this game is scale. I want all of the textures at the correct size. I want the player's walking and running speed to be correct. When the player falls, I want the time to hit the ground to be the same as it is in real life. ...and it is. A fall of 10 meters takes 1.42 seconds, and the whole time you're accelerating at a steady 9.8 meters per second squared. So anyway, for further testing, I needed a perfectly scaled house, hence the building from blueprints.
The game presently has like 182 block types plus another 58 or so solid color blocks. They're arranged into categories in a menu like this:
Note the small number of "faggot purple" colors. At first I tried choosing colors according to a certain number of bits per color channel, but that created the same horrific color space Minecraft has. Then I researched better color spaces, then tried choosing equally distant colors in a L*a*b* color space, but that too looked like shit. So I just thought about the problem for a while, looked at what people were doing with the color blocks, and decided to manually choose a few common colors and include a gradient of each, from dark to light. The result is quite popular with the sprite-building players.
The other textures in the game are shit, downloaded from a "free textures" web site. I really want to photograph my own textures, in order to get the kinds of textures I want, but most importantly so that I can incorporate each texture into the game at the correct scale. The ones currently in it are only approximately to scale, since I couldn't find any textures web site which seemed to think that texture scale was important, so the best I could do was to look at each texture and make a guess. I really can't wait to lose those textures and replace them with my own, but it'll require a few days with a lot of energy and a lack of winter to get some good photos.
Here's a sample of the rendering of the chat text:
I found a free true type font on the internet, which I then rendered into a graphics program to add a shadow, then saved as an image file. I'm quite happy with the result, and in fact now and then I try to use that true type font for something else, but it just looks worse outside the game. ...but most importantly, the text is easy to read, despite the random background it is rendered against. I've never desired to find something different to look at in order to read the text more easily. It's amazing what a proper shadow can do.
I was unable to find any OpenGL menu libraries I liked, and so I created my own:
It has the standard stuff: check boxes, radio buttons, clickable text, etc. At first I had no idea how I was even going to code this, but now, it's sweet.
Of interest on that menu is the "perfect perspective" option. If you get the monitor close to your eyes, then input the measurements, it will set the rendering perspective so that what is drawn in each part of the screen is what you would see there if the screen was a window into the 3D world. It's actually not a good thing if the monitor is far from your face, but if your can get close enough that your face is closer to the screen than the height of the window, you end up with a very realistic feel as you move around, and things feel like they really are as large as they are in the game.
I actually got the idea for that from Minecraft, when trying to figure out what was with it's warped rendering perspective. I eventually determined that the field of view was 70 degrees vertically, and that that field of view was correct if my face was three inches from the monitor. So I put my face three inches from the monitor and played for a while, and it was quite amazing how realistic it was. I then decided that my game had to have such an option, to input your screen size and distance in order to create such an accurately-sized rendering.
Another cool feature is the "map wrap" option, which does away with the ends of the map by wrapping the ends together, so that you can walk continuously in one direction and just keep seeing things over and over again. It's done in such a way that it isn't obvious where the ends come together. There's no break in the rendering, no sudden jump from one side to the other, you can even build a house right over the spot where the two haves come together and it will look the same as if you'd built it anywhere else.
Here's a view of map-wrap enabled on my server's map. The map isn't intended to be wrapped, so the edges don't align, but you can still see how the two sides are joined as one:
It's really unfortunate how many months it's been and yet this game still isn't finished. I keep hoping to find the cure for my lack of energy, since it always feels like a finished game is just a month away if I could work on it every day.
However, on the bright side, this gives me something to do. When I feel well, I work on the game, when I don't, I simply play around with it, which as far as low energy things to do go, it beats the hell out of reading Slashdot. It's also somewhat social since there are other people in the game too, and those people are less annoying since they aren't the Slashdot type. Even without any sort of release there are already about 15 people playing it: some of the more intelligent people from my Minecraft server, several of my nephews, and their friends at school.
If ever the game is finished, I don't think it'll have any problem being popular. At present I haven't told many people about it since it wasn't until yesterday that there was a server with anti-grief measures, but after someone at my nephews school found out about the game and began destroying things, I "ported" my Minecraft server to the game, to provide a safe place for people to build things.
...but now that there's some anti-grief, even if only on one of the servers, I guess I can post a URL out in the open now. ...that is, if you want to believe that anything on my blog is really where anyone is going to see it.www.multiplayermapeditor.com