Skip to navigation

Elite on the BBC Micro and NES

Technical information for the Elite Compendium

Details of all the hacks and enhancements in the Elite Compendium

The Elite Compendium combines a number of my Elite hacks into the ultimate Acornsoft Elite experience. This page describes the hacks that are unique to the Compendium, such as red enemy lasers on the BBC Master:

Red enemy lasers on the BBC Master in the Elite Compendium

If you want to see exactly how the code for the Compendium version of BBC Master Elite differs from the official Acornsoft version, you can check out the elite-compendium branch in the accompanying repository. Search the source code for "Mod:" to see every single modification to the original version.

You can find links below to all the other hacks that are included in the Compendium, but first let's look at all the Compendium exclusives.

The Trumbles mission
--------------------

The Commodore 64 version of Elite introduced the world to the Trumbles, a cuddly collection of furry friends that you can accept as a gift from the not-at-all-shady Merchant Prince of Thrun:

The Trumbles mission on the BBC Master in the Elite Compendium

If you accept, then you start off with just one Trumble in the hold:

The Trumbles mission on the BBC Master in the Elite Compendium

Soon enough it breeds, and then breeds some more, until it all gets totally out of control and a mass of Trumbles takes up all of your cargo space, eating all your food and narcotics before crawling out of the airlock and (in the Commodore 64 version), smothering your Cobra's canopy and blocking your view.

The Trumbles mission on the BBC Master in the Elite Compendium

This lighthearted mission was added to take advantage of the Commodore 64's hardware sprites, which made it easy to overlay fluffy aliens over the top of the space view. However the mission was dropped when the 6502 Second Processor and Commodore 64 versions were merged to create the BBC Master version, as the latter doesn't support sprites (though quite a lot of Trumble code remains in the Master version, albeit dormant).

Luckily for those of us trying to stick to the Elite canon, the NES version of Elite also contains the Trumbles mission, but without the sprites (the NES does have sprites, but they are all to make the game work on a console - see the deep dive on sprite usage in NES Elite for details). The Trumbles mission in the Compendium is therefore a relatively simple port of the NES version's Trumble-related code, some of which is already in the Master binaries (such as the breeding code in SOLAR), while other code is in the Master source but is commented out (such as the mission checks in DOENTRY and the briefing routine in TBRIEF). Finally, other parts of the code are left blank in the Master, like text tokens 198 and 199 in TKN1, which are simply empty strings in the Master version but contain the mission briefing in the NES version.

Note that I stuck to calling them Trumbles in-game, just like the Commodore 64 version, rather than using the NES's rather more trademark-savvy Squeakys. The trigger point, however, is the 6553.6 credit score of the NES, so the Compendium version is a genuinely hybrid mission.

For more information, see the deep dive on the Trumbles mission.

Docking and fuel scoop improvements
-----------------------------------

The NES version makes docking a lot easier than in previous versions. The most obvious difference is that you start the game with a docking computer already installed, but there are other more subtle changes in the NES version, too. I thought long and hard about whether to backport these features into the Compendium, but I think they're worthy improvements to quality of life (though I haven't backported the docking computer for the default commander - that feels like a step too far!).

Here's the NES code that I backported to the Compendium:

  • The docking computer can no longer kill you - see part 9 of the main flight loop.
  • The station no longer spawns traders, like Transporters or Shuttles, while the docking computer is activated - see part 2 of TACTICS.
  • Once you're inside the station's safe zone and you've activated your docking computer, you can press "J" to dock instantly - see WARP.
  • There's a fee of five credits for using your docking computer, charged at the point of activation (and if you don't have enough cash, you'll have to dock manually) - see TT102.
  • Fuel scoops will only work when you are moving - see part 15 of the main flight loop.

I grew up on the BBC Micro cassette version of Elite, which didn't have enough memory for a fancy AI-powered autopilot, so for me having an optional insta-dock is a bit like coming home.

Red enemy lasers
----------------

The BBC Master is known for its flicker-free ships when compared to earlier versions of Elite. The improved algorithm gives much smoother ship-drawing, and it's such a simple fix that it was the first Elite hack that I backported, and is still one of the best (see the flicker-free hack for more information).

