Prev: 29868 Up: Map Next: 29972
29871: Save the area of the screen that will be overwritten by a lines bubble
Used by the routines at 30464 and 63829. Returns with the carry flag set if the teacher whose coordinates are in DE is off-screen. Otherwise calculates the position of the lines bubble and copies the area of the screen that would be overwritten by the bubble to the buffer at 59904, and returns with DE holding the attribute file address for the top-left corner of the lines bubble.
Input
DE Teacher's coordinates
29871 LD A,(32512) A=leftmost column of the skool on screen (0-64)
29874 LD B,A Copy this to B
29875 LD A,E A=teacher's x-coordinate
29876 AND 248
29878 SUB B Is the teacher off-screen to the left?
29879 RET C Return with the carry flag set if so
29880 CP 32 Is the teacher off-screen to the right?
29882 CCF
29883 RET C Return with the carry flag set if so
The teacher is on screen. First, save the attribute bytes of the area of the screen that will be overwritten by the lines bubble.
29884 LD E,A E=teacher's screen x-coordinate (0-31)
29885 LD A,D A=teacher's y-coordinate (152-169)
29886 SUB 155 A=teacher's screen y-coordinate (0-14)
29888 JR NC,29891
29890 XOR A
29891 RRCA Set DE to the attribute file address of the top left corner of the lines bubble
29892 RRCA
29893 RRCA
29894 LD D,A
29895 AND 224
29897 ADD A,E
29898 LD E,A
29899 LD A,D
29900 AND 3
29902 ADD A,88
29904 LD D,A
29905 PUSH HL
29906 PUSH DE
29907 LD HL,59904 The buffer at 59904 will store the area of the screen overwritten by the lines bubble
29910 EX DE,HL DE=59904, HL=attribute file address
29911 LD BC,8 Copy the 24 attribute bytes that will be overwritten by the lines bubble from the screen to 59904
29914 LDIR
29916 LD C,24
29918 ADD HL,BC
29919 LD C,8
29921 LDIR
29923 LD C,24
29925 ADD HL,BC
29926 LD C,8
29928 LDIR
Next, save the display file bytes of the area of the screen that will be overwritten by the lines bubble.
29930 POP HL Restore the attribute file address of the top-left corner of the lines bubble to HL
29931 PUSH HL
29932 LD A,H Get the display file address of the top-left corner of the lines bubble in HL
29933 SUB 80
29935 ADD A,A
29936 ADD A,A
29937 ADD A,A
29938 LD H,A
29939 LD BC,3 A lines bubble has 3 rows...
29942 LD A,8 ...and 8 columns; copy the 192 display file bytes that will be overwritten by the lines bubble from the screen to 59928
29944 PUSH BC
29945 PUSH HL
29946 LD C,8
29948 LDIR
29950 POP HL
29951 INC H
29952 DEC A
29953 JR NZ,29945
29955 LD A,L
29956 ADD A,32
29958 LD L,A
29959 JR C,29965
29961 LD A,H
29962 SUB 8
29964 LD H,A
29965 POP BC
29966 DEC C
29967 JR NZ,29942
29969 POP DE Restore the attribute file address of the top-left corner of the lines bubble to DE
29970 POP HL
29971 RET Return with the carry flag reset
Prev: 29868 Up: Map Next: 29972