Scoring in Orbital Express

After Ludum Dare, it’s back to working on the game I blogged about last week. Name clashes notwithstanding, I’ve decided to call it Orbital Express after all. As I mentioned, there is work to be done on progression, balancing and scoring.

Current state

Currently, the core game loop works as follows. Each player gets 10 turns, and each turn you get a random city anywhere in the world. You shoot in its general direction, and the game calculates how close you got (in kilometres; later to be converted to miles for our American friends). Your score is inversely proportional to that:

score += 10000 / distance_in_km

Whoever has the most points at the end wins. That’s all.

There are several problems with this.

One, it is quite unforgiving. Especially if you get a city whose location you don’t know, there’s no opportunity to learn and do better. You get shown where it is, and then it’s the next player’s turn.

Two, there is no sense of progress. Every turn is the same as the last.

Three, I’m not sure the multiplayer aspect will take off. I do envision a group of friends standing around in the pub, passing the phone between them, but I’m really not sure if it will actually happen. So it will have to work as a single player game as well, and it doesn’t, really. You could just compete against yourself for a highscore, and I’m sure you’d get better over time (I certainly did), but there’s little incentive to do so.

Four, the scoring is pretty untransparent. The game shows the distance, but not the formula; and if it did, it would feel pretty arbitrary.

The plan

The most important thing to add is a sense of progress, a sense that you’re getting somewhere in the game. I had a vague feeling about this, but my success with Glauron really drove the point home.

So let’s try adding levels, or “tiers” as I call them (because usually in games, level progression is strictly upwards). You start on Tier 1 and can get promoted all the way to Tier 5. On Tier 1, you only get cities nearby, which are easier to hit. Each next tier gives you cities farther away, until the entire world is covered. For example (the numbers may need tweaking):

Tier 1: up to 1000 km
Tier 2: 1000-2000 km
Tier 3: 2000-4000 km
Tier 4: 4000-8000 km
Tier 5: 8000 km and beyond

Note that the maximum distance, since it’s measured over the ground, is half of the circumference of the Earth, or pretty much exactly 20000 km, since this is how the meter was defined in the first place.

So how do you get promoted? I considered promoting you if you get “close enough” a couple of times, but again, it would be really untransparent. So I decided to make it more binary: you either hit, or you don’t. A hit is defined as a radius depending on the distance between you and the target (again the number may need tweaking):

maximum_distance_for_hit = 1/3 * distance_to_target

At the same time, I’m making it more forgiving by giving you three tries. If you don’t hit on the first try, you do get to see where your target was, so you have a chance to improve your aim.

So now there’s a simple and understandable definition of promotion: you get promoted if you hit on he first try. And, to make it more tense, and self-balancing to boot, if you still haven’t hit after three tries, you get demoted to the previous tier.

I think this approach will also make it more interesting in single player mode, since you want to get to the next tier and see what targets will be next on the list. In fact, I’m going to focus mostly on single player first; interleaving turns to make a multiplayer mode should be easy enough afterwards.

Oh, and what about scoring? I think the points will seem less important after this, but I still want to make sure that the higher tiers are actually more lucrative (even if you get bumped back down soon). So there will be a multiplier based on the tier, and maybe five or so discrete “rings” with different points assigned to them. I’ll have to experiment with that a bit.

Now off to implement this and see how this works out…