It is not perfect, however. The 6502 Second Processor version of Elite came out a year before the BBC Master version, and although it flickers, it does have one thing that the BBC Master doesn't: red enemy lasers. They look great, so much so that the cyan lasers of the BBC Master version look positively dull. Here's a fight with the BBC Master's standard cyan lasers:

Cyan enemy lasers in the BBC Master Elite

and here's the same fight with the 6502 Second Processor version's red lasers:

Red enemy lasers on the BBC Master in the Elite Compendium

Red lasers are so much better!

The reason for this backwards step is that the Master's improved algorithm treats the enemy's laser line as just another line in the heap. The improved algorithm draws and removes lines one at a time in way that means we simply don't know which line in the heap is the laser line, so it isn't possible to know when to erase and redraw the line in red rather than cyan. As a result the laser line has to be drawn in cyan, albeit without a flicker.

The solution is to extract the laser line from within the line heap and always store it as the first line in the heap. If there is no laser being fired then this slot is blank, but if there is a line in there then we know to draw and erase it in red. Because the ship heaps are sized to cater for a laser line as well as the maximum number of visible edges in the ship blueprint, we don't need to resize the heap, we just need to ensure that new ships are spawned with a blank laser line at the start of the heap. We can denote a blank laser line by having a y-coordinate of 255 in the start point, as this will never happen with a valid laser line (as the maximum y-coordinate in the space view is 191).

Slowing down the co-pro version
-------------------------------

Elite on the BBC Micro's 3MHz 6502 Second Processor is brutally fast - so fast that it's arguably not much fun. Run the same game on the BBC Master's 4MHz internal 65C102 co-processor, and even an iron ass won't save you. It's way too fast.

The version of 6502 Second Processor Elite in the Elite Compendium therefore contains code to make the main flight loop wait until a minimum number of vertical syncs have passed before moving on to the next iteration. This ensures that the game never runs too fast, but it also doesn't speedbump the processor when a lot is happening, so you rarely get slowdown in normal play, and if things do hot up and the engine does start to struggle, at least you know it would be doing the same in the original version.

It's a lot more enjoyable this way, I think.

Fixing the delete file bug
--------------------------

The BBC Master version of Elite has a nasty file-related bug in the DELT routine (a bug which was fixed for the BBC Master Compact). If you delete a file using the disk access menu, then the code for the save option gets corrupted - specifically, when updating the delete command string in DELI with the name of the file to delete, the code accidentally spills over into the save command string in savosc, overwriting the first character (the "S" of the "SAVE" command). So if you then try to save your commander, you get a "Bad command" error and the file isn't saved.

It's a one-instruction fix, but makes a big difference.

Fixing the extended system description (NRU%) bug
-------------------------------------------------

At the start of the main source file in both the 6502 Second Processor and BBC Master versions, the configuration variable NRU% is set to 0, unlike the BBC Micro disc and NES versions, which correctly set NRU% to match the number of entries in the RUGAL table. This is a bug, and it breaks the extended system description routine in PDESC.

The effect is to make PDESC search in the wrong place for system description override data; specifically, instead of searching the RUGAL table for system/mission criteria, it first searches RUGAL-1 and then searches RUGAL+254 to RUGAL+0. RUGAL is only 25 bytes long in the 6502 Second Processor version and 26 bytes long in the Master version, and it is followed by the RUTOK text token table, so this means PDESC ends up searching RUTOK for override criteria instead of RUGAL, and if it finds a match, it then tries to print text tokens from the unrelated memory after the end of RUTOK. This doesn't end well.

For example, if we are at system 3 in galaxy 0 (Biarge) during mission 1, then PDESC matches the &83 at location RUGAL-1+224, so it then tries to print token 224 from RUTOK. This crashes the game as RUTOK only contains 27 tokens, so the print routine ends up in a sea of nulls after the end of the game code, where it infinitely loops looking for the non-existent token 224.

The fix is easy - just change NRU% back to the number of entries in the RUGAL table and the bug goes away.

Information on the other hacks in the Compendium
------------------------------------------------

The Compendium also includes a number of hacks that are available for a larger range of computers (including the Acorn Electron and Commodore 64). You can read more about them in their own sections of the site. Here are the details: