Prev: F5B7 Up: Map Next: F6B4
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
Prev: F5B7 Up: Map Next: F6B4