E | Message number |
H | Character number (183-209) |
27144 | 2E0B | LD L,11 | Store the message number in byte 11 of the character's buffer |
27146 | 73 | LD (HL),E |
27147 | 2E10 | LD L,16 | |
27149 | 0605 | LD B,5 | |
27151 | 3600 | LD (HL),0 | Clear bytes 12-16 of the character's buffer |
27153 | 2D | DEC L | |
27154 | 10FB | DJNZ 27151 | |
27156 | 5E | LD E,(HL) | E=message number |
27157 | 16FE | LD D,254 | Pick up the address of the message and place it in bytes 11 and 12 of the character's buffer |
27159 | 1A | LD A,(DE) | |
27160 | 77 | LD (HL),A | |
27161 | 14 | INC D | |
27162 | 1A | LD A,(DE) | |
27163 | 2C | INC L | |
27164 | 77 | LD (HL),A | |
27165 | 3AF87F | LD A,(32760) | |
27168 | 2E09 | LD L,9 | Place address 27165 into bytes 9 and 10 of the character's buffer |
27170 | 361D | LD (HL),29 | |
27172 | A7 | AND A | Is anyone else speaking at the moment? |
27173 | C0 | RET NZ | Return if so |
27174 | 362E | LD (HL),46 | Put address 27182 in buffer |
27176 | CD4E69 | CALL 26958 | Print speech bubble unless character is off-screen |
27179 | D0 | RET NC | Return unless character is off-screen |
27180 | 1817 | JR 27205 | |
27182 | E5 | PUSH HL | |
27183 | CDE168 | CALL 26849 | Update SRB so that speech bubble is not corrupted |
27186 | E1 | POP HL | |
27187 | 300D | JR NC,27202 | Jump if the character has finished speaking |
27189 | D9 | EXX | Point HL' at the end of the buffer which will contain the speech text graphic data |
27190 | 213F5B | LD HL,23359 | |
27193 | D9 | EXX | |
27194 | 0602 | LD B,2 | We scroll the message two letters at a time |
27196 | CDCE66 | CALL 26318 | Collect in A the next character code from the message |
27199 | A7 | AND A | Has the message finished? |
27200 | 2006 | JR NZ,27208 | Jump if not |
27202 | CD1E69 | CALL 26910 | Update SRB to get rid of speech bubble |
27205 | C39063 | JP 25488 | Make this routine relinquish control of the character |
27208 | C5 | PUSH BC | |
27209 | CDE669 | CALL 27110 | Place character set graphic into message buffer |
27212 | C1 | POP BC | |
27213 | 10ED | DJNZ 27196 | Jump back until two more letters have been rolled into the buffer |
27215 | 2E1D | LD L,29 | |
27217 | CBBE | RES 7,(HL) | |
27219 | 3AF87F | LD A,(32760) | Now A=LSB of address of SRB byte corresponding to top line of speech bubble |
27222 | D608 | SUB 8 | |
27224 | 6F | LD L,A | |
27225 | 0F | RRCA | |
27226 | 0F | RRCA | |
27227 | E618 | AND 24 | |
27229 | C644 | ADD A,68 | |
27231 | 67 | LD H,A | |
27232 | 7D | LD A,L | |
27233 | 87 | ADD A,A | |
27234 | 87 | ADD A,A | |
27235 | 87 | ADD A,A | |
27236 | 6F | LD L,A | |
27237 | 00 | NOP | |
27238 | 2C | INC L | HL=display file address of start of top pixel line of text |
27239 | 11025B | LD DE,23298 | The speech text graphic data is stored here |
27242 | EB | EX DE,HL | |
27243 | CD776A | CALL 27255 | Print the top 4 pixel lines of the text inside the speech bubble |
27246 | C620 | ADD A,32 | |
27248 | 5F | LD E,A | |
27249 | 3805 | JR C,27256 | |
27251 | 7A | LD A,D | |
27252 | D608 | SUB 8 | |
27254 | 57 | LD D,A | |
27255 | 7B | LD A,E | |
27256 | 0604 | LD B,4 | 4 pixel lines at a time |
27258 | C5 | PUSH BC | |
27259 | 010600 | LD BC,6 | 6 character squares inside the speech bubble |
27262 | EDB0 | LDIR | Copy a line of 6 pixels to the screen |
27264 | 2C | INC L | |
27265 | 2C | INC L | |
27266 | 5F | LD E,A | |
27267 | 14 | INC D | |
27268 | C1 | POP BC | |
27269 | 10F3 | DJNZ 27258 | Jump back until all 4 pixel lines in this half have been copied |
27271 | C9 | RET |