As I’m working on GigaSun Jet’s first campaign story, I had some thoughts about writing stories that I felt like jotting down. I’ve decided to treat my time on the story as if I’m writing a novel. It really could end up being a real novel (I’m at about 10% of a short novel now, 6000/60000 words) and then I would have some interesting marketing options. I wish I could start talking about my story here, but I’ve promised myself that I’d wait at least a month so I could get a solid start.
Writing a story and writing a game are fun creative tasks, but they’re also full of frustration. One specific form of frustration that is common to both is simply getting started. Without some sort of structure, getting started can be very tough.
This frustration is a symptom of a problem with many creative endeavors: Too much freedom. That’s why Ludum Dare works so well. It gives you some restrictions (time and theme, mostly) that focus you into a creative frenzy for a small product. There are writing competitions that work in the same way, but I’m not quite part of that big community yet.
Of course, books and games have a few major differences that change how well certain limitations work. The way that stories are communicated is simply through a collection of specially chosen words. There are even fewer natural limitations than a game (though games can have true randomness and procedural content). A game has to be logically consistent to some degree since the structure is based upon logic. Words in stories, on the other hand, can easily conjure up ideas that can not exist in any reality (i.e. irrational concepts, logical fallacies). Sometimes, the author can hide the inconsistencies well enough that they don’t interfere with the story. I won’t get into that any further yet. That’s a big can o’ worms.
So, my recommendation for you… If you’re doing something creative, try to brainstorm up some fun restrictions and limitations. That will help you focus instead of reading silly blogs like this one when you should be working.
I’m starting off this month working aggressively on the story for GigaSun Jet. It also happens to be National Novel Writing Month. I’m not going to officially participate, but the feeling is still the same. My “novel” might be half novel, half script and I won’t be crunching to hit 50k words (which sounds crazy!!! Ahhh!!!). I’ll just be taking what I already have so far and deepening, expanding, and directing it.
I’m excited about it all. I have a great plan for the point of the story and a very high level plot. Even just today I made good progress on the ending (that’s where I’m supposed to start, right?).
Concerning the story… I’m trying to make it as unexpected yet natural as possible. I’ve never read this kind of story and I’ve never played a game which breaks out of the stereotypes of the meaning. One big problem lies in how I can write about the story here… How much should I discuss? Surely I can’t give away the meaning, since that’s vital to the ending. We’ll see how I do, either way!
We’re just coming back from a surprisingly widespread power outage around here, and I actually managed to get things done. This was a big thing, too.
The new GigaSun Jet level editor is done, for now. “New” because I had another one I made long ago. “For now” because it’s far from polished and could be plenty more intuitive.
The old editor was a stand-alone application I started a couple of years ago. It could fill map tiles with walls, ships, or turrets. That’s basically it. Well, it could edit objectives in a limited way, too. It was a serious pain to keep the level editor up to date because it used a completely separate codebase. It was not much fun to add new features because GSJ was a moving target back then.
Now, I’ve finally cut loose the old editor. I mentioned it before, and now it’s gone for good. The new one can do way more (actually, just about everything one could do by hand-editing the map files… but now you can see it!). There’s also an interesting twist to this accomplishment. I used some code from a nearly dead project to try to get a flexible system of buttons in the level editor GUI. I struggled with the code for a while, hunting down the logic errors and memory issues until I found it: a way to make it work just as intended. To make a long, technical story short, I improved the code considerably and refined its focus so much that it might lead to a revival of that old project (err – when I have the time).
Beside all that, the important point remains that the story can now begin being expressed in the missions. What is the story? Well stick around and you’re sure to hear.
I’ve gotten through those interfaces in GigaSun Jet that I mentioned a couple posts ago. The game now buffers its level data and loads from that instead of straight from XML objects. Since this buffer can now save its data back to XML, this has allowed me to start actual work on the in-game level editor.
I must say I’m pleased with how it’s going. I made the old level editor long ago as a stand-alone project. It is tile-based and pretty simple (and pretty ugly). The menus are not very well thought out, but they’re functional. Plus, the last time I touched the level editor code was to merge it with the main GigaSun Jet project.
After all the work I did to refactor the saving and loading, I knew that I needed to rewrite the level editor and make it fit the game better. What better way is there than to build it into the game itself? It’s been a long time coming, because I need more levels!
When playing a mission, you can press the special level edit key which pauses the game, clears away all the indicator clutter, and presents the level editing GUI. Just today, I got some of the object data into text input fields and, most importantly, it works. It already feels so much better than the old level editor. The interface is so much clearer and more intuitive. I’m also just using simple lines and shapes to indicate objects and it seems to work well. Once I get all of the object data into the GUI and add control to objectives and event triggers, I can just chop off the old editor code for good.
I’ve used Box2D and in-game level editing for two projects now. I’m a likin’ it.
There are two approaches to designing a system for game content. They are responses to the question: How much of this type of content should be put into a game?
1) Just enough content
2) Tons of content
The choice might seem obvious until you consider the time it takes to create tons of content. You might make a decision right there and move on. However, the difference is even deeper than that. For any given type of content (art, parts, quests, levels, dialog, sound effects, etc.), a game designer has to choose one of these approaches. It’s such a natural thing to gloss over that many people naively make the choice for most of their systems without even noticing. “It can only be done this way” is the subconscious thought. Crafting a lasting system of content starts with this choice. Considering the differences and making the right choice for a particular game can lead to things that have never been seen before.
Continue reading GigaSun Jet design: A lasting parts system
I’m just hacking away at some “details”, as my wife would frustratedly call them. They’re important, I tell you!
I’m loading level data from XML files, then this data will be referenced whenever a level needs something.
It's really not that bad...
Okay, it does seem weird even to me that I’m storing the exact data that I’m getting from the XML, but this will really help when I want to make changes to levels while they’re running (i.e. built in level editor). I may get carried away with making my code “nicer” sometimes, but the real issue for me is that I’m essentially wedging new, untested code between two working pieces. I just love breaking stuff that works, especially when the job is really boring! Wahoo.
Ogres are beasts; big beasts that are tough to control. I mean, Ogre3D is a beast; a big beast that is tough to control.
I’m currently replacing the rendering backend of GigaSun Jet with Ogre3D. Ogre is a great 3D graphics engine, but this is not what it was made for. Even with my background, Ogre is not very easy to learn. The tutorials are choppy and some important early ones (terrain, specifically) don’t work on many computers. Ogre works with an integrated resource management system, which is where much of the complexity comes from. If you’re not willing to use Ogre’s way of organizing a project (once you figure out how that is), then you’re in for some trouble.
In other words:
Do build up new projects with Ogre.
Do not port games to Ogre unless you really have to.
Ogre really is a good graphics engine. On the other hand, isn’t it best to learn a new API with something familiar? It’s too bad Ogre is such a beast.
Oh, by the way… I’m still trying.
The Mechwarrior series is well known for catering to gearheads with all of the interchangeable parts and weapons (mostly weapons) that you have. The feeling you get when customizing your own giant robot is the same feeling I wanted to get in GigaSun Jet. In some way, you can actually have fun without shooting anything. What a wonder! I also loved the old Armored Core games (I missed out on Project Phantasma). The sense of control was great and I had fun trying to find the right equipment to match with the fastest leg parts. How could I get some of that into my own game? Does it work without giant robots? Let’s look at the real question I had to answer.
Continue reading GigaSun Jet design: Parts and components
A shooter, by definition, involves shooting, of course. You can’t very well have a shooter or shoot ’em up without any sort of shooting. And there’s something about our nature that enjoys this kind of activity. Just as part of being human, our adrenaline starts flowing when we feel invested in a situation that is not totally predictable. The main draw to shooters and shoot ’em ups in particular is this kind of unpredictable rapid action. But is there more?
Continue reading GigaSun Jet design: Fun without shooting
I have played a lot of shoot ’em ups. I’ve played old arcade shooters: Space Invaders, Galaga, Asteroids, Time Pilot, Sky Kid. I grew up with console and PC shmups: Life Force, Ikari Warriors, 1943, Captain Skyhawk, AD&D DragonStrike, Tiger Heli, Raptor, Star Soldier R, Bangai-O. I’ve played newer ones: Ikaruga, Desperate Space, Geometry Wars. And of course I’ve played some Flash shoot ’em ups. The thing is, it’s hard to find a deep shoot ’em up: one that keeps me interested after I figure out the controls and enemy patterns.
Continue reading Intro to GigaSun Jet design