Categories
Uncategorized

Sharks and fishes

I had forgotten this for many years, but back in my Subspace days I came up with the phrase “Sharks and fishes” to describe the problem dwindling player population towards the later days of the game. About 20%-25% of the player population would be sharks – skilled players, who could get on a team without too much trouble. The remainder were fishes – food for the sharks, couldn’t get on a team, never had much fun. I knew at the time this is why the game was dying, but it never really occurred to me I was making the same mistake with my own game until I spoke to Joseph Lieberman today.

In your average FPS the difference in kill ratios between the best and worst players is maybe 2:1 to 1:2. In Subspace it was possible to go 30-0, or more, if you really tried. I think I went 200:0 once, more typically I maintained a ratio of 4:1 and that was just through normal play, without even trying to get a ratio. This was unfun for both sides – the newbies get blown away without a chance. The pros have no challenge and are bored.

He pointed out problem after problem with this kind of design, and each time I realized it’s been something I’ve been thinking all along, and knew, but pushed it to the back of my mind. Like how yesterday a couple of newbies came in, and one guy who was moderately good. I was bored in my own game, except for the guy who was moderately good, who was mildly interesting to beat. The newbies quit soon after, even though I was going easy on them, and then the moderately good guy quit too.

Another problem with Subspace was that the community was exclusionary, with private teams, that you could only get in if you were highly talented. This also alienated newbies and led a the slow death for the game.

The result of all of this is that I’m going to try to introduce a greater difference between the ships, weapons, and items. Combat will now depend in large part on how you customize your ship, what ship you picked, with major and noticeable difference between them. Because each ship has weaknesses now, team play becomes more important for complimentary abilities.

This means that even though I’m a better player, I might still die to newbies, just because they had the ship that counterbalanced mine, or I was outnumbered. Essentially squishing down the skill curve so that newbies go from 0 chance to a roughly even chance to win, tilted by skill.

Some people like the challenge that Subspace provided, and I’m going to leave in a few game modes that play to those settings. But I think my main focus and where most of the players are going to be is on the more newbie friendly servers.

Categories
Uncategorized

DirectX install resolved?

The install problems continue. The DirectX web installer Microsoft provides doesn’t connect. Nobody who has used it has ever been able to get it to connect, including myself.

So I was including the 50MB offline installer but as it turns out that didn’t work either. Rather than the installer just running, as is the normal and sensible thing to do, it actually just extracts a bunch of files to a user-specified directory. So the offline installer isn’t an installer at all, it’s just a zip file. You then have to go to the extraction directory and run the exe there. I assumed Microsoft did the sensible thing at first, without checking, so I have myself to blame.

I came across DirectX Installation for Game Developers which goes over which files you need and which you don’t. So I managed to delete most of the files and get it running in silent mode. It’s quite fast too.

Except for PhysX I think my installer should work for most people now.

Categories
Uncategorized

Dropping PhysX soon

Arrrggg!!! Someone made a forum post PhysX wouldn’t install because they are using Windows 98. So looking at their site they only support Windows XP and Windows Vista. That means I’m going to lose about 25% of my business because I made the mistake of not originally checking that PhysX supports older versions of Windows. Damn damn damn! I’d switch to something else or write my own system but the game is already so late that week to change libraries would kill me.

I’m going to just have to suck it up, say “Linux and non-XP support coming soon” and after shipping focus on fixing this.

Categories
Uncategorized

DirectX, PhysX, install hell (again!)

Another couple of launch disasters forestalled today.

First, I was wondering why I have so few players with so many signups. It turns out a significant number of users can’t run the game due to “d3dx9_31.dll” missing when they try to run. So they just gave up, rather than emailed me. I kept telling people to reinstall DirectX but that wasn’t it. I finally tracked down one guy, asked him to download that file and drop it in, and the game worked. Good grief.

I had another guy tell me in the game he had a PhysX card, and after installing my game his computer kept messing up and the game kept crashing. He said he finally figured it out by downloading and installing the latest PhysX drivers. So I check the installer and I AM providing the latest already. After some testing I found that the same installer will uninstall if you run it twice. What happens is people install the game with all the defaults, they already had PhysX installed, and it got uninstalled. Or they install the game twice, with the same effect. Do they honestly expect developers to have a post-install message “Before you can play go download and install PhysX”?

I found a solution via Inno Setup, which is quite a good (and free) installer. With this change it won’t show PhysX in the list if it is already installed.

In the [Files] section:
Source: C:\RakEngine\GMInstaller\Dependencies\PhysX_7.05.06_SystemSoftware.exe; DestDir: {tmp}\PhysX; Flags: deleteafterinstall

In the [Run] section
Filename: {tmp}\PhysX\PhysX_7.05.06_SystemSoftware.exe; Description: “Install PhysX 7.05.06”; Flags: postinstall skipifsilent; Check: PhysXNotInstalled

Add a [Code] section as follows:

[Code]
var
PhysXNotInstalledCalled: Boolean;
PhysXNotInstalledResult: Boolean;

