Routines |
Prev: 7400 | Up: Map | Next: 748A |
|
||||||||||||
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.
|
||||||||||||
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 | ||||||||||
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 |
Prev: 7400 | Up: Map | Next: 748A |