This is the best the current lead modeller and art director is able to come up with.
I need to find someone really talented who is willing to work for free 🙂
This is the best the current lead modeller and art director is able to come up with.
I need to find someone really talented who is willing to work for free 🙂
Here they are. These look much better than the other one.
They did the normal mapping wrong but otherwise the ship is technically correct. I think…
It’s getting increasingly hard to find time to work on the game. I’ve dropped from about 40 hours to 10-20 hours a week. I’m getting burned out. When Black and White 2 comes out I’m just going to play that to refresh myself.
I updated RakNet to version 2.4. Memory requirements have dropped by 25 times. That’s pretty huge. I also fixed some serious bugs that have been there for a year now. That is the thing about eating your own dog food. It has to be very tasty or you won’t eat it 🙂
It seems like RakNet is growing in popularity too. I’ve gotten some pokes before – like the Reality Engine uses it. But now Day 1 Studios wants to use RakNet for their next-gen games too. This is a huge boost to me from a marketing standpoint. I have to admit their contracting offer is tempting. I much prefer working from home (if that is indeed what they are offering) and I much prefer working with RakNet.
At my current job I’m tired of writing technical design documents, waiting a week for a response that shows it wasn’t read carefully, and then rewriting trivial points to add unnecessary detail. I have nothing against TDDs. However there’s a certain point where you just need to write the code and figure things out as you discover them. When I was planning out my server mesh topology I did a TDD and did solve problems. But did I think of everything in advance? No and that was the optimal situation where I understand all systems and wrote all code. You need to solve problems at the level of information you have.
I’m starting to see why people have a communication problem when outsourcing. Techinically, two out of three emails to China are getting bounced back and sometimes delivered despite the failure notice. Communicationally, although my requirements for the models are clear and specific I continue to get models that only partially match the requirements I set out.
Telecommuting with most people, but especially artists, always seems risky to me regardless. Only 5% of people I’ve dealt with over the years I consider self-motivated and disciplined enough to do a good job of telecommunting. Language aside, most people are poor communicators. Artists tend to be sloppy thinkers and most are not disciplined.
Despite this they are doing some work and I think the project can eventually get done as long as I put in extra time to manage them and fix what assets I can.
Personally I don’t like outsourcing. It cheapens your own labor market and the expense of living conditions in other countries. It’s a global form of explotation where you enjoy the benefits of a first world country on the backs of those in a third world country and the loss of income to your fellow citizens. I wouldn’t do it normally and certainly won’t for future games. For my first game though there’s no way I could possibly do this paying a regular American wage. It’s either outsource or don’t make the game at all.
The positive aspect to me is that when the game launches and makes money I can then hire Americans to continue work and help the economy more than if I made nothing at all.
I’m setup here at home with WinMerge + Tortoise CVS and I have to say it’s pretty good. I do have some problems. Like when I got a clean version of an older revision and made changes I couldn’t get it to upload. It complained about branching. I’m also not sure how to select merge blocks with WinMerge. It seems like right now I can see the changes but have to merge them by hand?
But considering these are free tools they are quite nice. I like Tortoise CVS better than VSS in fact since it runs through Windows Explorer.
Kraydl and I have come up with an exciting new game mode I’m for now calling war. You basically have two sides, each with one or more starbases, which can launch carriers which in turn provide bases for and launch player controlled fighters. The objective is to destroy all enemy starbases. Everytime a starbase is destroyed it lowers the enemy population cap so the games have a distinct start and end.
Players buy carrier ships which serve as mobile bases. I think that will be a lot of fun since you will have a sense of ownership over your base. Since only teams buy carriers and multiple teams can share carriers it’s likely you can have entire squads of 50 people play together.
The mode is designed for blocks of 200 players at a time. It can support any number of players since I just spawn more starbases to support them.
My original bandwidth estimates show I can support 4000 players with 100 bytes per second per player where each packet is relayed to 10 guys. This uses about half the outgoing bandwidth cap. Most likely a chaotic zone like this is going to relay every command to 40 guys, so that cuts down the cap to 1000 players. Which is still quite good. No other game that I know of supports meaningful interaction between that many players at once. As starbases are destroyed less players are in the zone so I may be able to increase that number.
It’s been a while since I’ve done any serious game network programming. That is why I was immediately reminded of how hard it was when I got to doing some mesh server topology programming for my game, which I’ve come to realize is essentially an MMO.
Programmers who haven’t done game network programming before naively think of winsock, sendto and recvfrom, and simple serialization. But those functions aren’t the issue. The issue is the nature of the internet and the changes this fundamentally places on how you program.
First, your game code interactions are all asynchronous. You can mitigate this with a powerful low level library, like RakNet, which can impose packet ordering and other features. However, even with that different systems are still asynchronous in relation to each other and there is no way around that. So you might be able to order player A getting into a tank and then driving it, but you can’t order player A in relation to player B, who may have destroyed the tank before OR after player A got in. It’s very similar to writing multithreaded code, except you don’t have the help of synchronization objects (mutex, semaphore, etc).
Second, security is a whole world of worry. Whereas before you only had to worry about what you did write, now you have to worry about what you didn’t write. If you didn’t check for buffer overflow, data underflow, modified/corrupted data, or valid data sent in invalid circumstances you have an exploitable hole. What this means is that for every single packet you get, you have to think of every possible permutation of what the data could possibly be. If you have 100 different kinds of allowed packets, you have to check for overflow 100 times, underflow 100 times, invalid data 100 * the number of variables per packet, and worst of all every possible permutation of world state and packet type.
Third, your code now has to be very robust. You can’t really use fixed-size arrays because what is the longest string someone might type? Where before a function may have just failed, now you need to have error recovery. Your server has to be absolutely crash proof and on top of that you need a relauncher in case it does crash. You may have only logged very common circumstances before but now you need to log every detail of every possible event because the one thing you didn’t log is the one exploit that someone is going to find and use.
Fourth, if you don’t have a communications library, like RakNet, you’ll either end up writing one the hard way or else changing a lot of game code to compensate for not having things such as flow control, packet ordering, security, and reliability. This is not a trivial task.
Lastly, network programming brings with it a lot of required support functionality you wouldn’t otherwise have had to do. Some of these include an autopatcher, different client/server programs, a master server, network statistics tracking, and possibly a database.
As time goes by on my energy is wearing down. It’s not that I’m less eager to make the game but that I get distracted more easily and am more driven to do business stuff than to program. I think I’m getting burnt out by the cycle of programming 2 hours in the morning, 8 hours at work, and then 2-4 hours when I get home. Counting weekends it’s 80-100 hours weeks for over probably a month now.
I decided to pace myself better by accomplishing one major goal each day with the rest of the time spent on whatever I want to do. So for today I put in the options and editor menu and rearranged the projects to make sense in a client/server enviroment.
Tommorow I will, at a minimum, setup the server and server launcher with secure connections.
I figured out a host provider for my game server this morning. I also figured out how to and selected a provider so I can accept credit cards over the net. Because of the per-transaction charge I’m going to shoot for recurring billing every 3 months, rather than every 1 month. It doesn’t sound like much but this is a problem that has I’ve been trying to resolve for weeks now.
With this out of the way I can hopefully spend more time on game development.