| Routines

F5BE: Prepare for a new game

Used by the routine at F6D5. First of all, wipe the blackboards clean.
F5BE | LD H,$87 | The blackboards use UDGs 0x00-0x4F (0x00-0x0F for the Blue Room board, 0x10-0x1F for the Yellow Room, 0x20-0x2F for the top-floor room in the girls' skool, 0x30-0x3F for the Science Lab, and 0x40-0x4F for the middle-floor room in the girls' skool) with base page 0x80; wipe them clean by setting every byte of graphic data for these UDGs to 0xFF
F5C0 | LD C,$08
F5C2 | XOR A
F5C3 | LD L,A
F5C4 | LD B,$50
F5C6 | LD (HL),$FF
F5C8 | INC L
F5C9 | DJNZ $F5C6
F5CB | DEC H
F5CC | DEC C
F5CD | JR NZ,$F5C3
Next, clean up the game status buffer.
F5CF | LD L,$00 | Clear the first 222 bytes of the game status buffer
F5D1 | LD B,$DE
F5D3 | LD (HL),A
F5D4 | INC L
F5D5 | DJNZ $F5D3
Reset various counters, flags and identifiers.
F5D7 | LD L,$E0 | Set the lesson descriptor at 7FE0 to 0 (for no good reason: it will be set again by the routine at F74D when demo mode or a new game starts)
F5D9 | LD (HL),A
F5DA | INC L | Reset the number of mice caught at 7FE1
F5DB | LD (HL),A
F5DC | INC L | Reset the number of kisses available from HAYLEY at 7FE2
F5DD | LD (HL),$28
F5DF | INC L | Set the lesson clock at 7FE3 to 1 (so the bell will ring straight away)
F5E0 | LD (HL),$01
F5E2 | INC L
F5E3 | LD (HL),A
F5E4 | LD L,$EB | Reset the inventory flags at 7FEB
F5E6 | LD (HL),A
F5E7 | LD L,$ED | Clear the game status buffer from 7FED to 7FFB
F5E9 | LD B,$0F
F5EB | LD (HL),A
F5EC | INC L
F5ED | DJNZ $F5EB
F5EF | LD (HL),$D6 | 7FFC holds the number of the last character moved; set this to 0xD6 so it immediately rewinds to 0xB7 (little boy no. 1)
F5F1 | LD L,$FF | HL=7FFF (leftmost column of the play area on screen)
F5F3 | LD (HL),A | Set this to 0
F5F4 | LD L,$DF | HL=7FDF (current lesson number)
F5F6 | LD A,(HL) | Pick this up in A (0xC0-0xFF)
F5F7 | OR $07 | Make sure the first lesson of the new game will be PLAYTIME
F5F9 | LD (HL),A
F5FA | CALL $6CD4 | Prepare the doors, windows, cups and bike
F5FD | LD L,$F3 | HL=7FF3 (ERIC's main action timer)
F5FF | LD (HL),$01 | Initialise this to 1
Set up the bike and storeroom combinations.
F601 | LD C,$08 | 4 numbers in each of the 2 combinations
F603 | LD L,$9C | HL=7F9C (combinations)
F605 | CALL $6291 | Generate new bike and Science Lab storeroom combinations
F608 | LD B,A
F609 | CALL $6291
F60C | DJNZ $F609
F60E | LD (HL),A
F60F | INC L
F610 | DEC C
F611 | JR NZ,$F605
F613 | LD L,$9C | HL=7F9C (combinations)
F615 | LD B,$04 | There are 4 digits in the bike combination
F617 | LD C,$2F | 0x2F+0x01=0x30 (ASCII code for '0')
F619 | LD A,(HL) | A=random number collected earlier
F61A | INC C | C=ASCII code of the number INT(A/0x1A)
F61B | SUB $1A
F61D | JR NC,$F61A
F61F | LD (HL),C | Put the bike combination digit in place
F620 | INC L | Point HL at the next digit slot
F621 | DJNZ $F617 | Jump back until all four digits are done
F623 | LD B,$04 | There are 4 letters in the storeroom combination
F625 | LD C,$40 | 0x40+0x01=0x41 (ASCII code for 'A')
F627 | LD A,(HL) | A=random number collected earlier
F628 | INC C | C=ASCII code of the Nth letter of the alphabet (where N=1+INT(A/0x0A))
F629 | SUB $0A
F62B | JR NC,$F628
F62D | LD (HL),C | Put the storeroom combination letter in place
F62E | INC L | Point HL at the next letter slot
F62F | DJNZ $F625 | Jump back until all four letters are done
F631 | LD DE,$7F9C | Set HL to 7F9C and DE to 7FA4
F634 | EX DE,HL
F635 | LD C,$08 | Copy the bike combination to 7FA4 and the storeroom combination to 7FA8
F637 | LDIR
Place the game characters in their initial positions.
F639 | LD B,$20 | There are 32 game characters (0xB7-0xD6)
F63B | LD H,$B7 | 0xB7=little girl no. 1
F63D | LD D,H |
F63E | PUSH BC |
F63F | LD L,$20 | Collect the initial animatory state and location of the character from bytes 0x20-0x22 of the character's buffer and copy them into bytes 0x00-0x02
F641 | XOR A
F642 | LD E,A
F643 | LD BC,$0003
F646 | LDIR
F648 | EX DE,HL |
F649 | LD (HL),$24 | Place the address of the routine at D224 (RET) into bytes 0x03 and 0x04 of the character's buffer (thus making it the character's primary command; this is useful only for the non-human characters, which do not use command lists and therefore need a default primary command)
F64B | INC L
F64C | LD (HL),$D2
F64E | INC L | L=0x05
F64F | EX DE,HL |
F650 | LD B,$18 | Zero out bytes 0x05-0x1C of the character's buffer
F652 | LD (DE),A
F653 | INC E
F654 | DJNZ $F652
F656 | LDI | Copy byte 0x23 into byte 0x1D
F658 | LD A,H | A=character number (0xB7-0xD6)
F659 | AND $0F | Initialise the walking speed change delay counter at byte 0x1E of the character's buffer
F65B | LD (DE),A
F65C | POP BC |
F65D | INC H | Next character
F65E | DJNZ $F63D | Jump back until all the characters have been initialised
Set up a free mouse.
F660 | LD HL,$7A16 | Routine at 7A16: control mouse
F663 | LD ($D411),HL | Place this uninterruptible subcommand routine address into bytes 0x11 and 0x12 of the mouse's buffer
F666 | LD HL,$0101 | Set bytes 0x14 and 0x15 of the mouse's buffer to 1; this has the effect of making the mouse hide initially
F669 | LD ($D414),HL
Clear the screen.
F66C | LD HL,$4000 | Clear the display file
F66F | LD (HL),L
F670 | LD DE,$4001
F673 | LD BC,$1800
F676 | LDIR
F678 | LD (HL),$07 | PAPER 0: INK 7
F67A | LD B,$03
F67C | LDIR
Prepare the bottom three lines of the screen.
F67E | LD HL,$E728 | The graphic data for the BTS logo is at E728
F681 | LD DE,$5AB8 | Point DE at the appropriate attribute file address
F684 | CALL $6AE4 | Print the BTS logo
F687 | LD HL,$E628 | The graphic data for the score box is at E628
F68A | LD DE,$5AA0 | Point DE at the appropriate attribute file address
F68D | CALL $6AE4 | Print the Score/Lines/Hi-score box
F690 | LD HL,($7FE9) | Collect the hi-score from 7FE9 into DE
F693 | EX DE,HL
F694 | LD HL,$51E4 | Point HL at the appropriate display file address
F697 | CALL $73AD | Print the hi-score
F69A | XOR A | Print the score (0)
F69B | CALL $73B5
F69E | XOR A | Print the lines total (0)
F69F | CALL $73CB
F6A2 | LD A,$58 | When the game begins, the leftmost column of the play area on screen will be 88+32=120
F6A4 | LD ($7FFF),A
Scroll the play area onto the screen and play the theme tune.
F6A7 | LD B,$04 | There are 4 quarters to scroll on
F6A9 | PUSH BC |
F6AA | CALL $61C2 | Scroll on a quarter
F6AD | POP BC |
F6AE | DJNZ $F6A9 | Jump back until all 4 quarters have been scrolled on
F6B0 | CALL $5F9D | Play the theme tune
F6B3 | RET |