Wednesday, July 22, 2009

Making the Cut

Sorry about the lapse in blog updates. Things have been hectic around here. Something in the plumbing broke upstairs last week, leaving my room flooded. This week, I had surgery, and am currently recovering. So, yeah, not much has been going on in the way of development. Once I recover from surgery (hopefully before the end of next week), I'll be back to work. Just wanted to let you all know what's up.

Thursday, July 9, 2009

Mythic Web Site

Hey folks, just wanted to let you know that I've added a simple section to my Web site dedicated to Mythic. There you'll find some documents such as progress reports and character profiles, as well as images and animations. Head on over to theraje.camendesign.com/mythic and check out the cool stuff you can find there, and check back occasionally for new additions!

Lua Lua

No, it's not the name of a mostly incoherent song from earlier in the past century. Lua is an extension programming language used for scripting. It is a light-weight library that allows you to "script" data, functions, etc. into your application without having to recompile your program code. This can make your program a lot more flexible - you can change the way your program behaves without having to alter its internal code directly (assuming your program is set up properly, of course).

I got acquainted with Lua programming last night. I read most of the "Programming in Lua" guide after it was delivered yesterday afternoon, and dove in. Lua programming is assuredly... different, but it's not hard to get the hang of it. It's certainly new to me the way data and the like are handled, but it's nothing earth-shattering.

So, what will Lua do for Mythic? I aim to use Lua scripting for things like cut-scene automation and program configuration. I haven't had time to delve too deeply into everything that Lua can do for a project like Mythic, so I may be missing a few things. More time getting to know Lua will tell the whole story.

Saturday, July 4, 2009

Making of a Modern Myth

I told you in my last blog entry that I would possibly give you another update the same week, and here it is - only a few hours late!

I've mainly been working on composing some tunes for the game. That's right - not only am I doing the writing, programming, art, and design for Mythic, I'm also laying down the beats. My skill and experience with music are comparatively limited, however. The samples I've sent out to my inner circle have gotten satisfactory reviews though, so I'm hoping that I'll be able to fit in some of my music. If not, I know a party who may be interested in contributing on that end, so it's all good.

After getting a few more tracks produced, I plan on starting on the scripting engine for the game, as well as getting a start on the character animations.

Now that I've given you an update on what's been going on with the project, allow me to go into a little detail on the story behind the game.

"When an ancient artifact never mentioned in history surfaces, it is studied, then passingly considered a relic destined for the museum. Put on display just before a big show there, the curator instructs a pair of night watchmen to keep an eye on things and make sure nothing undesirable happens on the eve of the debut. In the meantime, the discovery of the artifact has not gone unnoticed by a certain malevolent deity.

"As one museum guard, Carter, checks in on his partner-in-training over the radio, there is no response. Upon discovering the whereabouts of his coworker, Carter notices him acting very strangely. When Carter sees his partner holding a museum exhibit in his hands, the trainee disappears into thin air - leaving no trace but a hole torn in mid-air.

"When Carter approaches to examine, the rip in space pulls him in, and he is hurled into a strange void-like realm. His partner stands before a beautiful woman in flowing robes, asking for immortality in exchange for presenting her the exhibit. However, this woman, who claims to be a goddess, is not at all what she appears to be. After taking her prize, the goddess cuts down Carter's friend, leaving him to die as she transforms into a lanky man in a suit and hat, who then turns his attention to a horrified Carter.

"Who is this shape-shifting stranger? Why is he after a museum exhibit? What will become of Carter? These are answers to but a few questions that will arise when worlds collide. Gods and goddesses long forgotten will return to the limelight. Heroic figures from long ago will be reborn. Horrific monsters once vanquished will return to wreak havoc. Welcome to the making of a modern legend."


Stay tuned for more updates!

Tuesday, June 30, 2009

Getting Results

It's been close to a week, and so far I'm very happy with how my project Mythic is coming along. I know a week isn't a lengthy period of time, but still, I've been working up a storm on the code and graphics (and even concept sketches and the story script). When I work, I mean business.

Anyway, for anyone who wants to know some of these results, read on.

I've been working mostly on graphics the past couple days. I incorporated a "painterly" style to the backgrounds, as I feel it fits best with the theme of the game. The game is set in modern times, yes; but its heavily myth-driven flavor lends well to painting-style images.

