I'm using a camera scheme that, by default, centers on the player's character and aligns to the Z-axis. The player can "look around" by translating the camera around the X/Y plane, but keeps it's orientation. I gave the camera a little rotation in the direction of the cursor as well. I mentioned in a previous entry that I like the rotation, but it looks kinda funny when everything in the world is on the X/Y plane. Background sprites need to have z-depth for scrolling, but also if the camera rotates because, for instance, the back of a room needs to be occluded by the containing walls in the foreground. If its on the same plane, that doesn't happen. But, puting the back wall of a room at a different depth introduces the issue of being able to see the space between the foreground and background sprites. This problem is noticable if the player jumps off the ground and looks down, seeing no ground around him, and making it obvious that he's running on a paper-thin plane. The only real solution is to use 3d scenery. I got ambitious one day and dug up my old (simple) custom model code. I quickly made an Entity subclass that renders the model, and fixed up the exporter. Within an hour or two, I had static 3d models in the level. 3d environments are great, but I'd like to finish this within the year (hopefully not at the end).
My options for the graphics are:
- fully 3d: I don't want to deal with writing another animation format just yet.
- 3d scene with a sprite plane: This might be overkill for gameplay that won't take advantage of the graphics.
- parallel mode (rotated ortho, like iso): looks neat, but more suitable for a game like Syndicate Wars.
- ortho mode: this would mean a lot less work, and still has all the gameplay possibilities.
It looks like I'm going to use an ortho mode, and its going to be so much more fun to use because its much less demanding. It took me a long time to arrive at what is probably the most obvious choice for a solo project. I'm glad I took the time to experiment and find out why certain things won't work, like trying to mix 3d with a sprite-based game.
While working on the GUI classes, I realized how inflexible a custom binary format is to extend and still load previously saved files. So I gave in and decided to use XML for the GUI once again. I figure I'll use XML while I'm writing the GUI classes, and if I want to use binary for performance reasons, I'll go through the hassle when the format is not going to change.