| Routines

7414: Make a teacher give lines

Used by the routines at 7596, 7D3E and F02F. Prints the lines message (e.g. '100 LINES ERIC') in a message box above the teacher's head, and shortly afterwards prints the reprimand message (e.g. 'NO CATAPULTS') in the same box.
Input
A | Lines recipient's character number (0xCE-0xD2)
B | Reprimand message number
H | Teacher's character number (0xC8-0xCC)
7414 | PUSH AF | Save the lines recipient's character number briefly
7415 | CALL $7400 | Collect in DE the coordinates of the teacher's head
7418 | POP AF | Restore the lines recipient's character number to A
7419 | ADD A,$4D | A=0x1B, 0x1C, 0x1D, 0x1E or 0x1F (message number for the lines recipient's name)
741B | LD ($7F8A),A | Place it into 7F8A (the first byte of message 0x05, which is used as a submessage of message 0x0D: '[12]0 LINES^[5]')
741E | SUB $16 | Compute the attribute byte to be used for the lines message: 0x0F (blue background) for BOY WANDER; 0x17 (red background) for ANGELFACE or EINSTEIN; 0x1F (magenta background) for HAYLEY or ERIC
7420 | RRA
7421 | ADD A,A
7422 | ADD A,A
7423 | ADD A,A
7424 | DEC A
7425 | LD C,A | Copy the lines message attribute byte to C
7426 | NOP |
7427 | NOP |
7428 | NOP |
7429 | PUSH BC |
742A | CALL $6A8C | Save the area of screen that will be overwritten by the lines message
742D | POP BC |
742E | RET C | Return if the teacher giving lines is off-screen
742F | CALL $6291 | A=random number
7432 | AND $0E | Set L=10, 20, 30, 40, 50, 60, 70 or 80 (number of lines divided by 10)
7434 | ADD A,$02
7436 | LD L,A
7437 | ADD A,A
7438 | ADD A,A
7439 | ADD A,L
743A | LD L,A
743B | LD A,C | A=attribute byte for the lines message
743C | PUSH BC |
743D | CP $0F | Is the teacher giving lines to BOY WANDER?
743F | JR Z,$744E | Jump if so
7441 | CP $1F |
7443 | LD A,L | A=number of lines divided by 10
7444 | JR Z,$744B | Jump if the teacher is giving lines to ERIC or HAYLEY
7446 | CALL $73B5 | Add EINSTEIN's or ANGELFACE's lines to the score and print the score
7449 | JR $744E
744B | CALL $73CB | Add lines and print the new lines total
744E | PUSH DE |
744F | EX DE,HL |
7450 | LD D,$00 | DE=number of lines divided by 10
7452 | CALL $6BB4 | Generate the ASCII codes for the decimal digits of the number in DE
7455 | POP DE | Restore the attribute file address for the top left corner of the lines message box to DE
7456 | POP BC | Restore the lines reprimand number to B, and the attribute byte for the lines message to C
7457 | PUSH BC | Save them again
7458 | PUSH DE |
7459 | LD A,$0D | Message 0x0D: '[12]0 LINES^[5]'
745B | CALL $6B46 | Print the lines message
The lines message (e.g. '100 LINES ERIC') has been printed. Now for the accompanying sound effect. Your browser doesn't support HTML5 audio. Here is a link to the audio instead.
745E | LD A,($E428) | A=attribute byte for the lines message
7461 | LD DE,$2800 | Set the duration parameter for the beep
7464 | RRCA | The border colour for the beep will be the same as the PAPER colour of the lines message box
7465 | RRCA
7466 | RRCA
7467 | AND $07
7469 | PUSH AF |
746A | LD BC,$1410 | B=0x14 (pitch), C=0x10 (no alternating colours)
746D | CALL $748C | Beep
7470 | POP AF | A=PAPER colour of the lines message
7471 | POP DE | Restore the attribute file address for the top left corner of the lines message box to DE
7472 | POP BC | Restore the lines reprimand number to B, and the attribute byte for the lines message to C
This entry point is used by the routines at 74C8 (with A=0x06, B=0x0E, C=0x46) and F4CC (with A=0x02, B=0x62, C=0x32). Your browser doesn't support HTML5 audio. Here is a link to the audio instead.
7473 | PUSH DE |
7474 | PUSH AF |
7475 | LD A,B | A=0x0E, 0x62, or a reprimand message number
7476 | CALL $6B46 | Print the message
7479 | POP AF | A=border colour to use during the beep
747A | LD DE,$1400 | Set the duration parameter for the beep
747D | LD BC,$3210 | B=0x32 (pitch), C=0x10 (no alternating colours)
7480 | CALL $748C | Beep
7483 | POP DE | Restore the attribute file address for the top left corner of the message box to DE
7484 | LD HL,$E328 | The part of the screen overwritten by the message box was stored in the buffer at E328
7487 | JP $6AE4 | Restore the area of the screen overwritten by the message box