If you want a sample of the work I've done for the project, there is a sample scene that I put together using the graphics I've made. Since I don't have a suitable map editor yet, I had to put it together in my graphics editor, but this still gives you an idea of what things may look like, at least for outdoor, forested areas.

Of course, this is all for nothing unless the game runs well. After all, there are things like free-roaming, alpha-blended clouds floating around in the background. So, I decided to add some code that populates a decent-sized map with a simple (but comparable to a real-world scenario) background. As you can see, I'm getting a solid frame rate of over 30 frames per second. Note that this test was run on an old single-core, single-threaded laptop processor running at 1.86GHz, with 1GB of RAM and a Radeon Mobility X600 with 64MB of video memory. The program performs equally well on my Asus Eee PC 901, with a 1.6GHz Atom CPU (overclocked to 1.8GHz using "Super Performance Mode"), with 2GB of RAM, and an integrated Intel GMA 950.

The final product will obviously be more active than this, but the performance so far on this equipment makes me a happy camper.

As I mentioned earlier, I've also been working on sketches and other things that lean more toward the design aspect of Mythic. I have the full script for the first portion of the game (there's a lot of dialog as the game is story-driven, but it won't be as wordy after the beginning of the game) and a few sketches of one of the main characters as well as one of the key items in the story.

That's all for today. As always, stay tuned for updates. If we're lucky, we might have another blog post this week!

Thursday, June 25, 2009

Laying the Foundation

Welcome to another installment of theraje's Game Development. Today, we discuss what has been going on with my current project. If you have been following my blog, you know that I have put Dungeon3D, my 3D rogue-like project, on hold for now. In the meantime, I am working on a 2D project which I hope to have finished by the end of the year.

The project aims to be an action-adventure game in the vein of the 2D Castlevania games. This means that the perspective is side-view, and that the action style is part beat-'em-up, part platformer, and part exploration. The project, tentatively titled Mythic, will have a setting and story line based on a mix of different world mythologies, including European, Oriental, American, and African myths and legends. Gods and godesses, beasts, and heroes will interact with their counterparts from other myths, as you - the player - attempt to stay alive while meeting your own ends.

