Sunday, August 31, 2008

XIII Game Finished

Remember when I was saying I was looking for the next game to play? Well, I asked one of my friends for a recommendation and he recommended XIII. So, I got it and sat down to it over this past weekend.

Honestly, it was nice. The game is cel-shaded, which adds a nice feel to it. Also, the comic-book style "Arrrg"s and "NoooOOO"s, not to mention how they utilized this in actual game play when far away and around the corners you would see soldiers' footstep sounds being written out, and you actually use it to know where the soldier is and where it's headed. Aside from that, the weapon recoil effect was also nice; far more realistic than many other games I played. As for the story, it's based on an old comic series with the same name; but they did a nice work with it and I actually enjoyed it.

One thing that did annoy me a little bit was how they handled saving. The game works in checkpoints; but since I rely on quicksave/quickload quite often; I expected that when I quickload after passing a checkpoint, the game would go back to that checkpoint, not to the quicksave point which was usually at least one checkpoint back! I guess it's my mistake, cuz I kept forgetting to quicksave after each new checkpoint, but it would've been much nicer if the game did that for me.

Overall, it was a nice game and it made for an enjoyable weekend.

I also found some free time to make some progress on The Fellowship of the Ring; so now I'm almost two-thirds of the way through it. I can't wait to get done with it and go into the next one! One thing to note, however, is how different the book is from the movie!! The first part of the book, the part where frodo went with the ring from the Shire to Rivendell; made for an entire part of the book, full of events and people and stuff. It got a little boring at certain points, though, so I'm guessing the people who did the movie knew what they were doing. It wouldn't have all fit into one movie anyway, that I can be sure of.

Thursday, August 28, 2008

Game Project Update: August 2008

Exactly two weeks ago, I came up with my new game project idea. Since then, I have managed to do a few small steps towards getting an initial 10,000 feet overview of things. Since I kinda reached that today, and we're at the end of August; I decided to make a post about how far things have gone. Also, since it's almost the end of the month, I had the idea to make this into a monthly update thing. So, if all goes well, I should be posting an update like this one detailing how far I've reached by the end of each month. That said, and without further ado; let's get on with the status update!

As I was saying, the first step I needed to accomplish was to get a wide overview of what I would need to do and how I would design my classes. I actually managed to put some time aside for this, and I started looking into the different components I would need, and how they would fit together. I also found myself compelled to start thinking of a good object-oriented design for a sorta-flexible game engine rather than just hard-wire everything. I'm aware of the time and effort this requires, but since I'm in no hurry; I think this is the best way to go.

For starters, I already know that I am going to use Ogre as the core graphics engine, so this was a good starting point since it would usually have a major influence on how everything else works. I started going around the Ogre Wiki to refresh my Ogre knowledge; and I came across a few articles that provided me with some nice pointers on my engine design. One such article gave me a few nice tips on the general organization and design of the game engine, and it opened my eyes to the aspect of game state management and how low-level input events should be abstracted by more high-level "actions", which would provide a certain level of flexibility if later on I decided to add network functionality. Another article also clarified the game state management concept a bit further; and so I finally have a fair idea of how I'm gonna design and build this functionality. But what the hell is game state management?

Simply put; the game works by transitioning from one state to another. For example, initially the game starts with an intro screen, followed by the game's main menu. After the player selects "New Game" for example, the game actually goes into action and starts responding to player actions, etc... In order for things to make sense, the game has to respond to user input differently in each of these situations: if a user presses the space key during the intro screen, for example, the intro is skipped; while if the same key is pressed during gameplay it might mean "jump" or "fire". In order for this distinction to happen, the game has to move between states, while each state does different things and handles input in different ways. That's a brief description as much as I could manage, but the original article explains it much better.

Anyway, after some reading and some thinking, I came up with the most-probable set of classes that would constitute the game engine. Of course, this will definitely undergo some refinements and a few additions when I try to design things with a little more detail, but here's the initial list:
  • Game: This is the main control unit that would control all the other classes/systems.
  • StateManager: Manages different states and switching between states.
  • State: Abstract base class for each of the different game states.
  • MenuManager: Manages menu display and navigation.
  • Menu: Abstract base class for each of the different menu screens.
  • LevelManager: Manages different game levels, including enumerating, loading, etc...
  • Level: Game level class; controls and runs a single level.
  • GameEntityManager: Manages a set of game entities.
  • GameEntity: Represents a single game entity and controls it.
  • InputManager: Manages low-level game input.
  • InputSource: Represents a single low-level input source.
  • EventManager: Manages and distributes game events to listeners.
  • Event: Represents a game event/action.
  • EventHandler: Base class for classes handling events.

