OK, this isn't going to be a blog about if it's better to write your own engine, or use an existing one. That argument has become as common and annoying as where we place those curly brackets. The answer is obviously different for every company/project/person and has already been argued ad nauseum.
I just want to write a little bit about the experiences I have had over the past year since it might be useful for others to read.
Let me step back a little. Since entering the industry in 2000, I have used Lithtech, Gamebryo, the Unreal Engine (before it was called the UDK), Renderware, as well as proprietary engines at Iron Lore and Harmonix. (Both of those were in-place before I arrived, however.) I have worked on PC, PS2, Xbox, Xbox 360, and PS3. So, I have seen quite a bit of tech, and had a number of years (am I that old?!) to form some opinions about what worked well and what didn't.
About one year ago, I left Harmonix with the main hope of brushing up some of my coding skills that I hadn't been able to use in a while. It's tough to touch on a bunch of different areas of the codebase at large companies. I had entered the games industry as a graphics programmer, but for a number of reasons, hadn't done much in the past few years. I had heard about deferred rendering, and understood the concept, so set off to write one. (Actually a light pre-pass renderer.) So, after about a week, I had a simple renderer working. OK, now what...
I was always interested in animation, but hadn't worked on any skeletal animation since I was using Lithtech. Next came a scripting language, since I had never written one before. Cool. Before long I had a skeleton of a game engine. So, I never decided to start an indie game company and write all (or at least most) of the tech myself, it just kind of happened. I came up with a crazy idea for a game with my partner Steve, and off we went.
Now that we have been working for quite a while on our project, I can say that I absolutely love the freedom of having our own tech. Whenever Steve (or the other people that are helping us out) have a tech request, it has been relatively easy to refactor the code to allow it. Additionally, I never have to worry about receiving a new drop from an engine developer, and having to either merge in all their changes with our new tech. (Getting stuck in cycles with other developers who have their own game schedules to worry about can be painful.) I can also answer any tech questions I'm asked very quickly, and not have to dig through alien code for hours to try to figure out how something works.
Best of all, I haven't yet had to say "No, the engine doesn't support that." Maybe it's just because they have been reasonable and haven't asked me to turn the game into a completely different genre, but everything feels so malleable now. I love it!
There are obvious downsides. We could be farther along right now had we been using Unity or another engine. (I don't have any experience with Unity.) Additionally, the tools would be more mature and have more functionality. (Although I do try to make the tools I've written easy to use, as well as prioritize changes very high.)
In conclusion, I'm very glad that this is the path that we've gone down. The game is looking very unique, and the team has been excited with the progress we've made. The best part is that I've learned a ton in the past year that wouldn't have been possible had we gone in another direction.