All those MMO threads that keep churning through the forums have finally got to me. I like skimming through the design forum, but it seems every third thread is from some beginner trying to make a damn MMO game. I'm not entirely sure why it's got to me now as there isn't one specific thread that's pushed me over the edge, but I suspect it's just the accumulation of several months of the same constant ideas over and over again. Plus that the last time MMO activity peaked was roughly the end of the North Hemisphere summer holidays, and I suspect there'll be a pick-up some time after New Year when people get bored of the holidays and - for some reason - think of making another MMO. Gah!
I was considering posting a massive rant here about why this bothers me, but I decided it wasn't really worth my time. But I do have one semi-rhetorical question: why are they all choosing MMOs over other genres? Very occasionally you see someone wanting to make a better FPS than Half-life 2, a better RTS than Starcraft, or a better Zelda game (that one might be me!), but the number of doomed MMOs vastly outweighs them all. Are they really all that popular?
Ice Slider - More Menus
Finally I have the graphics options menu done - or a least what I can do at the moment. Without a game completed I don't know what other settings I'll have to throw in there, although given it's all 2D I doubt there will be many more.
Part of the delay was that a lot of my engine runs a bit on hacks, the graphics system in particular. The graphics system was one of the first I'd written, and the code was mostly cleaned up code from Pierre and the Fish. Back then I just wanted to get the video up and running as quickly as possible. Unfortunately that meant I had to do a bit of refactoring work in order to be able to change the graphics settings on the fly. There were also some bad architectural decisions that were bugging me that I had to fix, and that all takes time. Especially when I change my mind about five times and keep changing things back.
The other reason this took awhile is I keep gettting suckered into adding in extra fancy little features for no particular reason. I guess I can see now how you can get sucked into spending all your time improving an engine - my case I haven't got past the menu system. At least though I can feel happy that I suspect most of this functionality can be transfered to my next few games after Ice Slider - although the menu code as it stands is a big ol' mess of switches most of it is fairly easy to understand and should be the same in whatever games I make.
Here's the lowdown on some of the improvements I've made, not counting the numerous internal adjustments to the engine:
- All new graphics menu - as can be seen in the screenshot.
- In fullscreen mode you can now select from whatever resolutions SDL says is appropriate for your video card. The menus look pretty impressive in higher resolution (less so in the lower ones; that font gets a bit chunky in 320x200).
- In windowed mode you can now resize the screen to whatever dimension you wish. The game forces the window dimension to the closest 4:3 ratio available so it isn't distorted.
- The frame limiter can be toggled off, or set to any value from 10 to 1000 FPS. I'm not sure why I've allowed such a high maximum, but it doesn't hurt, I guess.
- Key presses now repeat after the button is held down for more than half a second, with the maximum speed ramping up over time. Mainly done so I could scroll to the top of the frame limiter setting in a sensible period of time.
- Added the capability in engine to disable menus - needed to disable the screen size option for windowed mode, but I've also disabled all the menu options I haven't coded yet.
- Changed the background shape behind the menus to a trapezoid
Here's a list of potential problems:
- I'm still undecided on what to put on all the text labels - but that can wait until later.
- If scrolling through menus at top speed the flickering cursor can look unsightly - plus I don't want to cause any seizures in anyone watching!
- The scrolling is also limited by the frame rate - it will only scroll once per frame. So if the maximum scroll speed is faster than the frame rate then the scrolling will be noticably slower. If this were a game funciton I might fix this, but I'm not sure it's that much of an issue for the menu.
- The game tries to automatically pick the closest resolution based on the present window size when going from windowed mode to fullscreen. I don't know if that's a good idea.
- If you press "reset" the default fullscreen resolution is the lowest available, which is usually a bit too low. Thankfully it doesn't update until you click "Apply", but I'm not sure there's a fool-proof way to select a guaranteed workable resolution any other way - unless I know for sure that every screen supports something like 640 by 480 or 800 by 600.
- I only do SDL's sanity checking before changing resolution, so I'm assuming it doesn't pick any resolutions that cause your monitor to explode. I could see all the resolutions it showed me, but some of them looked pretty odd. All the standard ones worked fine though.
- I've used a few too many ints instead of unsigned ints in the code and it's a real pain to fix them, so sadly I can't support any resolutions of 32768 by 24576 or higher. If you have 64 video cards running in tandem then you'll have to run the game at a lower resolution, I'm afraid.
I think now the menus are good enough I can finally move to the gameplay itself (there's still an audio menu to go, but that will wait until I've coded the sound module).