Skip to navigation

Elite on the BBC Micro

Combat rank

The long, long road from Harmless to Elite

Elite is famous for being one of the first open-world games. It doesn't hold your hand or tell you what to do. You can fly wherever you like and take on a role of your own choosing, from humble trader or isolated asteroid miner, to tenacious bounty hunter or vicious pirate. Elite is whatever you want it to be, and it's all part of its charm.

There is, however, an overarching "point" to the game, and that's to increase your combat rank from Harmless to Elite by destroying other ships. It's part of the lure that makes players keep coming back to the game, and part of the reason that people play this game for months on end. That gradual creep towards the ultimate accolade is key to Elite's appeal; there's a reason that it's literally the name of the game.

These are the ranks that are burned into the memories of anyone who's played this game seriously:

  • Harmless
  • Mostly Harmless
  • Poor
  • Average
  • Above Average
  • Competent
  • Dangerous
  • Deadly
  • Elite

Let's take a deeper look at what's involved in progressing from Harmless to the heady heights of Elite.

Keeping track of the combat rank
--------------------------------

The current combat rank is stored as the number of kills, in a 16-bit variable at TALLY(1 0) in the T% workspace - so the high byte is in TALLY+1 and the low byte in TALLY.

If the high byte in TALLY+1 is 0 then we have between 0 and 255 kills, so our rank is Harmless, Mostly Harmless, Poor, Average or Above Average, according to the value of the low byte in TALLY. This is how the lower ranks pan out:

RankNumber of killsFromTo
Harmless0 to 3%00000000%00000011
Mostly Harmless4 to 7%00000100%00000111
Poor8 to 15%00001000%00001111
Average16 to 31%00010000%00011111
Above Average32 to 255%00100000%11111111

If you look at the binary equivalents to these ranks, you can see that if we are Harmless then bits 2-7 are clear, if we are Mostly Harmless or below then bits 3-7 are clear, if we are Above Average or below then bits 4-7 are clear, and if we are Average or below then buts 5-7 are clear. This is no coincidence, as it allows the STATUS routine to calculate the lower ranks with a simple loop that shifts the low byte of TALLY to the right until the result is zero, after which the number of shifts gives us the rank.

It isn't quite so convenient with the higher ranks, which are given in the high byte of the kill count in TALLY+1. If the high byte is non-zero then we are Competent, Dangerous, Deadly or Elite, according to the following values of the high byte:

RankHigh byteNumber of kills
Competent1256 to 511 kills
Dangerous2 to 9512 to 2559 kills
Deadly10 to 242560 to 6399 kills
Elite25 and up6400 kills and up

These ranges don't have shift-friendly binary values, so the STATUS routine calculates the higher ranks with a sequence of CMP instructions.

Right On Commander!
-------------------

The lower ranks come and go fairly quickly, once you've got the hang of combat, but although reaching Competent with 256 kills feels like an achievement - and it is! - it's still only 4% of the way to Elite, despite being the sixth rank of ten. To encourage players to keep on grinding through the ranks, the game flashes up the encouraging message "Right On Commander!" on-screen every 256 kills - in other words, every time the high byte of TALLY gets incremented. The checks for this are done in the EXNO2 routine, which is called after every kill to increment the tally.

The first "Right On Commander!" shows when you go from Above Average to Competent, and happens every 256 kills until you reach Elite, and it keeps on going beyond that. When you become Elite in Elite Dangerous, the message from the Pilots Federation starts off with "Right on Commander!", and although the phrase isn't quite so important in the later games, it's still a popular sign-off amongst Elite veterans, along with "See you in the black" and "o7" (the latter representing a commander saluting).

Combat rank on the BBC Master
-----------------------------

In the BBC Micro, 6502 Second Processor and Electron versions of Elite, you get one kill for each ship you destroy. It doesn't actually matter what you kill, you still get one point towards your combat rank. Asteroids: one kill point. Harmless traders: one kill point. Cargo canisters: one kill point. This led to people sitting outside space stations, armed to the teeth with military lasers, where they would simply point their sights at the docking slot and wipe out the police as they launched; after all, even for mass murderers, your legal status eventually cools down, and you're still left with one kill point per Viper. It's easy pickings.

This all changed with the Commodore 64 version, which the authors started work on once the BBC versions had proven such a success. Instead of one point per kill, the authors implement different kill points for each ship type, along with support for fractional kills. This same approach was carried over into the BBC Master version of Elite, where the kill points are as follows (with the most lucrative shown first):

ShipPoints awarded
Constrictor5.33203125
Cougar5.33203125
Thargoid2.6640625
Fer-de-lance1.25
Cobra Mk III (pirate)1.1640625
Python (pirate)1.1640625
Asp Mk II1.08203125
Anaconda1.0
Cobra Mk III0.9140625
Boa0.83203125
Moray0.75
Python0.6640625
Cobra Mk I0.6640625
Missile0.58203125
Mamba0.5
Adder0.3515625
Rock hermit (asteroid)0.33203125
Sidewinder0.33203125
Krait0.33203125
Gecko0.33203125
Worm0.1953125
Thargon0.12890625
Viper0.1015625
Transporter0.06640625
Escape pod0.0625
Shuttle0.0625
Alloy plate0.0390625
Cargo canister0.0390625
Splinter0.0390625
Asteroid0.03125
Boulder0.0234375

In this more sophisticated system, it's worth tracking down Thargoids, Fer-de-lances and pirates, but it's far less profitable to incinerate police Vipers, cargo canisters or more harmless ships like shuttles and transporters. Sure, you can still sit outside a space station, vapourising Vipers until your lasers are raw, but it's probably easier just to learn how to fight.