Routines |
Prev: 6A07 | Up: Map | Next: 6A88 |
|
||||||||||
6A08 | LD L,$0B | Store the message number in byte 0x0B of the character's buffer | ||||||||
6A0A | LD (HL),E | |||||||||
The address of this entry point is placed into bytes 0x09 and 0x0A of EINSTEIN's buffer by the routine at F000.
|
||||||||||
6A0B | LD L,$10 | Clear bytes 0x0C-0x10 of the character's buffer, thus removing the addresses of any old (sub)(sub)messages | ||||||||
6A0D | LD B,$05 | |||||||||
6A0F | LD (HL),$00 | |||||||||
6A11 | DEC L | |||||||||
6A12 | DJNZ $6A0F | |||||||||
6A14 | LD E,(HL) | E=message number | ||||||||
6A15 | LD D,$FE | Pick up the address of the message and place it into bytes 0x0B and 0x0C of the character's buffer | ||||||||
6A17 | LD A,(DE) | |||||||||
6A18 | LD (HL),A | |||||||||
6A19 | INC D | |||||||||
6A1A | LD A,(DE) | |||||||||
6A1B | INC L | |||||||||
6A1C | LD (HL),A | |||||||||
If somebody else is already speaking, this entry point is used while this character waits his turn to speak.
|
||||||||||
6A1D | LD A,($7FF8) | 7FF8 holds the LSB of the SRB address corresponding to the lip of the speech bubble (or 0 if there is no bubble on-screen) | ||||||||
6A20 | LD L,$09 | Place the address of the entry point at 6A1D into bytes 0x09 and 0x0A of the character's buffer | ||||||||
6A22 | LD (HL),$1D | |||||||||
6A24 | AND A | Is anyone else speaking at the moment? | ||||||||
6A25 | RET NZ | Return if so | ||||||||
6A26 | LD (HL),$2E | Place the address of the entry point at 6A2E into bytes 0x09 and 0x0A of the character's buffer | ||||||||
6A28 | CALL $694E | Print the speech bubble if the character's head is on-screen | ||||||||
6A2B | RET NC | Return if the character's head is on-screen | ||||||||
6A2C | JR $6A45 | Otherwise make this routine relinquish control of the character | ||||||||
This entry point is used while the character is speaking.
|
||||||||||
6A2E | PUSH HL | |||||||||
6A2F | CALL $68E1 | Update the SRB so that the speech bubble is not corrupted | ||||||||
6A32 | POP HL | |||||||||
6A33 | JR NC,$6A42 | Jump if the speech bubble is no longer on-screen | ||||||||
6A35 | EXX | Point HL' at the end of the buffer (at 5B00) which will contain the speech text graphic data | ||||||||
6A36 | LD HL,$5B3F | |||||||||
6A39 | EXX | |||||||||
6A3A | LD B,$02 | We scroll the message two letters at a time | ||||||||
6A3C | CALL $66CE | Collect in A the next character code from the message | ||||||||
6A3F | AND A | Has the message finished? | ||||||||
6A40 | JR NZ,$6A48 | Jump if not | ||||||||
The message has finished, or the speech bubble has been scrolled off the screen. Either way, the character has finished speaking.
|
||||||||||
6A42 | CALL $691E | Update the SRB to get rid of the speech bubble | ||||||||
6A45 | JP $6390 | Terminate this interruptible subcommand | ||||||||
The character has not finished speaking.
|
||||||||||
6A48 | PUSH BC | |||||||||
6A49 | CALL $69E6 | Roll the font character bitmap into the message buffer | ||||||||
6A4C | POP BC | |||||||||
6A4D | DJNZ $6A3C | Jump back until two more letters have been rolled into the buffer | ||||||||
6A4F | LD L,$1D | Reset the walk/run bit in byte 0x1D of the character's buffer to make sure he speaks slowly | ||||||||
6A51 | RES 7,(HL) | |||||||||
6A53 | LD A,($7FF8) | Now A=LSB of the address of the SRB byte corresponding to the top line of the speech bubble | ||||||||
6A56 | SUB $08 | |||||||||
6A58 | LD L,A | Set HL to the display file address of the start of the top pixel line of text | ||||||||
6A59 | RRCA | |||||||||
6A5A | RRCA | |||||||||
6A5B | AND $18 | |||||||||
6A5D | ADD A,$44 | |||||||||
6A5F | LD H,A | |||||||||
6A60 | LD A,L | |||||||||
6A61 | ADD A,A | |||||||||
6A62 | ADD A,A | |||||||||
6A63 | ADD A,A | |||||||||
6A64 | LD L,A | |||||||||
6A65 | NOP | |||||||||
6A66 | INC L | |||||||||
6A67 | LD DE,$5B02 | The speech text graphic data is stored in the 64-byte buffer at 5B00 | ||||||||
6A6A | EX DE,HL | |||||||||
6A6B | CALL $6A77 | Print the top 4 pixel rows of the text inside the speech bubble | ||||||||
6A6E | ADD A,$20 | Set DE to the display file address of the start of the 5th pixel row of text | ||||||||
6A70 | LD E,A | |||||||||
6A71 | JR C,$6A78 | |||||||||
6A73 | LD A,D | |||||||||
6A74 | SUB $08 | |||||||||
6A76 | LD D,A | |||||||||
6A77 | LD A,E | Save the LSB of the base display file address | ||||||||
6A78 | LD B,$04 | 4 pixel lines at a time | ||||||||
6A7A | PUSH BC | |||||||||
6A7B | LD BC,$0006 | There are 6 character squares inside the speech bubble | ||||||||
6A7E | LDIR | Copy a row of 6 bytes to the screen | ||||||||
6A80 | INC L | Move HL to the start of the next row of pixel data in the message buffer | ||||||||
6A81 | INC L | |||||||||
6A82 | LD E,A | Restore the LSB of the base display file address | ||||||||
6A83 | INC D | Next pixel row down | ||||||||
6A84 | POP BC | |||||||||
6A85 | DJNZ $6A7A | Jump back until all 4 pixel rows in this half have been copied to the screen | ||||||||
6A87 | RET |
Prev: 6A07 | Up: Map | Next: 6A88 |