![]()  | 
Routines | 
| Prev: 43958 | Up: Map | Next: 44186 | 
| 
 
Used by the routine at Handler_DisplayRoomImage.
 
Handles displaying the exits available for the current room.
 
 | 
||||
| Handler_RoomExits | 44034 | CALL ClearScreen | Call ClearScreen. | |
| 44037 | LD A,24 | Set up the printing position. | ||
| 44039 | CALL Print_RoomDescription | |||
| 44042 | CALL GetRoomPointer | Call GetRoomPointer which loads HL with the room data pointer. | ||
| 44045 | LD D,H | Store this in DE for later. | ||
| 44046 | LD E,L | |||
| 
 
Count the number of exits in the room data.
 
 | 
||||
| 44047 | LD B,6 | Set an "exits" counter in B of 6. | ||
| 44049 | LD C,0 | Initialise C to 0 to count the number of valid exits. | ||
| 44051 | XOR A | Set A to 0 which is used just for the comparison. | ||
| RoomExitsCount_Loop | 44052 | CP (HL) | Does this room have an exit? | |
| 44053 | JR Z,RoomExitsCount_Skip | Jump to RoomExitsCount_Skip if this room doesn't have an exit for this position. | ||
| 44055 | INC C | Increment the valid exits count by one. | ||
| RoomExitsCount_Skip | 44056 | INC HL | Move to the next byte of room data. | |
| 44057 | DJNZ RoomExitsCount_Loop | Decrease the exits counter by one and loop back to RoomExitsCount_Loop until all the exits have been checked. | ||
| 
 
Process the exits count result.
 
 | 
||||
| 44059 | OR C | Jump to RoomExits_YouCanSee if no exits were found. | ||
| 44060 | JR Z,RoomExits_YouCanSee | |||
| 44062 | LD A,C | Jump to RoomMultipleExits if more than 1 exit was found. | ||
| 44063 | CP 1 | |||
| 44065 | JR NZ,RoomMultipleExits | |||
| 
 
Only one exit was found:
 
Print "
There is an exit ".
 
 | 
||||
| 44067 | LD HL,43178 | HL=Messaging_ThereIsAnExit. | ||
| 44070 | CALL PrintString | Call PrintString. | ||
| 44073 | LD H,D | Retrieve the room data pointer and load it into HL. | ||
| 44074 | LD L,E | |||
| 44075 | LD IX,43746 | Set a pointer in IX to Table_Directions. | ||
| 44079 | XOR A | Set A to 0 which is used just for the comparison. | ||
| 44080 | JR RoomCheckForExit | Jump to RoomCheckForExit. | ||
| 
 
Move both the pointers to the next item of data (increment by two for the direction name table pointer as it contains addresses).
 
 | 
||||
| RoomCheckForExit_Loop | 44082 | INC HL | Move to the next byte of room data. | |
| 44083 | INC IX | Increment the direction name table pointer by two. | ||
| 44085 | INC IX | |||
| RoomCheckForExit | 44087 | CP (HL) | Jump to RoomCheckForExit_Loop if the current exit isn't a valid exit. | |
| 44088 | JR Z,RoomCheckForExit_Loop | |||
| 44090 | LD L,(IX+0) | Get the direction name from the direction name table. | ||
| 44093 | LD H,(IX+1) | |||
| 44096 | CALL PrintString | Call PrintString to print the direction name. | ||
| 44099 | JR RoomExits_PrintFullStop | Jump to RoomExits_PrintFullStop. | ||
| 
 
More than one exit was found:
 
Print "
There are exits:-".
 
 | 
||||
| RoomMultipleExits | 44101 | LD HL,43159 | HL=Messaging_ThereAreExits. | |
| 44104 | CALL PrintStringAndNewline | Call PrintStringAndNewline. | ||
| 44107 | LD H,D | Retrieve the room data pointer and load it into HL. | ||
| 44108 | LD L,E | |||
| 44109 | LD IX,43746 | Set a pointer in IX to Table_Directions. | ||
| 44113 | XOR A | Set A to 0 which is used just for the comparison. | ||
| 44114 | JR RoomCheckForExits | Jump to RoomCheckForExits. | ||
| 
 
So as not to corrupt the pointer to the room data (as HL is also used when printing), it's temporarily held in DE.
 
 | 
||||
| RoomExits_Initialise | 44116 | EX DE,HL | Switch back the DE and HL registers. | |
| 
 
Move both the pointers to the next item of data (increment by two for the direction name table pointer as it contains addresses).
 
 | 
||||
| RoomCheckForExits_Loop | 44117 | INC HL | Move to the next byte of room data. | |
| 44118 | INC IX | Increment the direction name table pointer by two. | ||
| 44120 | INC IX | |||
| RoomCheckForExits | 44122 | CP (HL) | Jump to RoomCheckForExits_Loop if the current exit isn't a valid exit. | |
| 44123 | JR Z,RoomCheckForExits_Loop | |||
| 44125 | EX DE,HL | Temporarily store the room data pointer in DE. | ||
| 44126 | LD L,(IX+0) | Get the direction name from the direction name table. | ||
| 44129 | LD H,(IX+1) | |||
| 44132 | CALL PrintString | Call PrintString to print the direction name. | ||
| 44135 | DEC C | Decrease the valid exits count by one. | ||
| 44136 | LD A,C | Jump to RoomExits_PrintFullStop if there are no more exits to process. | ||
| 44137 | CP 1 | |||
| 44139 | JR C,RoomExits_PrintFullStop | |||
| 44141 | JR Z,RoomExits_PrintAmpersand | Jump to RoomExits_PrintAmpersand if there is only one exit left to process. | ||
| 
 
Print a comma character: " 
,".
 | 
||||
| 44143 | LD A,44 | A=44. | ||
| 44145 | CALL PrintCharacter | Call PrintCharacter. | ||
| 44148 | XOR A | Reset A back to 0 for the comparison. | ||
| 44149 | JR RoomExits_Initialise | Jump back to RoomExits_Initialise to continue processing. | ||
| 
 
Print " & ".
 
 | 
||||
| RoomExits_PrintAmpersand | 44151 | LD HL,43155 | HL=Messaging_Ampersand. | |
| 44154 | CALL PrintString | Call PrintString. | ||
| 44157 | XOR A | Reset A back to 0 for the comparison. | ||
| 44158 | JR RoomExits_Initialise | Jump to RoomExits_Initialise to continue processing. | ||
| 
 
Print ".".
 
 | 
||||
| RoomExits_PrintFullStop | 44160 | LD HL,43541 | HL=Messaging_FullStop. | |
| 44163 | CALL PrintStringAndNewline | Call PrintStringAndNewline. | ||
| 
 
Are there any objects here?
 
 | 
||||
| RoomExits_YouCanSee | 44166 | LD A,(42947) | A=*CurrentRoom. | |
| 44169 | CALL CheckRoomObjects | Call CheckRoomObjects. | ||
| 44172 | RET NZ | Return if no objects were found at this location. | ||
| 
 
Print "
You can see:-".
 
 | 
||||
| 44173 | LD HL,43140 | HL=Messaging_YouCanSee. | ||
| 44176 | CALL PrintStringAndNewline | Call PrintStringAndNewline. | ||
| 
 
Print the objects at this location.
 
 | 
||||
| 44179 | LD A,(42947) | A=*CurrentRoom. | ||
| 44182 | CALL PrintObjects | Call PrintObjects. | ||
| 44185 | RET | Return. | ||
| 
 
View the equivalent code in The Jewels Of Babylon.
 
 | 
||||
| Prev: 43958 | Up: Map | Next: 44186 |