Address Length Description
23296 1
Random Seed 1
The first random number seed. It is set from the low byte of FRAMES when the game is loaded, goes up by one every time the menu is redrawn, and is used to choose where the special objects are placed and where the player starts.
23298 2
Frame Counter
Counts the frames of the game, which also makes it an address that moves through the ROM, so that the byte found there is added into RandomSeed2 to stir it up. The low byte times the animations and the sound effects and is used as a source of random numbers.
23300 1
Control Method
The control method chosen in the menu.
Bits Meaning
1-2 0 keyboard, 1 Kempston, 2 cursor, 3 Interface II
3 Set when directional control is on
23301 1
Random Seed 2
The second random number seed, which is the one the game normally asks for when it needs a random number. It is stirred up once on every pass of the main loop.
23302 1
Previous Control Method
The value of ControlMethod when the menu was last scanned, used to make a sound when the selection changes.
23304 1
Wiped Area Count
The number of regions of the screen buffer which have been wiped by DrawChangedObjects and are waiting on the stack to be copied to the screen. This is the first of the variables which are cleared at the start of every game.
23305 2
Saved Stack Pointer
The stack pointer, saved while PrintSprite uses it to read the sprite data.
23307 1
Room Size X
The distance from the middle of the current room to its east and west walls.
23308 1
Room Size Y
The distance from the middle of the current room to its north and south walls.
23309 1
Room Colour
The colour of the current room (an ink colour from 0 to 7), which is used for the whole of the attribute file.
23310 1
Floor Height
The level of the floor of the current room: an object which would sink below this height lands on the floor instead.
23314 1
Room Flags
Bit 0 is set on every pass of the main loop and is cleared again when the objects of the room have been saved to the special objects table by UpdateSpecialObjects. It is clear at the start of a game so that nothing is saved before the first room has been built.
23315 1
Pickup Drop Pressed Flag
Set while the pick up and drop key is held down, so that an object is only picked up or dropped once for each press.
23316 1
Objects Carried Changed Flag
Set when the player picks up or drops an object, to say that the carried objects shown in the panel have to be redrawn.
23317 1
Controls Pressed
The directions and actions chosen by the player on this pass, as read by ReadControls.
Bit Control
0 Left
1 Right
2 Forward
3 Jump
4 Pick up or drop
5 Set by ReadControls_Finish
23318 1
Text Attribute
The attribute used when printing text.
23319 1
Redraw Panel Flag
Set when a new room has been built, or an ending scene is being shown, to say that the status panel and the colours have to be redrawn on this pass of the main loop.
23320 1
Border Drawn Flag
Set by DisplayTextList once it has printed the border, so that the border is only drawn the first time that a list of text is displayed. It is cleared by the menu (GameMenu) and by the game completed scene (GameCompleted).
23321 1
Position Offset
The offset applied to the positions of the objects as RetrieveRoom builds a room, set by the objects of type 0 in the data for the room (see RoomData). Bit 0 moves the objects half a place along the x axis, bit 1 half a place along the y axis, and bits 2 to 7 up the z axis.
23322 1
Lives
The number of lives the player has left (as a BCD number).
23323 3
Saved Position
A copy of the x, y and z coordinates of a block, which SavePosition saves and ComparePosition compares with the current position to find out whether the block has moved.
23326 1
Objects Drawn
The number of objects drawn on this pass of the main loop. It is used to slow the game down when there are only a few objects.
23328 2
Object Type Table Address
While a room is built by RetrieveRoom this word holds the address of the table of object types that is in use: ObjectTypes at first, and SecondObjectTypes once an object of type 31 has been met in the data for the room. Its high byte is also used by MovePlayer to hold the vertical speed of the player before it was adjusted by the collision routines.
23331 1
Game Completed Flag
Set when all of the cryogenic chambers have been activated.
23332 1
Game Over Flag
Set when the scene for the end of the game is about to be shown (see GameOver), and not cleared again until the game restarts. While it is set the pixel positions of the objects are left as the scene set them (CalculatePixelCoordinates), no controls are read (ReadControls) and the main loop only refreshes the screen when the panel needs to be redrawn (42743).
23333 1
Block Scratch
The height (Z coordinate) up to which a block that is being moved by HandleRisingBlock or HandleMovingBlock rises after it has been pushed down. It is set from the block that is handled first while it is zero (HandleRisingBlock adds 48 to the height of its block) and it is cleared when a room is built. The use of the height is inferred from HandleMovingBlock_TestHighestPoint, where the rising stops once a block is higher than it.
23335 2
Font Pointer
The address of the font used by PrintCharacter when printing text.
23339 2
Drawing List Pointer
The address of the next entry in the list of objects to draw, which DrawChangedObjects and DrawObjectsInOrder_First step through.
23341 2
First List Position
The address in the list at ObjectsToDrawList just after the entry of the first object of the pair that DrawObjectsInOrder_First is comparing (the object at IX). When that object is drawn, DrawNextObject uses this address to flag its entry as drawn.
23343 2
Second List Position
The address in the list at ObjectsToDrawList just after the entry of the other object of the pair that DrawObjectsInOrder_First is comparing (the object at IY). If that object has to be drawn first, CompareWithOtherObject copies this address to FirstListPosition.
23345 1
Tune Played Flag
Set to one when the menu tune has been played, so that it is only played once (see PlayMusicOnce).
23346 1
Directional Key Pressed Flag
Bit 0 is set while the key for directional control is held down in the menu, so that the setting is only switched once for each press.
23347 1
No Room To Drop Flag
Set when the player is not allowed to drop an object where they are standing.
23348 2
Chamber Address
The address, in the data for the rooms, of the chamber in the current room. When a chamber is activated HandleValve sets the three lowest bits of the byte at this address to show that the chamber has been used.
23350 4
Light Years Remaining
The four digits of the light years remaining counter. Each byte holds a digit in its upper four bits and in its lower three bits the stage of the rolling animation that is used when the digit changes (see DecrementLightYears). The game is over when all four digits are zero.
23354 1
Egg Top Flag
Set while an egg top (object 73) is falling, so that only one of them falls at a time.
23355 1
Egg Top Disabled Flag
Set when a room is built if the room number is even, and cleared when the player picks up an object or an extra life. While it is set the egg top (object 73) does not move.
23356 2
Cryonauts Lost
The number of cryonauts who will be lost, as a four digit BCD number. CountStatistics counts the cryonauts in the chambers which have not been activated, for the game over display.
23358 1
Chambers Found Activated
The number of chambers found to be activated by CountStatistics, as a BCD number.
23359 1
Chambers Not Activated
The number of chambers found not to be activated by CountStatistics, as a BCD number.
23360 1
Chambers Activated
The number of cryogenic chambers that the player has activated so far, as a BCD number. The game is completed when it reaches 36.
23361 1
Game Over Scene Stage
Zero until the alarm in the game over scene has flashed 16 times (see HandleAlarm). Then it is set to 1, and is used by the objects which attack the robot: bit 7 is set while one of them is moving, and the lower bits count the attacks that have been made. The game restarts when the count reaches 16.
23362 1
Remote Control Command
The command sent to the remote control robot by the pads in the room: 1 to stop, or 2 to 5 to go west, north, east or south. Bit 7 is set while a robot is listening for commands (see HandleRemoteControlRobot).
23363 1
Land Mine Flag
Set while one of the land mines is leaping, so that only one of them leaps at a time (see HandleLandMine).
23384 32
Rooms Visited Bitmap
One bit for each of the 256 rooms, set when the player has been into the room. They are counted for the game over display.
23416 4
Objects Carried Header
The record of the object that was picked up last, with the same layout as the entries that follow (see ObjectsCarried). It is written by HandlePickupAndDrop_PickUp from the object number, the flags and the two bytes at offsets 16 and 17 of the record of the object that has been picked up (the byte which they address is cleared), and it is cleared by 48747. Why the record is kept here is not yet known.
23420 12
Objects Carried
The objects that the player is carrying. There is room for three, each using four bytes: the first byte of each is the number of the object (or zero for an empty space), the second is its flags and the other two are an address that was held in the record of the object. The status panel shows the objects by drawing their sprites.
23432 32
Player Bottom Object
The object for the lower half of the robot. Every object in the game is held in a block of 32 bytes: byte 0 is the number of the sprite (zero if the slot is unused), 1 to 3 are the x, y and z coordinates, 4 to 6 the width, depth and height, 7 the flags, 9 to 11 the speeds along each axis, 12 and 13 more flags, 16 and 17 are for use by the update routine of the object, 18 and 19 are the pixel offsets of the sprite and 24 to 27 are the size and position of the sprite on the screen.
23464 32
Player Top Object
The object for the upper half of the robot.
23496 64
Special Object Slots
The objects for the special objects (the valves and the extra lives) which are in the current room. They are copied from the table at SpecialObjects when the room is built by PlaceSpecialObjectsInRoom, and back again by UpdateSpecialObjects.
23560 1664
Room Objects
The rest of the objects in the current room, which are built by RetrieveRoom: the walls, the blocks and anything else that was put there by the data for the room.
30435 324
Special Objects
The table of the 36 special objects: the valves which have to be found and put on the sockets, and the extra lives. Each entry has nine bytes. The first is the number of the object and starts as zero, because the objects are chosen at random when a game starts (by InitialiseSpecialObjects). The next four are the starting position of the object (its x, y and z coordinates and the number of the room), which are copied by InitialiseSpecialObjects to the last four bytes, where the current position is kept (see UpdateSpecialObjects).
48440 32
Sprite Object
An object which is used for printing sprites in the panel and the border.
51741 64
Copy Of Player
A copy of the two objects of the player, as they were when the player entered the room (or as they are at the start of the game), which is put back by LoseLife when a life is lost. The first 32 bytes are the bottom half and the last 32 bytes are the top half. The byte at 51749 is the room number of the bottom half, and the byte at 51781 that of the top half. The byte at 51757 is the sprite that the bottom half will have when it appears, and the byte at 51789 is the sprite that the top half will have.
53760 6167
Screen Buffer
The buffer in which the screen is built (see UpdateScreen), one byte for each eight pixels. The buffer is built from the bottom of the screen up.
61696 256
Reversed Byte Table
The table of every byte with its bits in the opposite order, which is built by BuildLookupTables. It is used to flip sprites from left to right.
61952 3584
Shifted Byte Tables
The tables of shifted bytes that are built by BuildLookupTables and used to draw a sprite that does not start on a byte boundary. There are two pages for each shift of one to seven bits to the right, with the first page of the pair at 240 plus twice the shift, so the table for a shift of one bit starts at ShiftedByteTables and the table for a shift of seven bits starts at 65024. The first page of a pair has the inverse of the byte after it has been shifted to the right, and the second has the inverse of the bits that were pushed out of the byte, which go into the next byte of the line.