I had originally wanted the environment to be 3d-renders (with perspective). But I found that aside from the extra work involved with compositing the renders together (each with their own perspective), there's an issue with knowing where the wall really is while playing. The player's path along the ground is predictable, but when judging where his jump will land against the wall, there's an ambiguity that might be frustrating. There could be helpful lines that show where the physical boundaries are, but that would put limits on what kinds of environments there are, and what style they have. You couldn't have, say, an arbitrary cave environment without some hard edge defining where the player can't go. I think this would kinda destroy the aesthetic value of the 3d renders. It can be done, but it would require an art team. Anyway, I could use partially-3d environments, but I like the inherent character that a "flat", layered world has. So at the moment I've decided to use ortho renderings that are layered. My camera is in perspective, and the layers have different z-positions. The transparent edges of the foreground layer lines up with the physical walls of the level, and its easy to differentiate between the layers when the camera is moving.
The newest thing I'm trying (which I'm very excited about) is giving the camera a slight rotation in the direction the player is aiming. Its a slight rotation because I don't need the player to be able to look too far around, but enough that he gets a sense of perspective. This effect is hard to explain and difficult to get a good idea just by looking at the image. I would LOVE to post a video of this in action but I have no capture program anymore. I was using Camtasia Studio and I absolutely love it, but my trial is up and they want 300 bucks for it! I'm considering it because that program is so nice. My other option is to post a demo... so here it is! I can't call it an actual demo yet, but if I waited until I have a finished game, why read this journal? :)
The major problem I have with the camera so far is that the aiming reticle is stuck in the center of the screen, and the camera rotates 1:1 with the cursor movement. Those will be fixed next. Hit spacebar in the demo to switch to the freelook mode, and try moving the camera around a LITTLE at first. Its not revolutionary, but I think it would make the game a little more fun. The demo requires someone with an imagination to appreciate it. Its not pretty, but imagine what it could be!
There isn't a single completed feature in this demo.
Here's what you can do:
+ you can run, aim, dash, shoot
+ you can dance if you want to, you can leave your friends behind
A small list of what's missing:
- Shaders are disabled, because they're slow and I haven't really worked on them
- no jump animation
- enemies don't explode, or do anything yet
- no sounds
- no damage
- single weapon (test)
- no objectives
- something to do
If someone would try it and let me know if it installs and runs, I'd be grateful. Oh, its only for Windows at the moment, sorry Mac/Linux users! The final app will have Mac and Linux versions.
Not exactly a functional editor yet!
GUI:
I tried to use JavaCoolDude's opengl GUI that loads data from XML files, but I'm not convinced XML is good format for a GUI. I understand that companies will use XML as an intermediate format before its converted to binary for release, but I really don't understand why. If you have a dedicated program that can edit your own binary GUI format, would you need the human-readable format at all? I found that JavaCoolDude's xml-loading system was nice, but I think using XML is a waste because it doesn't seem to have any benefit in it's use. I ended up spending three days incorporating his XML system into my app, only to cut it out when I came to my senses. I think I was just drawn in by the screenshots of his system. I've decided to create my own binary GUI format and develop a dedicated app for creating and exporting the GUI. I though it would be too much work before I realized that I have most of the work done already. I have a framework (SDL/OpenGL) and GUI system that works, but uses my crappy time-consuming text format. SO, my new GUI editor's GUI is using my crappy format, but will export the new binary format that my GUI editor can use! The snake eats itself!