![]() |
Routines |
| Prev: 26845 | Up: Map | Next: 26909 |
| 26849 | LD HL,32760 | 32760 holds the LSB of the SRB address corresponding to the lip of the speech bubble (or 0 if there is no bubble on-screen) |
| 26852 | LD A,(HL) | |
| 26853 | LD L,A | L=0 (and HL=32512) if no one is speaking |
| 26854 | AND A | Is anyone speaking at the moment? |
| 26855 | RET Z | Return if not |
| 26856 | LD L,255 | HL=32767 |
| 26858 | LD A,(HL) | A=leftmost column of play area on screen |
| 26859 | LD L,250 | HL=32762, which holds the column of the play area that was at the far left of the screen the last time this routine was called |
| 26861 | CP (HL) | Set the zero flag if the screen hasn't scrolled, set the carry flag if the screen has scrolled right, or reset the carry flag if it has scrolled left |
| 26862 | LD (HL),A | Update 32762 to the current leftmost column on-screen |
| 26863 | LD L,248 | HL=32760 |
| 26865 | JR Z,26888 | Jump if the screen hasn't scrolled since the last time this routine was called |
|
The screen has scrolled since the last time this routine was called. Check which way it scrolled and update 32760 accordingly.
|
||
| 26867 | LD A,(HL) | A=LSB of speech bubble lip SRB address |
| 26868 | JR NC,26883 | Jump if the screen has scrolled left |
|
The screen has scrolled right since the last time this routine was called.
|
||
| 26870 | AND 3 | A=0-3 (quarter of the screen occupied by the bubble before the scroll) |
| 26872 | CP 3 | Was the bubble in the rightmost quarter? |
| 26874 | JR NZ,26880 | Jump if not |
|
The speech bubble has been scrolled off the screen.
|
||
| 26876 | LD (HL),0 | Set 32760 to 0 (the bubble is no longer on-screen) |
| 26878 | LD L,(HL) | L=0 |
| 26879 | RET | Return with the carry flag reset |
| 26880 | INC (HL) | The speech bubble has been scrolled to the right (and is still on-screen) |
| 26881 | JR 26888 | |
|
The screen has scrolled left since the last time this routine was called.
|
||
| 26883 | AND 3 | A=0-3 (quarter of the screen occupied by the bubble before the scroll) |
| 26885 | JR Z,26876 | Jump if the bubble was in the leftmost quarter (and is therefore no longer on-screen) |
| 26887 | DEC (HL) | The speech bubble has been scrolled to the left (and is still on-screen) |
|
Now that 32760 has been adjusted to compensate for any recent scrolling of the screen, adjust the appropriate SRB bytes for the speech bubble and lip.
|
||
| 26888 | LD L,(HL) | HL=address of SRB byte corresponding to the lip of the speech bubble |
| 26889 | LD A,(32761) | The bit set in A corresponds to the bit of the SRB byte that corresponds to the lip of the speech bubble |
| 26892 | CPL | |
| 26893 | AND (HL) | Make sure this bit is reset (do not refresh it) |
| 26894 | LD (HL),A | Restore the SRB byte with the relevant bit reset |
| 26895 | LD A,L | |
| 26896 | ADD A,252 | Reset the bits of the SRB corresponding to the bottom line of the speech bubble |
| 26898 | LD L,A | |
| 26899 | LD (HL),0 | |
| 26901 | ADD A,252 | Reset the bits of the SRB corresponding to the top line of the speech bubble |
| 26903 | LD L,A | |
| 26904 | LD (HL),0 | |
| 26906 | LD L,(HL) | L=0 |
| 26907 | SCF | Signal: the speech bubble is still on-screen |
| 26908 | RET | |
| Prev: 26845 | Up: Map | Next: 26909 |