![]() |
Routines |
Prev: 7349 | Up: Map |
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 |