function PhysXNotInstalled(): Boolean;
begin
if not PhysXNotInstalledCalled then begin
PhysXNotInstalledResult := RegValueExists(HKEY_LOCAL_MACHINE, ‘SOFTWARE\Ageia Technologies\PhysX_A32_Engines’, ‘2.7.0’) = False;
PhysXNotInstalledCalled := True;
end;
Result := PhysXNotInstalledResult;
end;

Categories
Uncategorized

Galactic Melee closed alpha

Galactic Melee is pretty solid now so I started closed alpha. I need to advertise to get about 500 testers and make sure it still works with a heavy load.

How alpha proceeds will determine if I start charging and continue development while people play, or halt the project for a year or so while I take a job again and work on it part-time.

Today I will be filling out the webpage content.

Categories
Uncategorized

The morons I fire


void ShowElement(char *elementName)
{
std::string name(elementName);
if (!name.empty())
{
InitElement(name.c_str());
}
}

It was almost literally like that, with the std::string used nowhere else.

This kind of ignorance is why I bitch constantly, although I try not to be a negative person. Sometimes I wonder if I’m just super-negative and sensitive but I don’t think so since I never encountered these kind of problems dealing with other programmers before starting this company.

Categories
Uncategorized

Asteroid Physics

This took a long time to setup. Because of the understanding required to do it properly I didn’t give it to my artists, and will do all the physics in the game myself. This is one of the drawbacks of working over the internet. On-site I probably could have trained artists to do it.

Asteroid Physics

Categories
Uncategorized

Another minor hiring setback

It’s been a bad week ending with another bad hire.

This time I got a contractor to implement the C++ and stored procedures side of the database. We agree on $1500 for his estimate of 30-40 hours of work done over two weeks. One week later he does his first check-in. It’s about 100 lines of C++, two stored procedures, and some project changes, which breaks the build for 4 days. Repeated requests to fix it did not get addressed promptly, so I had to stay up to 4:30 AM on the 4th night to fix it myself. Generally speaking, when 3/4 of a contract duration passes by with no significant work done, the contract isn’t going to get done. So I send him an email canceling the contract and offer him $100 for the effort. He replies that he was actually 80% done, and wanted to finish, but if I cancel now I owe him 80% of the payment ($1200).

We finally agree that I will make the full-payment if he works over the weekend to get everything done. To his credit he put in effort, working about 20 hours over the weekend, and some more hours the following night. However, I effectively had to write all the C++ myself. I didn’t have time to check when he claimed to be finished. Grateful that he did work over the weekend, I sent him the payment. This turned out to be a mistake, since even a cursory check reveals bugs with every query, and his work was incomplete as well. There is still about 10 more hours of work to do. My email to him asking him to finish never got a response.

End result is that he did about 50% of the total work, I did about 30%, and I still have to do about 20%.

Lessons learned:
1. Stick with your gut feelings
2. A contract should have clear payment milestones, and only on acceptance of a milestone is any payment for that milestone due.
3. Short-term contracts are a good way to judge a potential hire because they limit your loss on a bad hire. Test potential hires through contracts before offering a regular position.

Categories
Uncategorized

Kidney infection (?)

Last Saturday I woke up at 6 AM in the morning with the worst pain of my life in my left kidney, and this terrible pressure sensation in my bladder. I couldn’t even stand with the waves of pain, and was shaking and moaning. I thought I would need to go to the hospital and woke up my wife, and sent an email to my workers in case I wouldn’t be back for a while.

My wife gave me a bunch of medicine and acupuncture and about 5 hours later I was feeling good enough to walk again, although tired. I ultimately didn’t go to the hospital because the costs would basically close down development of my game.

My guess from reading around on Google is that it was a kidney and bladder infection caused by not drinking enough water. In truth I had been barely eating or sleeping the last 3 months since all my time was spent focused on working. I had some antibiotics so am taking those along with some Chinese medicine.

My kidney is still sensitive to the touch but doesn’t hurt continually anymore. I get too tired to keep working after about 8 hours so take it easy the rest of the day. Each day I feel better, especially in the mornings.

I don’t think this will delay the game too much, since most of the delay is waiting for the artists anyway. It just means a little less polish.

Categories
Uncategorized

How I got to 30 FPS to 10 FPS

Just when I was about to start alpha another problem strikes. I added help text messages to the chat window, and this is the first time we tested a full chat window full of messages.

In theory (and usually in practice) rendering static text is a trivially fast operation. Once you calculate the dimensions you save to a billboard and save the billboard. If you need to resize the text you just calculate when necessary.

I have no idea what the hell CEGUI is doing but in the same scenario in debug I go from 30 FPS to less than 10 FPS. Even if I just do

a
a
a
a
a

My FPS drops by 10. So I’m profiling CEGUI with Devpartner Studio to see if I can find what the problem is. It’s not too hopeful because I don’t know their code. But it’s worth a shot.

They recommend in the forums to use multi-line edit boxes, but I think rather than do that I will abandon CEGUI for the chat Window and render to texture the font, then just store that the correct way.

Profile attached. This is with 6 static text lines on the screen. Click to see the full image.

CEGUI Profile