Let's Make Overworld
I can’t really say I’m an experienced blogger by any measure. In fact, I can’t really say I’m much experienced at anything other than drinking, masturbating, and crying. I can even do all three at the same time! Certainly, though, if there’s one thing I do worse than blogging, it’s developing video games.
Using my two years of experience as a computer programmer in my nation’s fine military, I’ve dabbled about in the art of game creation here and there. As for blogging, I was an angst-filled teen at one point, like many of us, so I had some insincere efforts at it in the form of suicide notes and poetry about my soul being dark or something. Other than that, not much understanding of either field.
But what the hell? It’s time to dive in headfirst. Henceforth, I’m going to work my ass off on my game and work my ass off on this blog detailing my efforts. It’ll be fun, because chances are you don’t know much about programming either, so you can feel my pain as I struggle with each tiny little task. This way, it won’t be like one of those tech blogs where you have no clue what the hell the author is talking about.
So my game. I’ll discuss how it has developed in my head first. Like I said, I’ve dabbled around in game development here and there in the past, ultimately having an incredibly minor understanding of it. I have decent knowledge of the basics, especially since I have spent money on some books and studied them thoroughly. Using my limited knowledge, I have tried to make games in the past where inspiration has struck me, but the game I will be making for this blog is one I have dreamed since about two years before I even knew what the hell programming was.
A brief history here. In those days, I walked into the guidance counselor’s office of a community college, knowing full well I was some idiot high school dropout, and I told them I was interested in making games, but had no idea where to even begin. Laugh if you will, but I only had come into possession of my first computer three years prior, and catching up in the tech field was proving to be tricky. I got a general idea of classes to take to get into programming, and it seemed a fruitful career field, but all the while, my game idea was on my mind.
A few years later, my dreams sidetracked, I joined the Air Force as a programmer. They upped my skills a bit, but in my free time, I was always still thinking about how to use those skills to make my dream game. It wasn’t long before someone showed me the XNA Framework. It seemed useful. About as open-ended as you could hope to be in coding, but with a lot of the work taken out for sake of us indie developers. Toss in a few failed projects by me, and one idea to attach a blog to a serious one, and here we stand. Maybe I’ll discuss these paragraphs in greater detail in a future post. Hell if I know. We’ll see how this goes.
I’m sure you’re just itching to hear about what the game actually consists of. It is called Overworld, Episode VI and there is a pending subtitle. It is a 2D turn-based RPG, which is my favorite genre of game. While I truly hope there is a market for other people to play this game, it is really nothing more than my own dream project, the game I would love to play more than any other, and I will be making it as with that in mind. If I happen to interest anyone else in playing it along the way, well, that’d be just great!
Your first question may be: “Where did episodes 1-5 go?”
A valid query, and simply put, they didn’t go anywhere. One of the things I have focused on very hard in this game is a story. There is a full timeline I have created of major events in the world that have been divided into episodes, each with their own standalone plots. There are ten episodes in total to the Overworld saga, which isn’t much a saga at all, because there is no released material for it. I would not be so pompous as to put forth a belief that this game will be some mass success out of nowhere and strike me the funds I need to make an unheard of 9 more games.
But I will say, yes, I did write out this full story, it is ten episodes long, and this game’s plotline is the sixth installment in the overall story arch, so I feel it fitting to give it the title as such. If, through some ungodly miracle, I am given the chance to make another game in the story eventually, I’d relish the opportunity to display that level of consistency, showing that there were indeed at least two episodes to this Overworld series. Next, why did I choose episode 6 as the game to make? In truth, because it’s got the most simple, easy-to-digest-on-its-own story, which I also feel raises intrigue for the other segments of the story.
Onto actual development stuff.
I have worked on this game here and there in minor ways in the past, but with certain successes in the XNA field this weekend, I’ve been scraping old code, and I’m practically starting from scratch. Thus, it’s a perfect time to start this blog, I think.
My entire weekend (and some of the prior week) was spent struggling with data structure. To display my ignorance of the topic, I thought I could just take any old database program (Access, SQL Server) and use that to allow players to save game data and to allow the game to load content (such as monsters, default character stats, etc). As it turns out, I was wrong. I learned after too much hard work that the player would require the software for these programs as well, which is already ridiculous, but they would also need to have the game’s content re-created on the program’s initial launch, which would basically mean it would all just need to be in code anyways. Yikes. There’s no way to make the game look good doing that.
SQLite seemed like a decent option, but by now, I was digging around in other games made in XNA that I had on my computer to see how they were storing data. Surprisingly, I found all .xnb and .xml formats. Even GTA4 (not made in XNA, of course) has a data structure almost entirely made of .txt flatfiles and .xml files. I found this all to be pretty fascinating, because I was totally unaware of this, that there existed an entirely different format for client-side data structuring. I felt pretty fucking stupid.
After some more research, I realized that a data structure almost entirely in .xml was right up my alley. This ensured data in the game was actually pretty open and readable to the user, allowing them to make minor edits if they so desired, which is fun. On the other hand, if I want to make the data harder to access, XNA seems capable of converting .xml to .xmb with relative ease. Granted, I’m not familiar with the process, but it’s there apparently, which is nice. It doesn’t really matter, either way. I really can’t fully protect the game. Anything you store client-side (in this case, everything) can be accessed by the user, which is probably why so much crap is going open-source these days anyways. The plus side to it all though is that XML is easy and it makes organizing the data easy, and while it is a little more costly on processing power, my game as a whole should not be, rarely ever doing more than handling 30 sprites on screen at a time, which isn’t much at all by today’s standards.
The majority of my weekend was spent figuring out how to convert .xml files into in-game objects through the content pipeline of XNA, which proved to be an absolute bitch. You see, the .NET framework (or at least the XNA framework; I’m actually not sure which, but lemme know if you want and I’ll edit this) can easily convert any .xml file into an instance of one of your classes as long as the properties of the class coincide with the values in the .xml file.
But for some reason, XNA just wasn’t quite understanding what the hell I was trying to do, and boy howdy, was this damn thing poorly documented online. Most tutorials I found were for old versions of XNA that still tried to use TypeWriter objects and TypeReader objects to do all this, and the rest just wouldn’t explain the concept in its most simple form. One tutorial I found seemed to cover the basics well enough, but I’ll be damned if I’m going to read any code where the guy names his classes “Class1” and “Class2”.
Finally I stumbled across this.
The technical crap (all of it) of it may be lost on you, but there was an important lesson here. XNA creates two projects on creation of a new game: one for your game objects and logic and the other for game content. The part I didn’t know is that they both need to be able to reference the type of object the .xml file is trying to become, and you can’t do circular referencing, so a third project (a game library) must be created to house all instances of this dual-referencing. Good times.
It was hell, but it’s out of my way now, and I got that typical feeling a programmer gets as they go from grinding their nails into their face due to the frustration of code that won’t work and an internet that won’t help straight on over to dancing around in joy because it works and obviously with this nothing can ever go wrong with my code again.
I’ve now spent the better parts of my free time Sunday and today designing the data structure in .xml format. There’s still a lot to go, but I have the idea down decently, and notes to help me along the way. So I guess that’s my progress report, and sometime near the end of next weekend, I will hopefully prove true to my word of keeping up on this blog, and I will post a new update on the progress and nature of Overworld, Episode VI.
In the meantime, I’ll close with some screenshots of Visual Studio… how exciting.