I still need to work out some of the details of their interaction, but that's basically it. That's obviously quite a lot of code, and there's still some other "secondary" classes that would be needed, such as for loading levels, etc...

As for what's next, I would start working out the details of the class design, and start getting into the details of other subsystems such as input (OIS) and UI (CEGUI). I'm totally ignoring audio for now, but if the design is really as flexible as I hope; it should be as easy as adding a few more classes; possibly without even changing any of the other classes at all.

Thursday, August 21, 2008

What do people think of Windows Vista when they don't know it's Windows Vista?

While browsing some tech sites today, I came up on a Microsoft ad about Windows Vista. I don't know if it's new or has been around for a while, but I just saw it and couldn't help a big smile!

In the video commercial, they show a bunch of people saying why they don't use Windows Vista, and none of these people have actually tried it. Then, they're showing them a "new" Windows version called "Mojave", and they all seem to like it very much! Then, surprise surprise; that's actually been Windows Vista all along! Then, the commercial concludes with their new campaign's slogan: "What do people think of Windows Vista when they don't know it's Windows Vista?" followed by the link to the campaign's website;

Obviously, they're admitting that Windows Vista had so much negative publicity that the majority of people don't even wanna consider trying it! Why this happened I'm not sure; but I myself happen to fall in that category; I haven't used it and I'm not looking forward to! Although, I admit, in the very few and limited occasions in which I saw it or used it on someone else's computer, I didn't quite hate it. I just heard so many bad things about it, and I'm pretty comfortable on my current OS anyway; that I'm not really in a hurry to go upgrade. Besides, this whole gazillion editions of the same system thing is annoying; I don't wanna be stuck with the decision of which one to get.

I just find it kinda comical, for Microsoft to be openly admitting this about their own product, and actually using it as a proud slogan for a brand new campaign that I'm guessing would be expected to raise Windows Vista's sales!

There is some irony there; I just can't quite put my finger on it...

Monday, August 18, 2008

My Experience: Windows Desktop Search Vs. Google Desktop

Believe it or not, today witnessed yet another unsatisfactory installation experience of Google Desktop for me. This is like the 3rd time I've installed it only to reinstall it again on the same day! The desktop bar is still a bit unstable on my Windows Server 2003 system (which I use for web development), and indexing insists on going over each and every system file, which is quite useless and makes me lose track of the much fewer actual documents and files I have.

Overall, I have been reluctant to install any desktop search engine because I was worried about indexing slowing down the system; then Windows Live Search got installed with the latest windows update and I gave it a try; and I'm sad to say that it's much more "to the point"! It automatically limits itself to files in personal directories, and allows me to manually add places that contain stuff I wanna index, and control file types/extensions in a much more flexible and generic way than Google Desktop.

Eventually, I got disappointed with the whole deal and decided to uninstall it. What made me pause to write this review is the feedback box that came up during the uninstallation process. Of course, this is my own opinion; for all I know the rest of the world could be disagreeing with me right now! But this is my experience; and since I'm a Google fanatic, I really wish I'd been able to use their Desktop Search and be satisfied with the result.

For now, however, I'm using Microsoft's Windows Search, and it was done with the whole indexing process before I even knew it! True, it did not index file contents; but who said I wanted it to? When I do have too many files to keep track of, I would then choose to let it do so with a click of a button; and I don't think I'd have to worry about it taking up that much processor time then either.

Thursday, August 14, 2008

Thousander Club Update

Of course, as a direct effect of how busy my life has been recently and how I had abandoned this blog for a while, the whole Thousander Club thing was abandoned as well. Actually, though; not quite!

I did, at the beginning of this year, put a few goals for myself. Not quite as impressive ones, but still goals that I would love to accomplish. I did, to an extent, follow up on most of these goals, though some of them were unavoidably abandoned due to how hectic my life has been.

