![]() |
Game status buffer |
| Address | Length | Description | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 23296 | 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 |
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 |
The control method chosen in the menu.
|
||||||||||||||
| 23301 | 1 |
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 |
The value of ControlMethod when the menu was last scanned, used to make a sound when the selection changes.
|
||||||||||||||
| 23304 | 1 |
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 |
The stack pointer, saved while PrintSprite uses it to read the sprite data.
|
||||||||||||||
| 23307 | 1 |
The distance from the middle of the current room to its east and west walls.
|
||||||||||||||
| 23308 | 1 |
The distance from the middle of the current room to its north and south walls.
|
||||||||||||||
| 23309 | 1 |
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 |
The level of the floor of the current room: an object which would sink below this height lands on the floor instead.
|
||||||||||||||
| 23314 | 1 |
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 |
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 |
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 |
The directions and actions chosen by the player on this pass, as read by ReadControls.
|
||||||||||||||
| 23318 | 1 |
The attribute used when printing text.
|
||||||||||||||
| 23319 | 1 |
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 |
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 |
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 |
The number of lives the player has left (as a BCD number).
|
||||||||||||||
| 23323 | 3 |
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 |
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 |
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 |
Set when all of the cryogenic chambers have been activated.
|
||||||||||||||
| 23332 | 1 |
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 |
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 |
The address of the font used by PrintCharacter when printing text.
|
||||||||||||||
| 23339 | 2 |
The address of the next entry in the list of objects to draw, which DrawChangedObjects and DrawObjectsInOrder_First step through.
|
||||||||||||||
| 23341 | 2 |
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 |
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 |
Set to one when the menu tune has been played, so that it is only played once (see PlayMusicOnce).
|
||||||||||||||
| 23346 | 1 |
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 |
Set when the player is not allowed to drop an object where they are standing.
|
||||||||||||||
| 23348 | 2 |
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 |
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 |
Set while an egg top (object 73) is falling, so that only one of them falls at a time.
|
||||||||||||||
| 23355 | 1 |
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 |
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 |
The number of chambers found to be activated by CountStatistics, as a BCD number.
|
||||||||||||||
| 23359 | 1 |
The number of chambers found not to be activated by CountStatistics, as a BCD number.
|
||||||||||||||
| 23360 | 1 |
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 |
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 |
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 |
Set while one of the land mines is leaping, so that only one of them leaps at a time (see HandleLandMine).
|
||||||||||||||
| 23384 | 32 |
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 |
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 |
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 |
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 |
The object for the upper half of the robot.
|
||||||||||||||
| 23496 | 64 |
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 |
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 |
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 |
An object which is used for printing sprites in the panel and the border.
|
||||||||||||||
| 51741 | 64 |
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 |
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 |
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 |
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.
|