The tape
The disassembly is of the original tape, loaded the way a Spectrum loads it: SkoolKit's tap2sna runs the ROM's own LOAD on a simulated machine and stops at ENTRY, where the BASIC loader's RANDOMIZE USR 25344 enters the game, before the game has run a single instruction. That matters here: the game turns sprites round in place as objects face about, rewriting their bytes and the flags in their headers, and at the start of every game it rewrites the rooms' colour bits and the places the valves lie, so an image taken once it has run is no longer the tape. The tape holds a BASIC loader, the loading screen and one block of code and data, from 25341 ($62FD, one past the loader's CLEAR) to the very top of memory. Nothing is encrypted and there is no protection.
Code and data
Which bytes are code was found by running the game, not by reading it. The build plays it in SkoolKit's simulator -- with each control method and directional control, walking, turning, jumping, picking up and putting down, pausing, in every room, and through staged scenes for game over, the chambers, the ending, the clock running out, an extra life, the remote-controlled robots and the things that drop from the ceiling -- and records every address the processor fetches an instruction from. Recursive descent then follows the branches out of what ran, and the jump table of update routines (UPDATES), inventing nothing. Everything else is data. The level data -- the room directory (ROOM02), the object templates and backgrounds, the places the valves lie (PLACES), the graphic table (GRAPHICS), the sprites and the font -- is laid out a record per entry from the game's own bytes each time the disassembly is built, so the game's design is never written into the repository's files. Each sprite's picture is drawn from its bytes the way the game's drawing code reads them. The listing reassembles byte for byte with sjasmplus, and the snapshot rebuilt from it is the one the tape made, byte for byte.
What is disassembled
Everything from SEED to the top of memory. Below the block are the game's variables and its 56 object records, which it clears before it uses them; the listing shows what the snapshot holds there, which is the ROM's system variables and the BASIC loader. Above the code the block carries bytes that are not the game's -- a copyright line from 1984, the Spectrum ROM's letters, what looks like Interface 1 ROM code and its error messages, another font and stack debris -- saved with it because the block runs on to the top of memory. They lie where the game keeps its screen buffer (BUFFER), its stack and its lookup tables (MIRROR_TABLE), and every one is overwritten before it is read.
Names, and how things were checked
No one else's disassembly of Alien 8 was used. Alien 8 is built on Knight Lore's engine, and where its code is Knight Lore's the names follow this project's own Knight Lore and Pentagram annotations, which in turn credit the reference map of Knight Lore by tcdev and Michael R. Cook; Alien 8's own routines are named from reading and running them. The pictures on these pages are drawn by the build from the game's own bytes. The bugs, pokes and facts marked watched were checked on a private zx_server loaded with the pristine snapshot. Each wait was a breakpoint at the end of a turn with a time limit, rooms were entered by the game's own restart, and staged states are named in each entry. The 128K trials used a snapshot made from the loaded game, paged as the 128's Tape Loader leaves the machine. The Knight Lore comparisons are byte comparisons against Knight Lore's loaded snapshot.