![]() |
Routines |
| Prev: 7349 | Up: Map | Next: 7400 |
|
Used by the routine at 7986. Returns with the carry flag set if the character about to speak is off-screen. Returns with the zero flag reset if somebody else is speaking at the moment.
|
||||||||
| 734E | LD A,($7F00) | A=leftmost column of the skool on screen (0-64) | ||||||
| 7351 | LD B,A | |||||||
| 7352 | LD L,$62 | Byte 0x62 of a character's buffer holds his x-coordinate | ||||||
| 7354 | LD A,(HL) | Pick this up in A | ||||||
| 7355 | INC A | Return with the carry flag set if the character is off-screen to the left | ||||||
| 7356 | LD E,A | |||||||
| 7357 | SUB B | |||||||
| 7358 | RET C | |||||||
| 7359 | CP $20 | Return with the carry flag set if the character is off-screen to the right | ||||||
| 735B | CCF | |||||||
| 735C | RET C | |||||||
| 735D | LD C,A | C=screen x-coordinate (0-31) of the spot above the character's head (where the speech bubble lip will be) | ||||||
| 735E | LD A,($7F65) | A=current speech bubble lip x-coordinate (if any) | ||||||
| 7361 | AND A | Is somebody else speaking at the moment? | ||||||
| 7362 | RET NZ | Return with the zero flag reset if so | ||||||
|
The character is on-screen and no one else is speaking at the moment.
|
||||||||
| 7363 | LD L,$60 | |||||||
| 7365 | LD A,H | A=character number (0x98-0xA9) | ||||||
| 7366 | INC L | L=0x61 | ||||||
| 7367 | CP $A7 | Set the carry flag unless EINSTEIN is the speaker | ||||||
| 7369 | SBC A,A | A=0x00 if EINSTEIN is speaking, 0xFF otherwise | ||||||
| 736A | ADD A,(HL) | D=y if EINSTEIN is speaking, y-1 otherwise (where y is the speaker's y-coordinate) | ||||||
| 736B | LD D,A | |||||||
| 736C | LD ($7F64),DE | Store the speech bubble lip coordinates at 7F64 | ||||||
| 7370 | SUB $98 | Get the attribute file address of the speech bubble lip in BC | ||||||
| 7372 | RRCA | |||||||
| 7373 | RRCA | |||||||
| 7374 | RRCA | |||||||
| 7375 | LD B,A | |||||||
| 7376 | AND $E0 | |||||||
| 7378 | ADD A,C | |||||||
| 7379 | LD C,A | |||||||
| 737A | LD A,B | |||||||
| 737B | AND $03 | |||||||
| 737D | ADD A,$58 | |||||||
| 737F | LD B,A | |||||||
| 7380 | LD A,(DE) | A=UDG reference of the character square under the speech bubble lip | ||||||
| 7381 | LD ($7F66),A | Store this in 7F66 | ||||||
| 7384 | LD A,$EF | 0xEF=UDG reference for the speech bubble lip | ||||||
| 7386 | LD (DE),A | Replace the skool UDG with the speech bubble lip UDG | ||||||
| 7387 | SET 7,E | Pick up the skool attribute byte of the character square under the speech bubble lip and store it in 7F67 | ||||||
| 7389 | LD A,(DE) | |||||||
| 738A | LD ($7F67),A | |||||||
| 738D | LD A,$38 | 0x38=PAPER 7: INK 0 | ||||||
| 738F | LD (DE),A | Replace the skool attribute byte | ||||||
| 7390 | LD (BC),A | Set the new attribute on-screen | ||||||
|
The skool UDG reference and attribute byte for the location of the speech bubble lip have been adjusted. Now for the speech bubble itself.
|
||||||||
| 7391 | LD A,E | Get the x-coordinate of the left edge of the speech bubble in E | ||||||
| 7392 | AND $78 | |||||||
| 7394 | LD E,A | |||||||
| 7395 | DEC D | The speech bubble is two character squares high | ||||||
| 7396 | DEC D | |||||||
| 7397 | PUSH HL | |||||||
| 7398 | LD HL,$FFC0 | Set HL to the attribute file address for the top-left corner of the speech bubble | ||||||
| 739B | ADD HL,BC | |||||||
| 739C | LD A,L | |||||||
| 739D | AND $F8 | |||||||
| 739F | LD L,A | |||||||
| 73A0 | LD B,$08 | Fill in the top row of 8 character squares with the speech bubble attribute (0x38=PAPER 7: INK 0) | ||||||
| 73A2 | LD (HL),$38 | |||||||
| 73A4 | INC HL | |||||||
| 73A5 | DJNZ $73A2 | |||||||
| 73A7 | LD C,$18 | Set HL to the attribute file address for the bottom-left corner of the speech bubble | ||||||
| 73A9 | ADD HL,BC | |||||||
| 73AA | LD B,$08 | Fill in the bottom row of 8 character squares with the speech bubble attribute (0x38=PAPER 7: INK 0) | ||||||
| 73AC | LD (HL),$38 | |||||||
| 73AE | INC L | |||||||
| 73AF | DJNZ $73AC | |||||||
| 73B1 | LD HL,$7F68 | Store the UDG references for the part of the skool that will be overwritten by the top row of the speech bubble at 7F68 | ||||||
| 73B4 | EX DE,HL | |||||||
| 73B5 | LD A,L | |||||||
| 73B6 | LD C,$08 | |||||||
| 73B8 | LDIR | |||||||
| 73BA | LD L,A | Replace the 8 UDG references for the part of the skool that will be overwritten by the top row of the speech bubble with the appropriate speech bubble UDG references (0xF0-0xF7) | ||||||
| 73BB | LD BC,$08F0 | |||||||
| 73BE | LD (HL),C | |||||||
| 73BF | INC L | |||||||
| 73C0 | INC C | |||||||
| 73C1 | DJNZ $73BE | |||||||
| 73C3 | LD L,A | Store the UDG references for the part of the skool that will be overwritten by the bottom row of the speech bubble at 7F70 | ||||||
| 73C4 | INC H | |||||||
| 73C5 | LD C,$08 | |||||||
| 73C7 | LDIR | |||||||
| 73C9 | LD L,A | Replace the 8 UDG references for the part of the skool that will be overwritten by the bottom row of the speech bubble with the appropriate speech bubble UDG references (0xF8-0xFF) | ||||||
| 73CA | LD BC,$08F8 | |||||||
| 73CD | LD (HL),C | |||||||
| 73CE | INC L | |||||||
| 73CF | INC C | |||||||
| 73D0 | DJNZ $73CD | |||||||
| 73D2 | ADD A,$80 | Store the 8 attribute bytes for the part of the skool that will be overwritten by the top row of the speech bubble at 7F78 | ||||||
| 73D4 | LD L,A | |||||||
| 73D5 | LD C,$08 | |||||||
| 73D7 | DEC H | |||||||
| 73D8 | LDIR | |||||||
| 73DA | LD L,A | Replace the 8 attribute bytes for the part of the skool that will be overwritten by the top row of the speech bubble with the appropriate speech bubble attribute byte (C=0x38=PAPER 7: INK 0) | ||||||
| 73DB | LD BC,$0838 | |||||||
| 73DE | LD (HL),C | |||||||
| 73DF | INC L | |||||||
| 73E0 | DJNZ $73DE | |||||||
| 73E2 | LD L,A | Store the 8 attribute bytes for the part of the skool that will be overwritten by the bottom row of the speech bubble at 7F80 | ||||||
| 73E3 | LD C,$08 | |||||||
| 73E5 | INC H | |||||||
| 73E6 | LDIR | |||||||
| 73E8 | LD L,A | Replace the 8 attribute bytes for the part of the skool that will be overwritten by the bottom row of the speech bubble with the appropriate speech bubble attribute byte (C=0x38=PAPER 7: INK 0) | ||||||
| 73E9 | LD BC,$0838 | |||||||
| 73EC | LD (HL),C | |||||||
| 73ED | INC L | |||||||
| 73EE | DJNZ $73EC | |||||||
| 73F0 | LD DE,($7F64) | Copy the speech bubble lip coordinates from 7F64 to DE | ||||||
| 73F4 | CALL $7087 | Update the SRB for the lip of speech bubble | ||||||
| 73F7 | CALL $F4FA | Open the lip of the speech bubble | ||||||
| 73FA | CALL $7427 | Update the SRB for the speech bubble | ||||||
| 73FD | POP HL | |||||||
| 73FE | INC A | Set the zero flag | ||||||
| 73FF | RET | Return with the zero flag set to indicate success | ||||||
| Prev: 7349 | Up: Map | Next: 7400 |