One of these ambitious goals was to finish 12 novels, one for each month of 2008. I actually started out half-way across the year anyway, so as you imagine I'm nowhere near close to this target. I started when I got the collection of "The Hobbit and The Lord of The Rings" which I'd always wanted to read. I started out with The Hobbit, and I'm currently stopped almost one third of the way into The Fellowship of The Ring. I actually barely set time aside for it anyway, I simply read my way through transport, which gives me around an hour and a half of reading every day. I currently stopped reading, however, in favor of another objective. But I do plan to continue the LOTR collection at least, simply because I want to. I hope I can get time for more this year, but I doubt it!

Another goal, this one may sound a bit weird, is to finish at least 12 video games this year! My argument for this is that, for someone who wants to be a game programmer, I certainly have a very shallow background on video games, mainly due to the fact that I'm always too busy with everything else. So I decided to put time aside for video games, and to always have a video game that I would be currently playing. Also since my current PC isn't too powerful -- I had it since summer 2003! -- and I couldn't play the more recent games, I decided to go for the classics that I never had the time to play or finish. I started with Doom 3, couldn't bear finishing it till the end (too stressful!), moved on to finish the first Starcraft, then Max Payne 1 and 2. I also finished The New Super Mario Bros. on my brother's Nintendo DS, so I'm gonna count that in as well. I just finished Max Payne 2 a week or so ago, so now I'm looking for the next game to start.

I might wait a while, though, and choose to favor my new game project and allocate more time to that, or to the other objective I'm also working on; for the time being. Actually, this other objective I'm currently allocating a lot of my time to is to get certificated! I've actually started studying for the MCTS certificate, in order to try and get that and the MCPD certificate that naturally follows it; in the field of Web Development. It's an inevitable part of my career development path; the day job! Until I can get me a game development job anyway... So, also one of my objectives is to get the MCPD by the end of the year. It's actually 3 exams, 2 for the MCTS and 1 for the MCPD. I'm still studying for the first exam, which I plan to take at the end of this month, if all goes well.

Anyway, that was a quick update to my semi-Thousander Club status. But basically, I don't think I'll be posting weekly updates or anything; let's just consider that my Thousander Club membership is on hold till the end of 2008. I will, however, update the side-bar of this blog with which book/game I'm currently playing, and how many done of the target.

Game Plan

Lately I've been getting an increasing feeling of nostalgia for C++ and game programming; and to writing challenging code in general (since I have been primarily working with C# and web development for over a year now!). So, I decided that what better cure for this than to start a game project! I've had this idea in my head for a while about a way of utilizing the mouse input in a sorta new way, and I've also been dying to make a classic-style top-down space shooter game like the ones I fell in love with on my MSX back in the day. I finally put the two ideas together and came up with an idea for a good game that would be fun to play without requiring a team of professionals to develop. I think it might even have the potential to spread around a little and be enjoyed by others; or at least others who have nothing better to play in their free time!

Basically the idea consists of a futuristic fighter aircraft (the player) doing missions in a world full of all kinds of enemies. The player can collect power-ups, weapons, upgrades, etc... and the main objectives are score, completing levels, and accomplishing a high kill rate in each level. Levels get unlocked as you complete them, and I'm thinking levels can be re-played to get more score and a higher level rating. I might even go as far as implementing a game-wide ranking/rating system, but that definitely won't make it to early versions.

Anyway, the new bit is that I'm thinking of using the mouse as a/the main input method, but instead of the linear axes model I have another, slightly different model in mind. I still need to experiment with that for a while to see if it would actually work, but I think it'll be fun if I managed to do it as I imagine it. Also, I think it would be a great idea to implement co-op play with the mouse and keyboard. I also have some brainstorms for other multiplayer modes, but I don't wanna get too far ahead of myself for the time being.

So, for now my objective would be to get started with the main game engine, and to experiment with my new input method. I plan to use OGRE3D at the core of the game; simply because it's open source, it's certifiably excellent, and I already know its API. My head already started working on the details of the class design, and I don't think it'll be long before I can have a working base with at least some basics like movement, shooting, and maybe even collision detection ;-).

Of course, there's the issue of me having absolutely zero free time, and lots of other things to do that I'm already committed to; so this might not be exactly the high time for productivity on this game. I do, however, plan to keep it on my mind and work on it whenever possible. I also think blogging about it would be a great source of motivation, so I'm gonna try to post updates about it as much as I can. Oh, and I also came up with a name and a backstory for it! But I'll keep that to myself for now; probably until I release my very first executable or something.