This is the XML syntax for an in-game job. Kinda like in Dragon Warrior III or Final Fantasy V, I guess, where you didn’t so much have a character progressing, as you had their instantiation of the class that they currently were progressing. I may change this syntax a bit to help ease up on the processing power, though possibly lowering the readability slightly in the process. If I do, it shouldn’t take long, as I’m not adding any more than 2 or 3 jobs until I’m sure I have the data syntax, structure, and logic all good to go. Would hate to find an error that requires me to go back and change a few thousand skills.

Really, more of the same, but just to give you an idea of how this list completes. In case you had yet to figure it out, the majority of this list is made up of the skills a job can learn, bearing 3 pieces of data for them: the level at which the skill is obtained, the name of the skill, and the rank of the skill. My hope for the logic of it is that every time a character levels up in a certain job, the .xml file associated with that job’s base information is instantiated into memory for a short while, where the code looks to see if anywhere on that list you see above is a skill with the “JobLevelEarned” tag equal to the actual level achieved. If so, it uses the name and rank of the skill to find the skill’s .xml file, load the base information from that file, perform any logic if necessary, and add it to the character’s learned skill list.
The potential syntax change I mentioned earlier? I’m thinking of having it so there’s no skill rank listed here. Instead, each rank is its own skill, and each skill’s .xml file has a nullable “SkillToOverwrite” tag. Muscle II, for instance, would be its own skill without ranks, but it would have Muscle in its “SkillToOverwrite” tag. When you learn it, it finds that skill and, you guessed it, overwrites it. This adds a little more bulk to the size of the .xml files, but it should free up some processing power, which is the more important resource in my opinion. I dunno. As stated, I’m really not that great at coding or anything, but if you have any suggestions, comments, or questions, then fuck, I’m all ears. I hope you enjoyed this. See you in a week. I’ll proofread it later. Honest.
NOTE: This blog actually began yesterday on a different blogging site, but some people I trust on such matters told me to make it a Tumblr, so I obeyed. I have made some minor edits in the process, including for clarity and correct grammar. I also had to just link to the video as opposed to embedding. Tumblr decided to crap out on me there. Other than that, the content is the same as it was before, other than being posted a day late.
I also may have removed all proof that I am involved in human trafficking because I don’t want to go to jail.