Prev: 61689 Up: Map Next: 61764
61696: Open or close a door and update the screen refresh buffer
Used by the routines at 61764 and 63437. Updates the play area graphics for the door being opened or closed, and updates the screen refresh buffer (SRB) accordingly.
Input
HL Address of the door status flags (see 32752)
61696 LD A,L A=240-249
61697 SUB 58 A=182-191
61699 LD L,A Point HL at the relevant entry in the door locations table at 65462
61700 LD H,255
61702 LD A,(HL) Pick up the entry from the door locations table
61703 AND 248 Discard bits 0-2 of the x-coordinate
61705 LD E,A Copy the result to E
61706 RRCA Now divide the result by 8
61707 RRCA
61708 RRCA
61709 LD L,A Point HL at the entry in the table of Z values at 48384 that corresponds to the door
61710 LD H,189
61712 LD A,(HL) Flip bit 2 of the Z value for y-coordinates 30-35 (set=closed, reset=open)
61713 XOR 4
61715 LD (HL),A
61716 AND 3 Set the zero flag if this is a shop door
61718 LD BC,8764 B=34 (y-coordinate of the base of a house door), C=60 (00111100)
61721 JR NZ,61731 Jump unless this is a shop door
61723 LD BC,9408 B=36 (y-coordinate of the base of a shop door), C=192 (11000000)
61726 INC H Point HL at the entry in the table of Z values at 48640 that corresponds to the door
61727 LD A,(HL) Flip bits 2, 3 and 4 of the Z value for y-coordinates 36-41
61728 XOR 28
61730 LD (HL),A
This entry point is used by the routine at 64549 with B=10 (y-coordinate of the rope), C=255 (11111111), and E=208 or 216.
61731 LD HL,32766 32766 holds X, the x-coordinate of the leftmost column of the play area on screen
61734 LD A,E A=x-coordinate of the door or rope (rounded down to the nearest multiple of 8)
61735 SUB (HL) Subtract X
61736 RRCA Divide the result by 8
61737 RRCA
61738 RRCA
61739 CP 4 Is the door or rope off-screen to the left or right?
61741 RET NC Return if so
61742 LD E,A E=0, 1, 2 or 3, denoting the 8-tile wide column of the screen that contains the door or rope
61743 INC L HL=32767, which holds Y, the y-coordinate of the topmost row of the play area on screen
61744 LD A,B A=10 (y-coordinate of the rope), 34 or 36 (y-coordinate of the base of the door)
61745 LD B,6 Doors are at most 6 tiles high
61747 SUB (HL) Subtract Y from the y-coordinate of the rope or base of the door
61748 ADD A,A Multiply by 4
61749 ADD A,A
61750 ADD A,E Add E (0-3)
61751 LD L,A Point HL at a byte of the screen refresh buffer (SRB)
61752 CP 96 Is this part of the door below the visible portion of the play area?
61754 RET NC Return if so
61755 LD A,(HL) Set the appropriate bits in the SRB byte for the rope or door
61756 OR C
61757 LD (HL),A
61758 LD A,L Compute the LSB of the address of the next SRB byte
61759 ADD A,4
61761 DJNZ 61751 Jump back to check whether this SRB byte needs updating
61763 RET
Prev: 61689 Up: Map Next: 61764