I officially began production on Mythic a couple days ago. Day One involved me getting the map/layer system set up and creating some basic tile graphics, while Day Two was spent mainly getting parallax scrolling working. Today (Day Three), I have gotten the tile engine working for the most part, and plan to take the rest of the day off (I haven't taken a real break since I started).

The tile engine as it stands is pretty straightforward. Maps are made of multiple layers, such as background layers, foreground layers, and the "primary" layer (the layer on which the player and other game entities reside). Each layer may be a different size to affect how it scrolls - smaller background layers scroll more slowly than larger foreground layers. This parallax scrolling effect gives the world a sense of depth, even though it is completely two-dimensional. Not a new technique by any means, but it adds a lot to the atmosphere!

For the curious, the game is being developed in C++ using the SFML library. The project will also support game controller input (I have an XBox 360-compatible controller that I'm using for testing), as well as keyboard input for those who prefer it for some strange reason.

Well, I hope that I've gotten you curious about Mythic. I will do everything I can to make sure the game works well and is an enjoyable endeavor for you. Stay tuned for more updates next week!

Friday, June 12, 2009

Back on the Ball

Hey folks, hope you all are doing well. Sorry for the huge lapse in updates, but my mom fell and broke her hip about six weeks ago. I've been spending most of my time since then housekeeping and helping her out where I can.

Well, the doctor said that Mom can now start using her bad leg some now, so it looks like things will get back to normal soon... which means I can work on my project again. Huzzah and hurrah!

As I mentioned in a previous post, Dungeon 3D is on hold. Right now I'm planning on developing a simpler 2D game. I've been working on getting my feet wet on animation (I've been doing graphics design for many years, but have never done much "real" animation). I don't have anything usable, per se, but if you know me, you know I plan to rectify that.

Hopefully sometime in July I'll have enough to entice you with screen shots, but in the meantime, keep an eye out for updates, as they will be back on their regular schedule of (roughly) once a week. See you soon!

Monday, April 20, 2009

Change of plans

Hey folks, after a bit of a blogging hiatus, I have returned. I've been sick the past few weeks with various maladies, and haven't gotten much of anything done. Of course, I'm really reconsidering my current project.

To make a long story short, I'm going to focus more on a 2D project, get it working well, and then come back to 3D. I hope that I will be able to make a decent 2D game for you to play, but until then Dungeon 3D is canned. Sorry to let you folks down, but I will do my best to release a 2D game by the end of this year.

After all, it's been about five years since I've completed a game. It's about time, right?

Thursday, March 26, 2009

Back to the Drawing Board?

Howdy folks, and welcome to another installment of theraje's Game Development.

I found out yesterday that the Khronos Group consortium - the people behind OpenGL - have released the OpenGL 3.1 specification. Of course, this release brings about some major changes to streamline the API, but it also means a lot of old throwbacks have been deprecated.

Naturally, a lot of those "old throwbacks" are things that I've incorporated into Dungeon 3D. Nowadays, you're expected to use shaders - small "programs" that alter the way your graphics card processes things like vertex and fragment data - rather than using the less flexible, but more straightforward, fixed-function pipeline. Before learning about the deprecations in the latest OpenGL spec, I never found any reason to use shaders. Now it seems that if I want my game to be compatible with graphics cards that will be available in the near future, I will have to use them.

So, I had a look in one of my books to find out what shaders are and how to use them. It seemed to only multiply the questions I had. Then I had a look at an online tutorial. That didn't help things much, either. It looks like learning how these shader things work will take a big chunk of my time. Then there is the matter of plugging everything into my project.

A battle is now raging in my mind - do I spend an indefinite amount of time trying to learn about and implement shaders into my game, or do I just finish the game as it is and hope that backwards compatibility saves me?

Of course, simply debating the topic is robbing me of precious productivity. It seems like a lose-lose in my case.

Friday, March 20, 2009

Not Your Mama's Blender

When the average person hears the word "blender," they think of those kitchen devices that can either make great smoothies or turn your hand into a thick red paste. But chances are that if you're a techie like me, the free 3D modeling software Blender is the first thing that comes to mind.

When I first used Blender many years ago, I was still a young adult... I'd say 19 or 20. I was excited that DirectX was coming to Visual Basic 6.0, so I started looking into making my own 3D models so I could start making 3D games. As I looked at the prices for some of the high-end 3D modelers, I was taken aback. Some were $3,000 US. I even found one that cost around $10,000 US. A very ghastly situation when you don't come from money and have a bottom-tier job.

Among the more reasonably priced options I found was Blender - a totally free and open-source software suite for 3D modelers. Of course, when I first tried Blender, I was confounded by the interface. I couldn't figure out how to even close the program... I actually had to go into Task Manager and kill the process.

Over the years, I kept coming back to Blender on occasion, without much better results. I would learn how to do one or two things each time, but found it far too cumbersome to work with. I could use it in a pinch, but it wasn't fun.

I wanted to learn how to actually use Blender effectively, so I bought a book that promised to help you "unlock your artistic potential and get the most out of Blender." While these claims are lofty indeed, the book itself has taught me a lot about the nuances of Blender, and has enabled me to use it much more efficiently than any of the online tutorials I've perused.

One of the most important concepts behind using Blender detailed in the book is "ohomohok" - One Hand On Mouse, One Hand On Keyboard. This is pretty much the golden rule of using Blender, as many tools and menus are quickly accessible from keyboard shortcuts. It also allows more control over translating, rotating, and scaling models. For instance, rotating a model 45 degrees on the Z axis can be as simple as pressing 'r', 'z', then typing '45' and tapping the Enter key.

I also learned that the MMB - or "Middle Mouse Button" - is a handy tool. Most people roll the scroll wheel, but never seem to remember that pressing down on it serves as a MMB. It can be used to navigate freely within the 3D view, and to split the views (which is handy when you want to view the model in one window and edit a UV map in the other).

Also, the book taught me what I needed to know for making game-appropriate models. From Mirror Modifiers, to face extrusion; from marking mesh seams, to unwrapping UV maps.

The only problem I had with the book is that the images are printed in black-and-white, and are in some cases a bit tiny. I can see them fine in decent lighting and with the book up close, but it can definitely be a problem for people who don't have the best eyesight (or, in my case, glasses).

If you're one of those people who need an affordable 3D modeler, I would now recommend Blender - something I wouldn't have done in years past. However, I would also highly recommend that you spend a little money on a decent book like I have. It really will be a big help in learning Blender's unique interface.

Thursday, March 19, 2009

Dungeon 3D So Far

Since "Dungeon 3D" has been in development for a few weeks, and I'm just getting this blog rolling, I thought it would be nice to give all of you a bit of background in the development process for the game.

"Dungeon 3D" started as an idea that I've always wanted to work on - a game that builds its levels procedurally (i.e. the program builds levels by itself, rather than loading levels built strictly by hand). I wanted to base my game loosely on a Rogue-like game (specifically, Nethack), but without the "drunken walk" generated hallways, so things would be a little cleaner.

After getting a good idea of what I wanted out of the game down on paper, I began work. Choosing to use a combination of C++ as the language and SDL and OpenGL as utility libraries, I sat down and started on the simple things - like getting stuff to draw.

Upon getting something to render, I added a homebrew lighting scheme that lights individual tiles, rather than lighting everything per-vertex or whatever. This is so the lighting between tiles is easily identified, as it will affect characters' ability to hit each other based on visibility.

Next thing I did was start on level generation, since I could now see what I was doing. After making sure I could see, I changed the view so that the level could be seen adequately.

Unfortunately, the rooms were a little too random. Many rooms were disconnected from each other, so I tweaked the level generator to fix that. However, the level was still largely too random.

I then decided to make dual views for the game, in the form of a minimap in the corner, and the player view in the rest of the screen, to get a "feel" for the maps. I went ahead and added text messages to a sort of heads-up display next to the mini-map.

To help alleviate the unwieldy randomness of levels, I decided to change how levels were generated. Instead of randomly choosing where to plant a room, then randomly setting the width and height, I created some small, hand-made "room definitions" and plugged it all in. Still not there, but getting closer.

After making some new, "optimized" room definitions, I added a frame rate counter to the bottom of the screen. Then I thought the player view looked a bit too bare. I wondered if adding a "ceiling" cap to the walls would help. After showing the before and after to a couple people, we all agreed that the game looked better with capped walls.

I decided it was time to work on something else. I opted to go after model loading and rendering. After all, what is a 3D game without a few 3D models? This wasn't a problem, since I already had an old OBJ loader lying around in an old project. After a few tweaks, I had models up and running.

With that small victory under my belt, the level layouts were still bugging me, so I made some final tweaks to the levels, until I was satisfied with the results.

Of course, the levels themselves are generated fine now, but they still looked a bit boring. I decided to add some trimmings to the levels. I started with pillars inset into inner wall corners, but that killed my frame rate. I was then shown the light.

I had been rendering everything in "immediate mode" - using glBegin() and glEnd() blocks to render it all. A friend of mine told me about vertex arrays and vertex buffer objects. After learning about and implementing those features, I was pleased with the outcome.

So, that's pretty much where I am at the moment. I'm currently working mostly on 3D models, and some minor tweaks. There is still much left to do in the grand scheme of things, though. It's interesting to see how far this project has come over the past three weeks or so when I first got the idea.

The First Post

Howdy folks, theraje here. I'm a lone-wolf game developer, meaning that I develop my own video games - from design, to programming, to media - all by myself. I've been developing games since 1999.

I've been floating around various places which you may be familiar with if you're into game development. I'm a regular at the Game Programming Wiki forums, and have been a part of several other game programming communities. I was once the head of a large community video game project, known as "The Gathering Project," for over a year back in 2001-2002.

Right now, I'm working on a one-man project. The project is currently entitled "Dungeon 3D." Yes, what an exciting name. Don't worry, I plan to change it once I have time to think of a real name. It is a 3D Rogue-like game. Levels are generated on-the-fly and the graphics are 3D. A more-friendly-than-the-typical-Rogue-like user interface is planned, as is an actual story line (with dialogue and cut-scenes). Think of it as Nethack for the Final Fantasy generation.

I will be documenting the development of "Dungeon 3D" of course, as well as giving insights into what it really takes to be a lone-wolf game developer. I plan to update this blog about once a week, if not more often. I will share my experiences with you in the hopes that other developers will learn from my (many, many) mistakes.

So kick back, relax, and enjoy the show.