![]() |
Game status buffer |
| Address | Length | Description | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 23456 | 1 |
The first seed that the game uses for random numbers. At the start of a game it is set to the low byte of the FRAMES system variable, and it counts up while the menu waits for the player to start. The game uses it to choose the room that the player starts in, the starting places of the special objects and the number of times that the objects that the player must collect are shuffled. This is the top of the stack, which grows down from here.
|
||||||||||||||||||||||||||||||
| 23458 | 2 |
Counts the frames of the game, which also makes it an address that moves through the ROM, so that the bytes that it finds there can be used as random numbers. The low bits of it time the animations of the game.
|
||||||||||||||||||||||||||||||
| 23460 | 1 |
The way that the player chose to control the game on the menu.
|
||||||||||||||||||||||||||||||
| 23461 | 1 |
The second seed that the game uses for random numbers. It changes every time that the game updates an object, and every frame, by adding in the refresh register, the frame counter and the byte that the frame counter points at.
|
||||||||||||||||||||||||||||||
| 23462 | 1 |
The control method as it was before the keys of the menu were read, so that the menu can tell when a key has changed it and beep.
|
||||||||||||||||||||||||||||||
| 23464 | 1 |
The number of areas of the screen that the game has to copy to the screen at the end of this frame, because the objects in them moved. The variables from here onwards are cleared at the start of every game.
|
||||||||||||||||||||||||||||||
| 23465 | 2 |
The stack pointer, which is kept here while the sprite routine is using the stack pointer to read the data of a sprite.
|
||||||||||||||||||||||||||||||
| 23467 | 1 |
The distance in the X direction from the middle of the room (128) to its walls, which comes from the table of room sizes at RoomSizeTable.
|
||||||||||||||||||||||||||||||
| 23468 | 1 |
The distance in the Y direction from the middle of the room (128) to its walls, which comes from the table of room sizes at RoomSizeTable.
|
||||||||||||||||||||||||||||||
| 23469 | 1 |
The attribute that the room is coloured with, which is the bright colour that is stored in the room data.
|
||||||||||||||||||||||||||||||
| 23470 | 1 |
The Z coordinate of the floor of the room, which comes from the table of room sizes at RoomSizeTable. It is 128 in every room.
|
||||||||||||||||||||||||||||||
| 23471 | 1 |
Is non-zero while a portcullis is moving up or down.
|
||||||||||||||||||||||||||||||
| 23472 | 1 |
The number of times that the portcullis in the room has been lowered since the room was entered.
|
||||||||||||||||||||||||||||||
| 23473 | 1 |
Is zero when the player is not changing form. The sun and the moon set it to 1 when it is time for the player to change from a human to a wulf or back. Then, when the transformation starts, it is set to the graphic number of the legs of the player, which is used to give the player the right form again when it ends.
|
||||||||||||||||||||||||||||||
| 23474 | 1 |
Is zero until the first frame of the game has been run, and non-zero after that. The game uses it to avoid saving the special objects of a room that the player has not been in yet when it builds the first room.
|
||||||||||||||||||||||||||||||
| 23475 | 1 |
Is non-zero while the control for picking up or dropping an object is held down, so that holding it does not pick up and drop an object on every frame.
|
||||||||||||||||||||||||||||||
| 23476 | 1 |
Is non-zero when the objects that the player is carrying have changed, to tell the game that it has to show them in the panel again.
|
||||||||||||||||||||||||||||||
| 23477 | 1 |
The controls that are pressed, which are read by ReadControls and tested by the routines that need them.
|
||||||||||||||||||||||||||||||
| 23478 | 1 |
The attribute that the text that is being printed is coloured with.
|
||||||||||||||||||||||||||||||
| 23479 | 1 |
Is non-zero when the panel, the border, the sun or moon and the other information of the screen have to be drawn again, which is when a new room has been built. It is cleared when the game loop has drawn them.
|
||||||||||||||||||||||||||||||
| 23480 | 1 |
Is non-zero when the border has been drawn around the message on the screen. It is cleared when the menu and the end of the game are started, so that they draw the border.
|
||||||||||||||||||||||||||||||
| 23481 | 1 |
The number of days that have passed, as two binary coded decimal digits.
|
||||||||||||||||||||||||||||||
| 23482 | 1 | |||||||||||||||||||||||||||||||
| 23483 | 1 |
The number of objects that have been put into the cauldron.
|
||||||||||||||||||||||||||||||
| 23484 | 1 |
A number that is set to the frame counter at the start of every frame and goes up by one for each object that is updated. A fire that stays where it is uses its lowest bit to decide whether to change its graphic.
|
||||||||||||||||||||||||||||||
| 23485 | 1 |
The Z coordinate that a ball that bounces up and down reaches before it falls again. It is zero until the ball starts to bounce.
|
||||||||||||||||||||||||||||||
| 23486 | 1 |
The number of objects that were drawn on this frame, which the game uses to work out how long to wait before the next frame, so that every frame takes about the same time.
|
||||||||||||||||||||||||||||||
| 23487 | 1 |
Is non-zero while the spiked ball is falling.
|
||||||||||||||||||||||||||||||
| 23488 | 1 |
Is non-zero when the spiked ball is not allowed to drop. It is set from the first bit of the room number when the room is built, and it is cleared when the player picks up an object.
|
||||||||||||||||||||||||||||||
| 23489 | 1 |
The speed of the player in the Z direction on the last frame, which is kept while the player moves, to find out if it has landed.
|
||||||||||||||||||||||||||||||
| 23490 | 1 |
The speed of the ball that bounces in the Z direction on the last frame, which is kept while the ball moves, to find out if it has landed.
|
||||||||||||||||||||||||||||||
| 23491 | 1 |
Is non-zero when all of the objects have been put into the cauldron and the game is ending.
|
||||||||||||||||||||||||||||||
| 23492 | 1 |
Is non-zero while an object that the player has dropped is falling into the cauldron.
|
||||||||||||||||||||||||||||||
| 23493 | 1 |
The Z coordinate of a sparkle that has moved up on this frame, which the game loop uses to play the sound of rising sparkles. It is cleared on every frame.
|
||||||||||||||||||||||||||||||
| 23494 | 1 |
The number of rooms that the player has been in, not counting the first one, which is worked out by PrintPercentageComplete for the results screen.
|
||||||||||||||||||||||||||||||
| 23495 | 2 |
The address of the font that the text routines use, which is the font at Font.
|
||||||||||||||||||||||||||||||
| 23497 | 2 |
The percentage of the game that has been completed. It is stored as four binary coded decimal digits, with the digits of hundreds at PercentComplete and the digits of tens and units at 23498.
|
||||||||||||||||||||||||||||||
| 23499 | 2 |
A pointer into the list of objects to draw, which the routine that wipes the sprites keeps while it works.
|
||||||||||||||||||||||||||||||
| 23501 | 2 |
The place in the list of objects that are drawn of the first of the two objects that the depth sort is comparing.
|
||||||||||||||||||||||||||||||
| 23503 | 2 |
The place in the list of objects that are drawn of the second of the two objects that the depth sort is comparing.
|
||||||||||||||||||||||||||||||
| 23505 | 1 |
Is non-zero when the tune that was started with PlayMusicOnce has been played once.
|
||||||||||||||||||||||||||||||
| 23506 | 1 |
Bit 0 is set while the key that switches on the directional controls is held on the menu, so that holding it does not switch it on and off again.
|
||||||||||||||||||||||||||||||
| 23507 | 1 |
Is non-zero when there is not enough room to drop an object where the player stands.
|
||||||||||||||||||||||||||||||
| 23512 | 16 |
The objects that the player is carrying. There is a place for four of them, each with four bytes, but the first is only used while an object is being picked up, so that the player can carry three. The last of the three is the one that has been carried for longest, and the one that is dropped first.
|
||||||||||||||||||||||||||||||
| 23528 | 32 |
A bit for each of the 256 rooms of the game, which is set when the player has been in the room. The room number is split in two, with the top five bits choosing the byte and the low three bits choosing the bit in the byte. The bits are counted by PrintPercentageComplete for the results screen.
|
||||||||||||||||||||||||||||||
| 23560 | 1272 |
The table of the objects in the room, with 32 bytes for each of up to 40 objects. The last object in the table has its final eight bytes in the same place as the code of GameEntry, which is not needed once the game has started. The table is cleared at the start of the game, and the room objects are built by RetrieveRoom. The first two objects are the two halves of the player, the next two are the objects that the player can pick up in the room, and after those are the objects that make up the room. The bytes of an object are:
|
||||||||||||||||||||||||||||||
| 28658 | 288 |
The special objects of the game, which are the seven objects that the player has to take to the cauldron and the extra life, four of each. Each one has nine bytes, which are described by this table. The graphic numbers are given out at random at the start of a game by InitialiseSpecialObjects, and the current place of each object is copied from where it starts, so that the objects are in a different room each time.
|
||||||||||||||||||||||||||||||
| 49115 | 32 |
An object that is used for drawing the graphics of the panel (the objects that are carried and the lives). Only its graphic number, its flags and its pixel coordinates are used.
|
||||||||||||||||||||||||||||||
| 50253 | 32 |
The object that is used to draw the sun and the moon.
|
||||||||||||||||||||||||||||||
| 53601 | 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 legs and the last 32 bytes are the top half. The byte at PlayerCopy_LegsRoom is the room number of the legs, and the byte at PlayerCopy_TopHalfRoom that of the top half.
|
||||||||||||||||||||||||||||||
| 55539 | 6159 |
The buffer that the game draws into before it is copied to the screen by UpdateScreen. It has a byte for every eight pixels of the screen, with 32 bytes to a line, and the lines are in the order from the bottom of the screen to the top, so the first byte is at the bottom left of the screen and a line above is 32 bytes further on. The pixels of the buffer are 0 for a pixel that is not set.
|
||||||||||||||||||||||||||||||
| 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.
|