![]() |
Routines |
| Prev: 45438 | Up: Map | Next: 45791 |
|
Used by the routines at ProcessScriptDisplay and ParseInput.
Clears the room parameters and the display buffer, then looks for a room record.
|
||||
| InitialiseDisplayBuffer | 45457 | LD A,255 | Write 255 to the room graphics parameter and write 255 to the room display parameter. | |
| 45459 | LD (41013),A | |||
| 45462 | LD (41012),A | |||
| 45465 | LD HL,45421 | Call ClearBuffer to clear buffer. | ||
| 45468 | LD B,17 | |||
| 45470 | CALL ClearBuffer | |||
| 45473 | CALL ProcessDisplayPointer | Go to InitialiseDisplayBuffer_Next if a room record matches. | ||
| 45476 | JR NZ,InitialiseDisplayBuffer_Next | |||
| 45478 | LD HL,47180 | Leave the object-table handler at 47180. | ||
| 45481 | XOR A | Clear A. | ||
| 45482 | RET | Return. | ||
| InitialiseDisplayBuffer_Next | 45483 | LD A,1 | Use the object runtime table (33369). | |
| 45485 | PUSH IX | |||
| 45487 | POP HL | |||
| 45488 | LD DE,33369 | |||
| 45491 | SBC HL,DE | Jump ahead to InitialiseDisplayBuffer_RecordSavedCharacter if the two pointers meet. | ||
| 45493 | JR Z,InitialiseDisplayBuffer_RecordSavedCharacter | |||
| 45495 | LD DE,8 | Take a length of 8 entries. | ||
| InitialiseDisplayBuffer_Loop | 45498 | INC A | Count one more record and go back to InitialiseDisplayBuffer_Loop until the pointer reaches the base. | |
| 45499 | SBC HL,DE | |||
| 45501 | JR NZ,InitialiseDisplayBuffer_Loop | |||
| InitialiseDisplayBuffer_RecordSavedCharacter | 45503 | LD (41011),A | Store this record count as the saved character and keep the object pointer at 45452+2. | |
| 45506 | LD (45454),IX | |||
| 45510 | CP 46 | Go to InitialiseDisplayBuffer_CheckDisplayFlag if it is not 46. | ||
| 45512 | JR NZ,InitialiseDisplayBuffer_CheckDisplayFlag | |||
| 45514 | LD HL,45421 | Test bit 0 of the display flag at DisplayFlag and take 40942+20. | ||
| 45517 | BIT 0,(HL) | |||
| 45519 | LD HL,40962 | |||
| 45522 | LD DE,45426 | Point DE at the display data pointer at DisplayDataPointer and take 6 bytes. Skip the swap when bit 0 of the display flag is clear. | ||
| 45525 | LD BC,6 | |||
| 45528 | JR Z,InitialiseDisplayBuffer_CopyTheseBytes | |||
| 45530 | EX DE,HL | Swap the two pointers. | ||
| InitialiseDisplayBuffer_CopyTheseBytes | 45531 | LDIR | Copy these bytes across. | |
| InitialiseDisplayBuffer_CheckDisplayFlag | 45533 | CALL CheckDisplayBitsThreeAndSeven | Call CheckDisplayBitsThreeAndSeven to test bits 3 and 7 of the object attribute, then call CheckDisplayBitsTwoAndSix to test bits 2 and 6. | |
| 45536 | CALL CheckDisplayBitsTwoAndSix | |||
| 45539 | LD A,(40988) | Jump to InitialiseDisplayBuffer_RecordObjectTable if the display flag at 40988 is set. | ||
| 45542 | AND A | |||
| 45543 | JR NZ,InitialiseDisplayBuffer_RecordObjectTable | |||
| 45545 | LD A,(45980) | Copy the display flag at 45980 into 40988 and call ReportEmptyDisplayStep to report that this display step found nothing. | ||
| 45548 | LD (40988),A | |||
| 45551 | CALL ReportEmptyDisplayStep | |||
| InitialiseDisplayBuffer_RecordObjectTable | 45554 | LD A,(40990) | Keep bit 4 of the display flag at 40990 in the saved flag at ObjectTablePointer+18. | |
| 45557 | AND 16 | |||
| 45559 | LD (45456),A | |||
| 45562 | JR Z,InitialiseDisplayBuffer_ClearParser | Go to InitialiseDisplayBuffer_ClearParser if bit 4 of the saved flag is clear. | ||
| 45564 | XOR A | Clear the display flag at 40988. | ||
| 45565 | LD (40988),A | |||
| InitialiseDisplayBuffer_ClearParser | 45568 | XOR A | Clear the parser flag at 40971. | |
| 45569 | LD (40971),A | |||
|
A bit from 12 is set in the object attribute value?
|
||||
| 45572 | LD A,(40989) | Go to InitialiseDisplayBuffer_ReadsObjectAttribute if bit 2 or bit 3 of the object attribute is set. | ||
| 45575 | AND 12 | |||
| 45577 | JR NZ,InitialiseDisplayBuffer_ReadsObjectAttribute | |||
| InitialiseDisplayBuffer_BytesDiffer | 45579 | CALL ProcessObjectDisplayLogic | Return if drawing the object did not match. | |
| 45582 | RET NZ | |||
| 45583 | LD HL,47203 | Leave the object-display handler at 47203. | ||
| 45586 | RET | Return. | ||
|
Reads the object attribute, and refreshes the room when the display flag is clear.
|
||||
| InitialiseDisplayBuffer_ReadsObjectAttribute | 45587 | CALL ReadObjectAttribute | Call ReadObjectAttribute to read the object attribute, and go to InitialiseDisplayBuffer_ReadsDisplayFlag if it returns non-zero. | |
| 45590 | JR NZ,InitialiseDisplayBuffer_ReadsDisplayFlag | |||
| 45592 | LD A,(40988) | Jump to InitialiseDisplayBuffer_TestFlagDisplay if the display flag at 40988 is set. | ||
| 45595 | AND A | |||
| 45596 | JR NZ,InitialiseDisplayBuffer_TestFlagDisplay | |||
| 45598 | CALL ReadDisplaySetupFlag | Jump ahead to InitialiseDisplayBuffer_SavedCharacterCheck if the pass count at 45424 is zero. | ||
| 45601 | AND A | |||
| 45602 | JR Z,InitialiseDisplayBuffer_SavedCharacterCheck | |||
| InitialiseDisplayBuffer_TestFlagDisplay | 45604 | CALL FindFirstNoun | Go to InitialiseDisplayBuffer_RecordRoomDisplay if FindFirstNoun returns zero. | |
| 45607 | JR Z,InitialiseDisplayBuffer_RecordRoomDisplay | |||
| 45609 | CALL ProcessObjectDisplayLogic | Jump back to InitialiseDisplayBuffer_TestFlagDisplay while the object has nothing to display. | ||
| 45612 | JR Z,InitialiseDisplayBuffer_TestFlagDisplay | |||
| 45614 | LD A,(41012) | Save the room display parameter at 45444. | ||
| 45617 | LD (45444),A | |||
| 45620 | LD HL,45424 | Point HL at the pass count at 45424. | ||
| 45623 | INC (HL) | Count one more pass at 45424, and jump to InitialiseDisplayBuffer_RecordRoomDisplay if the saved flag is set. | ||
| 45624 | LD A,(45456) | |||
| 45627 | AND A | |||
| 45628 | JR NZ,InitialiseDisplayBuffer_RecordRoomDisplay | |||
| 45630 | LD A,(40988) | Jump to InitialiseDisplayBuffer_TestFlagDisplay if the display flag at 40988 is zero. | ||
| 45633 | AND A | |||
| 45634 | JR Z,InitialiseDisplayBuffer_TestFlagDisplay | |||
| InitialiseDisplayBuffer_RecordRoomDisplay | 45636 | LD A,(45444) | Record the room display parameter. | |
| 45639 | LD (41012),A | |||
| 45642 | LD A,(45424) | Jump to InitialiseDisplayBuffer_SavedCharacterCheck if the pass count at 45424 is zero. | ||
| 45645 | AND A | |||
| 45646 | JR Z,InitialiseDisplayBuffer_SavedCharacterCheck | |||
| 45648 | CP 1 | Go to InitialiseDisplayBuffer_BytesDiffer if it is 1. | ||
| 45650 | JR Z,InitialiseDisplayBuffer_BytesDiffer | |||
| 45652 | LD HL,46562 | Leave the display handler at 46562. | ||
| 45655 | XOR A | Clear A. | ||
| 45656 | RET | Return. | ||
|
Carry on only when the saved character is a full stop and the display flags are clear.
|
||||
| InitialiseDisplayBuffer_SavedCharacterCheck | 45657 | LD A,(41011) | Jump to InitialiseDisplayBuffer_LeaveDisplayHandler if the saved character is not 46. | |
| 45660 | CP 46 | |||
| 45662 | JR NZ,InitialiseDisplayBuffer_LeaveDisplayHandler | |||
| 45664 | LD A,(40988) | Jump to InitialiseDisplayBuffer_LeaveDisplayHandler if the display is set. | ||
| 45667 | AND A | |||
| 45668 | JR NZ,InitialiseDisplayBuffer_LeaveDisplayHandler | |||
| 45670 | LD HL,45421 | Go to InitialiseDisplayBuffer_LeaveDisplayHandler if bit 0 of this byte is set. | ||
| 45673 | BIT 0,(HL) | |||
| 45675 | JR NZ,InitialiseDisplayBuffer_LeaveDisplayHandler | |||
| 45677 | LD HL,0 | Clear the display data pointer at DisplayDataPointer. | ||
| 45680 | LD (45426),HL | |||
| 45683 | LD (45428),HL | Clear the saved display pointer at DisplayModeFlag+1. | ||
| 45686 | LD (45430),HL | Clear the saved display pointer at 45430 and jump back to InitialiseDisplayBuffer_ReadsObjectAttribute for the next object attribute. | ||
| 45689 | JR InitialiseDisplayBuffer_ReadsObjectAttribute | |||
|
Leave the display handler at 46687 and return zero.
|
||||
| InitialiseDisplayBuffer_LeaveDisplayHandler | 45691 | LD HL,46687 | Leave the display handler at 46687. | |
| 45694 | XOR A | Clear A. | ||
| 45695 | RET | Return. | ||
|
Reads the display flag, and follows the secondary flag when the first one is clear.
|
||||
| InitialiseDisplayBuffer_ReadsDisplayFlag | 45696 | LD A,(40988) | Jump to InitialiseDisplayBuffer_TestFlagDisplayAgain if the display is set. | |
| 45699 | AND A | |||
| 45700 | JR NZ,InitialiseDisplayBuffer_TestFlagDisplayAgain | |||
| 45702 | CALL ReadDisplaySetupFlag | Jump back to InitialiseDisplayBuffer_SavedCharacterCheck if the display is zero. | ||
| 45705 | AND A | |||
| 45706 | JR Z,InitialiseDisplayBuffer_SavedCharacterCheck | |||
| 45708 | CALL ReadSecondaryDisplayFlag | Go to ReadRoomGraphicsParameter_LeaveRoomGraphics if ReadSecondaryDisplayFlag returns zero. | ||
| 45711 | AND A | |||
| 45712 | JR Z,ReadRoomGraphicsParameter_LeaveRoomGraphics | |||
| InitialiseDisplayBuffer_TestFlagDisplayAgain | 45714 | CALL FindFirstNoun | Go to InitialiseDisplayBuffer_RecordRoomDisplayAgain if FindFirstNoun returns zero. | |
| 45717 | JR Z,InitialiseDisplayBuffer_RecordRoomDisplayAgain | |||
| 45719 | CALL ReadRoomGraphicsParameter | Call ReadRoomGraphicsParameter to read the room graphics parameter. | ||
| 45722 | LD A,(45425) | Jump to InitialiseDisplayBuffer_TestFlagDisplayAgain if the pass count at 45425 is not 1. | ||
| 45725 | CP 1 | |||
| 45727 | JR NZ,InitialiseDisplayBuffer_TestFlagDisplayAgain | |||
| 45729 | LD A,(41012) | Save the room display parameter at 45444. | ||
| 45732 | LD (45444),A | |||
| 45735 | LD HL,45424 | Point HL at the pass count at 45424. | ||
| 45738 | INC (HL) | Count one more pass at 45424, and jump to InitialiseDisplayBuffer_RecordRoomDisplayAgain if the saved flag is set. | ||
| 45739 | LD A,(45456) | |||
| 45742 | AND A | |||
| 45743 | JR NZ,InitialiseDisplayBuffer_RecordRoomDisplayAgain | |||
| 45745 | LD A,(40988) | Jump to InitialiseDisplayBuffer_TestFlagDisplayAgain if the display is zero. | ||
| 45748 | AND A | |||
| 45749 | JR Z,InitialiseDisplayBuffer_TestFlagDisplayAgain | |||
| InitialiseDisplayBuffer_RecordRoomDisplayAgain | 45751 | LD A,(45444) | Record the room display parameter. | |
| 45754 | LD (41012),A | |||
| 45757 | LD A,(45424) | Jump to InitialiseDisplayBuffer_SavedCharacterCheck if the pass count at 45424 is zero. | ||
| 45760 | AND A | |||
| 45761 | JR Z,InitialiseDisplayBuffer_SavedCharacterCheck | |||
| 45763 | CP 1 | Go to InitialiseDisplayBuffer_LeaveDisplayHandlerAgain if it is not 1. | ||
| 45765 | JR NZ,InitialiseDisplayBuffer_LeaveDisplayHandlerAgain | |||
| 45767 | CALL ReadRoomGraphicsParameter | Call ReadRoomGraphicsParameter to read the room graphics parameter. | ||
| 45770 | LD A,(45425) | Jump to ReadRoomGraphicsParameter_LeaveRoomGraphics if the pass count at 45425 is zero. | ||
| 45773 | AND A | |||
| 45774 | JR Z,ReadRoomGraphicsParameter_LeaveRoomGraphics | |||
| 45776 | CP 1 | Go to InitialiseDisplayBuffer_BytesDiffer if it is 1. | ||
| 45778 | JP Z,InitialiseDisplayBuffer_BytesDiffer | |||
| 45781 | LD HL,46547 | Leave the display handler at 46547. | ||
| 45784 | XOR A | Clear A. | ||
| 45785 | RET | Return. | ||
|
Leave the display handler at 46562 and return zero.
|
||||
| InitialiseDisplayBuffer_LeaveDisplayHandlerAgain | 45786 | LD HL,46562 | Leave the display handler at 46562. | |
| 45789 | XOR A | Clear A. | ||
| 45790 | RET | Return. | ||
| Prev: 45438 | Up: Map | Next: 45791 |