The Beginning – Laying (too many?) Foundations
I had already started working on the latest and current incarnation of my game, using a C# engine called NeoAxis. While it was great, it lacked some flexibility and wasn’t free open source, so switched over to Mogre, a C# wrapper over the C++ Ogre, and then later (partially) ported things to Unity3D.
Perhaps I didn’t fully learn my lesson of not trying to revolutionize everything, because I spent a lot of time in early days making my own networking layer. To be fair to myself, I did take a long hard look at ZeroC, which seemed like a really attractive technology but in the end not a fit. Eventually I came across Photon which seemed too scary in terms of proprietary and expensive.
As for my layer, I think it is great, a custom RPC built on top of MsgPack and lidgren optionally reliable and sequenced UDP with multiple channels. However, my first game won’t even be multiplayer, so in hindsight I maybe should have considered not doing that. Maybe by the time I’m ready for multiplayer, someone will have released a good networking library.
On the other hand, it did help me flesh out a working client/server architecture, and got me to separate client and server side code. I have had aspirations for a scalable MMO architecture, to avoid Eve Online’s problem of server lag when 800 people jump to the same location.
So, I still think there are pros to doing good up front architecture, assuming you have the time. (Now, I’m not so sure I had time to do that, so in the future I tend to defer everything as much as possible. On the other hand, I envisioned my game would be multiplayer, and only recently decided to do singleplayer-only first. Hmm I seem to have lots of other hands.)
Also I had just come fresh from doing a lot of networking work, so it was what I knew and seemed like a comfortable thing to start with. (But good netcode doesn’t make a good game. It just makes it not bad.)
And during my 6 years at my R&D job, I learned that it was important, good, and satisfying to make solid foundations. Bad foundations cause pain and failure, as do missing foundations, but spending too much time on foundations can mean you run out of time for the thing the foundation was for. So, plan wisely, and minimize costs, maximize wins, and race to what is your winning ticket.
Tip – Start small, ship early
One tip that is often given to new game developers is: start small. Finish something. Now I definitely echo that. Make a pong clone and ship it. (I’m still working on my pong clone, or in my case, a tower defense clone/variant that is worth shipping.)
I’m a fan of the entrepreneurial show Shark Tank (and the Canadian equivalent Dragons’ Den,) and it also comes up that entrepreneurs need to get a product out fast, to test the market.