Prev: 26941 Up: Map Next: 27109
26958: Print the speech bubble
Used by the routine at 27144. Returns with the carry flag set if the character about to speak is off-screen.
Input
H Number of the character about to speak (200-204, 208)
26958 LD A,(32767) B=leftmost column of the play area on screen
26961 LD B,A
26962 LD L,1 Byte 1 holds the character's x-coordinate
26964 LD A,(HL) A=x-coordinate of the character's head (and therefore of the speech bubble lip when it's printed)
26965 INC A
26966 SUB B Return with the carry flag set if the character's head is off-screen to the left
26967 RET C
26968 CP 32 Return with the carry flag set if the character's head is off-screen to the right
26970 CCF
26971 RET C
26972 LD C,A 0<=C<=31 (screen x-coordinate of the character's head)
26973 AND 7 Point DE at an entry in the 8-byte table at 57720, whose contents are (128, 64, 32, 16, 8, 4, 2, 1)
26975 ADD A,120
26977 LD E,A
26978 LD D,225
26980 LD A,(DE) The bit set in A corresponds to the bit that needs to be set in the SRB byte for the lip of the speech bubble; store it in 32761
26981 LD (32761),A
26984 LD A,C A=screen column for lip of speech bubble (0-31)
26985 RRCA Set E to 0, 1, 2 or 3 (quarter of the screen in which the bubble will be printed)
26986 RRCA
26987 RRCA
26988 AND 3
26990 LD E,A
26991 LD A,H A=number of the character about to speak
26992 INC L L=2, which byte holds the character's y-coordinate
26993 CP 208 A=0 for EINSTEIN, -1 for a teacher
26995 SBC A,A
26996 ADD A,(HL) A=y-coordinate of the lip of the speech bubble
26997 PUSH HL
26998 ADD A,A Compute the LSB of the address of the SRB byte corresponding to the location of the speech bubble lip and store it in 32760
26999 ADD A,A
27000 LD L,A
27001 ADD A,E
27002 LD (32760),A
27005 LD A,B Put the current column of the play area at the far left of the screen into 32762 for later use by the routine at 26849
27006 LD (32762),A
27009 LD H,11 HL=attribute file address for the lip of the speech bubble
27011 ADD HL,HL
27012 ADD HL,HL
27013 ADD HL,HL
27014 LD A,L
27015 ADD A,C
27016 LD L,A
27017 LD DE,39136 39136: Lip UDG
27020 CALL 26941 Print the lip of the speech bubble
27023 LD BC,65504 BC=-32
27026 ADD HL,BC Up a line
27027 PUSH HL Store this attribute file address
27028 LD A,L HL=attribute file address for the top left corner of the speech bubble
27029 AND 248
27031 LD L,A
27032 ADD HL,BC
27033 LD DE,39392 39392: Top left corner UDG
27036 CALL 26941 Print the top left corner of the speech bubble
27039 LD C,6 There are 6 UDGs in the top middle section of the speech bubble
27041 LD DE,39648 39648: Top-middle section UDG
27044 INC L
27045 CALL 26941 Print a top-middle section UDG
27048 DEC C
27049 JR NZ,27041 Jump back until all of the top middle section has been printed
27051 LD DE,39904 39904: Top right corner UDG
27054 INC L
27055 CALL 26941 Print the top right corner of the speech bubble
27058 LD C,25 HL=attribute file address for bottom left corner of speech bubble
27060 ADD HL,BC
27061 LD DE,40160 40160: Bottom left corner UDG
27064 CALL 26941 Print the bottom left corner of the speech bubble
27067 LD C,6 There are 6 UDGs in the bottom middle section of the speech bubble
27069 LD DE,40416 40416: Bottom-middle section UDG
27072 INC L
27073 CALL 26941 Print a bottom-middle section UDG
27076 DEC C
27077 JR NZ,27069 Jump back until all of the bottom middle section has been printed
27079 INC L
27080 LD DE,40672 40672: Bottom right corner UDG
27083 CALL 26941 Print the bottom right corner of the speech bubble
27086 POP HL Retrieve the attribute file address for the spot above the lip of the speech bubble
27087 LD A,H Set HL to the address of the bottom pixel line of the character square above the lip
27088 AND 11
27090 ADD A,A
27091 ADD A,A
27092 ADD A,A
27093 ADD A,7
27095 LD H,A
27096 LD (HL),66 'Open' the part above the lip (previously closed by a middle section UDG)
27098 LD HL,23360 Clear the first 64 bytes at 23296 (which will be used as a buffer for the speech text graphic data by the routine at 27144)
27101 DEC L
27102 LD (HL),0
27104 JR NZ,27101
27106 POP HL Restore the character number to H
27107 AND A Return with the carry flag reset to signal that the speech bubble has been printed
27108 RET
Prev: 26941 Up: Map Next: 27109