Times, trials, and turbulence.
Monthly Archives: April 2008
A little while back, I briefly spoke about my entry in my university’s gamedev club’s 24-hour competition. All three judges have finally posted their marks and opinions of the entries, which you can view here, as well as the entries themselves. A huge congratulations to everyone who took part — it was a whirlwind that I can wait to help organize again this summer. 🙂
For anyone looking for a quick link to my entry, Circuit Runner, you can download it at: Circuit Runner.
Enter: The Lobby
User interface design and programming offer lots of interesting challenges to the hardy UI developer.
First of all, let it be said that I’m not an expert in UI design or development. Certainly not a guru. Perhaps “proficient” could be applied without too much wincing on my behalf. 🙂
UI design and development is probably the main area that I’ve put the least effort into in my previous game projects. I’ve almost always opted for highly streamlined UIs that are low on flexibility and focus entirely on just providing the bare essential functionality to the user. I won’t claim that Skirmish is leaps and bounds ahead of that, but I’ve certainly put in a lot of thought and effort into making a much more comprehensive user interface for the players to use. This is partly because of guilt for lackluster UIs in previous projects, and partly because, simply put, Skirmish requires a lot of interaction with a UI from the player.
The “Lobby System” represents the one of the most UI-intensive portions of the game, with the others being the map editor (Battleforge) and the one-day-to-come Equipment Shop. The lobby is the nexus point for the entire game, where players can manage their characters, list and join games, host games, and configure their local settings/options. There’s a lot that can be done, so my goal has been to make it as painless as possible on the user, while trying to avoid the necessity of large overhauls on my GUI engine.
Note: All screenshots in this entry are UI only, without logic or content yet implemented. Any illusions of content are just hard-coded data for example purposes. 🙂
I’ve opted for a Pane-based system for the lobby, with the Character List being fixed on the left, and the larger pane being able to flip through three other panes that allow the player to access the major components of the lobby system.
Both of the shown windows are fairly streamlined to fulfill their purposes with relative ease: The Character Window allows for creation, deletion, and info-display of the characters associated with one’s account. It’s not implemented yet, but a mouse-over on a character in the list will present a pop-up info sheet of that character’s stats and information. The Join Game pane presents a list of active games in-progress, and the options to join, refresh the list, and retrieve more detailed information. The reason that I chose not to have a mouse-over feature for this as well is because the client will need to literally query the server for more detailed game information over the internet, which is far less than instantaneous. Still, this might change yet.
The Host Game pane is the one I’m the least happy with. Overall I felt very constrained for space in the tiny pane I gave myself, but I remained steadfast in my decision to keep the Character List present on the left side. I really didn’t want a separate “Characters” pane that would require the player to select a character from that pane to decide what character to join/host a game as, first. My own GUI engine has limited me insofar that EditBoxes don’t support horizontal scrolling text or word-wrap across lines, so the grossly long “Info Text” component was necessary.
Again, not implemented yet, will be a pop-up similar to the one described for the Character List that will appear when the player places the mouse over a map listed in the “Map List” ListBox, which will display map information, and a thumbnail image of the map itself.
Last is the User Configuration pane, which allows the player to customize local settings. This includes visual/mouse/interface options and key bindings for either the keyboard or mouse. Plans exist for gamepad support one day down the road. 🙂
This set of panes seemed like the simplest to design. I modeled the Key Bindings pane after just about any AAA FPS published in the last 10 years, and used a simple table to handle the keys. The Options pane still feels pretty empty because of the early stage in development the game is still at; it will fill up as progress continues.
The “Fun Stuff” Begins!
It seems like the quantity of updates to the dev-journal are fairly proportional to how exciting the development I’m currently doing is. And, I suppose, it should be. But it does make for large lapses of quiet when I’m working on less “visually notable” aspects of Skirmish. 😉
Nearly all of my work lately has been focused on getting the communications between the game and Master Server operational. This meant lots of low-level socket and TCP/IP code using the (moderately convoluted) Java NIO API, and getting the connections working the way I like both client-side and server-side. In short: a lot of nitty-gritty code that needs to be written for correctness and speed efficiency, and doesn’t lend itself well to screenshots. 🙂
After spending a good chunk of the day finishing this work up, it felt very nice to realize that I had some more interesting features and goals to work on, now that the under-the-hood labour is (hopefully) out of the way. Small but more enjoyable things, like cleaning up the mini-map and making some improvements to the game timing logic.
With the underlying network code written, it was time to finally bridge the gap between the client and master server. I’ve had the MySQL back-end code and account handling logic sitting around on the master server for a while now, so it was nice to get the chance to see if it all actually worked properly.
The first order of business was to create a window for players to log-in with. Just a small minimalistic dialog to facilitate account creation and logging in, to lead into the main “lobby nexus” window soon-to-come, where the player will be able to manage their account, join and host games, and modify local configurations.
(Logging into Project Skirmish!)
While creating the dialog, I gained some more appreciation for the work I had to put into the GUI system while I was developing Battleforge. It was a challenge to put it together at the time, but it’s certainly paid itself off in spades at this point. It was a snap to toss together this dialog, with automatic component centring/arrangement and the like. I had to rearrange some logic with the actual dialog system to function properly with stacked dialogs (which Battleforge never needed), but all is well now. Secondary dialogs pop up when the user logs in (or fails to) or creates an account, properly phasing out control from the underlying log-in dialog.
Like I said, the Master Server is totally functional in terms of allowing clients to connect and create accounts, but a lack of a full-time server to host it with dissuaded me from bothering to put anything online for public to play with just yet. Not that reserving your account name in advance is really a big deal for anyone but the most hardcore of readers. 😉
As always, thanks for reading. I’m looking very forward to writing about the account system in more detail, and showing the development of the main lobby windows.
I have been getting some solid work done on Cyberspawn, which I mentioned a few times back February. Development on it has struck up again, with my Skirmish interest waning a bit at the moment. It’s been a lot of fun so far, and it’s particularly exciting to work on because I’ve never really explored 3D game development, and it will (eventually) be my first game with a true focus on atmosphere and storyline.
The most recent item has been the conversion from software raycasting over to OpenGL.
Aside from the bilinear texture filtering and large FPS boost, the changes are very subtle. The conversion has just been a verbatim change-over of functionality from software to OpenGL. Since the project has made the transition from “toy project” to “making this one happen” status, I’m opting for a more practical approach to writing a 3D game than old 2.5D raycasting techniques. 🙂
I’ve been continuing my fun quest of becoming better acquainted with Linux, and have been using it 90% of the time over Windows for the last few weeks without issue. Aside from playing the “newer” games, and Visual Studio, I don’t feel any major force pulling me back towards Windows.
Also, recently I made the move from Gnome to KDE for my desktop environment, and I can candidly say that I won’t be looking back any time soon. It feels overall much more established, polished, professional, and above all, functional.
Upon deciding to move my development over to Linux, the next big task became finding a good IDE or text editor, and learning how to use makefiles. I had previously been using a lame script that I wrote, which would simply recompile ALL source and relink after every single change. Hoy was that slow!
As the astute reader might be able to discern, the above screenshot was taken from within KDE, and I now have a solid development environment for Cyberspawn established on Linux. I’m using jEdit as the text editor, which has a vast plug-in system, enabling project management, buffer tabs, a built-in console and error/warning log, and other excellent Visual Studio-like functionality. I’m surprised at how happy with it I am, and that it’s easily rivalling my productivity — perhaps beating — from back in Windows with Visual Studio.
In short, I really strongly recommend looking into sliding over to Linux for your desktop and/or development needs. Not from an esoteric Linux elitist sort of viewpoint, but just because it’s such a hugely viable platform for any user willing to learn a thing or two. I can only see my experiences here as being huge pros on my future co-op terms and beyond.
Question to the Reader: What OS do you primarily run? Have you ever tried a Linux distribution? Do you plan to?
Have you ever killed a man with your bare hands? Do you plan to?