Where to begin?
According to WordPress, 323 days ago I posted a development video of what I was calling Ne+. That whole idea/game perished shortly after. There were many reasons why I never saw it through to completion, but at the end of the day I gave up and it was my fault.
One of the reasons was that I started working for Intel. Even now I can’t say what it is I’ve actually been doing professionally for the last year, except to say it’s certainly the best work I’ve ever produced and it’s been a very exciting and interesting ride for me. Hopefully I’ll be able to link to some images and videos soon.
A few weeks ago I was looking over the code I had written for my senior project. There was a lot of good stuff in there, although a lot of it needed to be cleaned up. Getting lighting, shaders, 3D audio, a tile engine, and other components all working was no small task. And a lot of it can be used to a greater purpose, I hope. So with that in mind, I’ve started working on a new project. Mistake number one is that it’s already far more ambitious than my first project, and we know what happened to that one. I won’t claim it’s going to be great, I won’t even give it a name, but I am going to keep putting time into it here and there.
The first big thing that I did was implement a different tile engine, so that now the senior project code I wrote is being used to create an old-school top-down tile movement system. You can draw boundary tiles in Tiled and be able to run into them with your character, and just yesterday evening I created an NPC class that you can also run into, although the way I implemented the collision checking for those was a little hackish. Movement speed is isolated in a configuration file as it should be. I also have a space skybox with a nice 3D camera to play with, currently used as the background of my main menu. I think I should be able to get a lot of mileage out of it for many different pieces of the game.
So, I really won’t say too much more now, as I just want to have something to show at this point. But there are still things in the works, and right now I am more productive than I’ve ever been.
The new project I’ve started in Processing is going extremely well. I did have a bit of a rough time last night; I stayed up until 3AM figuring out how to make a project that would work in both Eclipse and the Processing editor, as well as provide me with a workable workflow. I still haven’t really figured it out; basically I need to keep the library I’m developing for it updated in two places. I’m sure I could write an Ant script to do this for me, but ugh… and the Processing plugin is okay, but for some reason I’ve lost out on autocompletion in the sketch files. I don’t know, there’s a couple issues I still have, but I definitely know what needs to happen to make everything work in the meantime. I should mention that I made a big step as far as deployment goes too; it’s another process I’m not entirely happy with, but after I follow it I am basically able to deploy whatever I’ve done to a blog post. I should also mention that it didn’t work on Internet Explorer… I’m sure there’s a solution for that, but… I’m just not going to deal with it right now.
Isn’t that interesting? Now I can develop things and then put them on my website! Of course we all knew this was possible, but I had just avoided diving into Java and Processing until now. I even ported over the component system that I’m using in Ne+ and have a sprite library that should handle animations for me, although I haven’t made an animation to test with, and I also polished the dialog box I made so that it works pretty well. I still need to figure out how I’m going to make the little triangles that come out of it and point at who’s talking… What could I be up to, I wonder?
I made this video for a software testing class, but thought that it might be useful for anyone needing a TestDriven.NET quickstart. Obviously this doesn’t explain exactly what to do as far as best practices go, but it does show how to start using the technology.
It’s true. Anyone who has ever started venturing to make a game has probably come across the classic Make Games, Not Engines article. And what it’s trying to say is that you need to accomplish your task, not create an abstract representation of what you think you’re going to need when you start the task. I’ve already fallen victim to, what at its core, is this same issue – I chose an engine that I wanted to work with without knowing exactly what I was going to need from it. The first problem I had with IceCream is that it wasn’t on the bleeding edge – I am going to be using XNA 4.0, so I need technologies that are compatible with it. I tried to get a newer version of the DLL, but with the issues in its development environment, as well as the fact that I was going to be unable to use certain techniques (this became clear quite quickly after starting) I decided that to use an XNA engine was only going to limit me in the long run.
There are plenty of technologies that I want to use. First off is the Farseer Physics Engine, which yesterday I spent about an hour or so compiling and integrating into a new XNA 4.0 project. I was lucky that the engine’s source control contained XNA 4.0 compatible stuff – I effectively created a “World” object and had a dynamic ball bouncing on a static rectangle, complete with Farseer’s debug view that shows you your objects and what is happening. I haven’t yet figured out how to enable the actual text and number debug output which shows detailed information about what is happening, but hopefully today I’ll be able to figure it out.
The Mercury Particle Engine is a project that I only became aware of yesterday, but already it shows great promise – I’ve got the required DLLs and played with the editor less than a minute after downloading it, and this is the kind of thing that is truly valuable – quick, easy, painless usage of a streamlined, effective product. I don’t blame the Farseer engine for being hard to set up, because I am using an unofficial release of it to work with XNA 4.0. Luckily, the particle engine is also XNA 4.0 compatible, and while I haven’t yet integrated it to start creating effects (which are going to be a large part of Ne+), I don’t foresee any mind-numbing issues.
Today, I hope to get the physics engine doing more of the things I want it to do, and specifically, I would like to have an anti-gravity light set up so that when I activate it, anything the light touches starts moving upwards. I am not sure yet what the best way to handle this is, because with Farseer the first thing you do is pass your world a gravity vector.
I am very happy with the progress I made yesterday – I wiped out my IceCream repository and started fresh with a classic XNA 4.0 project, compiled and integrated a “Hello Farseer” example, and am on my way to having a great physics debugging environment. I think that one of my primary goals for today should be NUnit integration into my project, so that I can start writing some unit tests. I am so new to all of this subject matter that they should be quite helpful.
One of the things that has been on my mind since I started pulling down all these projects is the matter of dependencies. I feel good about it in a way, because I am utilizing open-source software to its fullest, and hopefully my code will be of use to at least someone – I have decided absolutely that I want it to be available, based on how helpful it is for me to see the code of others. For example, when looking for a solution to 2D lighting (it is hard to immediately start thinking about how that would work), I asked a question on the Game Development StackExchange site and received an excellent answer linking me to a fantastic example of dynamic, and highly effective lighting. I downloaded the example and it compiled beautifully, and also provides a fantastic lighting effect. I’m very excited about what this is going to bring to my project, but the goal of my first “Sprint” is not to get lighting going, which is a graphical effect that is not absolutely essential to gameplay, but instead to have my light objects working, which does not require anything other than the simplest graphical presentation for me to confirm the results.
I feel very good about my choice to not use an engine – there is a huge element of freedom, as well as the knowledge that there are a million projects I can plug into my own without limitation, because I am the one creating the limitations. I also am not exactly attached to what the “engine” turns out to look like, because it’s not going to be entirely applicable to other projects, and it would only weigh down my code to strive toward that goal. XNA is not the platform that I want to create the rest of my work in, either, so it’s not that big of a deal.
So, today I will try to integrate more and see if I can get some anti-gravity action going, attempting to test out NUnit and add a project to my solution.
I just went through one of the most indecisive experiences I’ve ever had. Usually, I find it pretty clear what the right solution to a given problem I’m having is. This time, I was wondering about game engines. It’s my project, I can do whatever I want, so what engine should I use? Of course, I had already settled on IceCream and XNA (and I still am), but I have had Unity3D in the back of my mind for some time (it’s cross-platform!). I downloaded the Unity environment and started playing with the 2D tutorial project. It’s pretty great, and demonstrates a lot of promise – I still want to use Unity at some point. However, I started reading about this free engine and found out that the free version does not offer anything in the realm of post-processing.
But gosh, Unity, my project is going to be heavily using the Glow effect! Or maybe it would utilize some of the free lighting instead… and the folder structure! It doesn’t lend itself to source control (all those binary files…)? And it’s not open-source? XNA isn’t open source either… I eventually decided that XNA would be a more educational endeavor, and I do want to give IceCream the old college try, so that’s what I’m sticking with. But I didn’t manage to maintain all of my plans while going through this thought process….
I dropped Mercurial in favor of Git, using the excellent little guide found here, after which I found out about GitExtensions, which made things even simpler. I got GitExtensions working with Beyond Compare 3 by using the excellent little guide here. My source control provider is indeed GitHub (and I’m keeping it in Dropbox as well, just to make things easy on me if I switch between environments).
A link to my repository can be found here.
And with that, I’ve participated in enough nonsense. It’s time to get started with IceCream!
A few things have been reconsidered based on some additional research. I have found out about Conkerjo in more detail, who is involved with a few projects that I am considering incorporating heavily into my project. The first big technology is IceCream, a 2D game engine for the XNA platform. This is a big deal – I originally tried Torque’s game engine and although it was a pleasure to use, I wanted something a little more “open.” This open-source engine is exactly what I was looking for, and although it’s not “feature-complete” yet the code is available which will be invaluable as I start to learn more about it. It has a visual designer called Milkshake, which comes along with the package and looks very promising.
After settling on IceCream as the game engine I will most likely use (there must be a bit of testing before I commit), I looked at some of Conkerjo’s other work and found an A.I. library called BRAINS. I haven’t looked into the specifics of this library, but I think that, if I can’t use it directly, it will be very helpful in working toward my own A.I. solution.
A new direction
The next thing I must express is that the idea I have for my project has drastically changed. I started thinking a little more realistically than I have thus far and come to the conclusion that I can’t accomplish everything I want to on my first attempt at a game. I simultaneously spontaneously developed an entire set of ideas for a game that is simpler in construct, but still accomplishes many of the things I want to with this project in general – cinematic presentation, dynamic audio, stimulating gameplay, and most of all, should be entirely possible to complete (with polish) having the better part of a year to work on it. I still need to create a design document and maintain my Engineering Notebook, but the direction of the project has changed and my previous idea will be saved for a time in which I have more experience.
It has taken me a few days to sort out exactly how I want to store my project. There are a lot of options – I took a long, hard look at GitHub, but in the end I felt that its environment didn’t align with my goals. I don’t expect anyone to be contributing to my work, and it’s going to be very content-heavy – Google Code provides 2GB of space for all new projects, which sounded like a good amount to have available, especially given the amount of revisions that I will be going through in the next year. I also appreciate the integration into an account that I am fond of.
After picking licenses and so forth, the real question came – SVN or Mercurial? I started out wanting to use Git, so it seemed only natural to pick the distributed source control option. Immediately I downloaded TortoiseHg, which I found to be a bit more cumbersome to use than TortoiseSVN, however, knowing that a more successful merging capability awaited me made the very slight unwieldy feel bearable. I set up my Google Code project and licenses (which may need to change if the technologies I use have conflicting ones), which can be found here. This is just the main project – my A.I. library will be utilizing a separate project and repository. Ideally I will be able to design it well enough that it makes sense to keep it in its own library, rather than as a part of the recursor project.
TortoiseHg is a bit interesting to use. For the most part I find it’s very intuitive having used both TortoiseSVN and Visual SourceSafe, but a distributed source control system has a bit more you can do. The basic workflow I tried today was the following…
- Set Global Variables (The name that will be associated with your changes and the repository address, username, and password, which can be defined in one line according to some of the help at the Mercurial common problems page.
- Clone the repository created by Google Code
- Make some changes in the folder
- Commit those changes (and maybe commit some more)
- Push those changes to the repository with a button in the Hg Repository Explorer (accessed by right-clicking the folder you cloned the repository to)
This is a workflow I can live with. I am interested to see what other capabilities I might find useful as the code for the project expands. I am also excited about cloning the repository to test or refactor without destroying the project. TortoiseHg provides a lot of nice views into the repository web, so you can get a good idea of what exactly is going on with your project over time.
Now that these things are created, I’ll create another Google Code project/repository for the A.I. library and start implementing some of the things covered in the cheap/worthless looking, but very well-reviewed and recommended A.I. Techniques for Game Programming.
I want to make a game for many reasons – school, myself, everyone else… if I had to assign an ultimate purpose to it I’d say it’s for everyone to enjoy. It’s going to be open. If it’s good, people might pay for it. If it’s not, maybe I will. Regardless, it’s clear to me that I need to learn as much as I can throughout the rest of the project to avoid wasting time.
In a few weeks I’ll be moving to a quiet town in Eastern Oregon where I can focus on this project for a year. The main things that I want to accomplish in my first independent game are…
- A simple artificial intelligence construct for non-playable characters (and potentially to help govern audio/visual effects)
- A level management system enabling the player to easily recurse through different stages instantly as a gameplay dynamic
- An intriguing and enjoyable space-opera plot
- A simple, attractive 2D graphical style with some 3D effects running at 1080p
- Windows 7 and XBox 360 support using Microsoft’s XNA, the Farseer Physics Engine, and potentially other helpful technologies
- An open-source codebase
That’s a nice, tough list of bullets to fulfill for an initial project. That’s why I intend to start small, developing numerous prototypes proving different pieces of my concept until I can build on and integrate them into the final product.
Where to start? The piece of this project that I’ve assigned the most risk to is the artificial intelligence. My initial plan is to create a prototype in which I can view my AI constructs interacting with objects and environments based on a set of needs. I also would like the player of the prototype to be able to interact with the AI entities. Ideally, this prototype could be a small standalone experiment of its own, rather than participating in the project purely as a stepping stone.
During development, I will be explaining the more interesting aspects of what I am currently working on. In the near future I will be covering my initial contact with XNA and simple genetic algorithms. I will be posting screenshots of my work and code examples as warranted for discussion.