![]() |
Routines |
| Prev: F800 | Up: Map | Next: F8B2 |
|
Used by the routine at F8B4. Generates a new safe combination code, sets a new random birth year for MR CREAK, and adjusts the game mode (so that all the shields need to be flashed again).
|
||||||||
| F855 | LD HL,$7FB8 | Clear the safe combination code (stored at 7F9F), the teachers' combination letters (stored at 7FA3), and the blackboard contents buffers (at 7FA8, 7FAE and 7FB4) | ||||||
| F858 | LD B,$19 | |||||||
| F85A | LD (HL),A | |||||||
| F85B | DEC L | |||||||
| F85C | DJNZ $F85A | |||||||
| F85E | LD D,A | DE=0000 | ||||||
| F85F | LD E,A | |||||||
| F860 | LD C,$04 | There are four letters in the combination | ||||||
| F862 | CALL $61A1 | A=random number | ||||||
| F865 | AND $0F | 0x00<=A<=0x0F | ||||||
| F867 | JR $F87C | Store MR WACKER's safe combination letter first (at 7F9F) | ||||||
| F869 | LD L,$9F | HL=7F9F (first letter of the safe combination code) | ||||||
| F86B | ADD HL,BC | HL=7F9F+C (1<=C<=3) | ||||||
| F86C | CALL $61A1 | A=random number | ||||||
| F86F | LD E,B | E=0 | ||||||
| F870 | RRCA | Get a random number between 0 and 3 in E | ||||||
| F871 | RL E | |||||||
| F873 | RRCA | |||||||
| F874 | RL E | |||||||
| F876 | AND $1F | Is A between 0x00 and 0x19? | ||||||
| F878 | CP $1A | |||||||
| F87A | JR NC,$F86C | Jump back if not | ||||||
| F87C | ADD A,$41 | A=ASCII code of an upper case letter | ||||||
| F87E | LD (HL),A | Store this in one of the slots at 7F9F | ||||||
| F87F | LD L,$A3 | Point HL at a random teacher's safe combination letter | ||||||
| F881 | ADD HL,DE | |||||||
| F882 | BIT 6,(HL) | Has this letter already been decided? | ||||||
| F884 | JR NZ,$F869 | Jump if so | ||||||
| F886 | LD (HL),A | Store the ASCII code in one of the four slots at 7FA3 | ||||||
| F887 | DEC C | Next combination letter | ||||||
| F888 | JR NZ,$F869 | Jump back until all four combination letters are done | ||||||
|
The safe combination code has been generated. Now for MR CREAK's birth year.
|
||||||||
| F88A | LD L,$9A | HL=7F9A (which holds the identifier for CREAK's birth year battle) | ||||||
| F88C | CALL $61A1 | Get a random number between 0x00 and 0x14 in A | ||||||
| F88F | CP $15 | |||||||
| F891 | JR NC,$F88C | |||||||
| F893 | ADD A,A | A=random odd number between 0xD5 and 0xFD | ||||||
| F894 | ADD A,$D5 | |||||||
| F896 | LD (HL),A | Store this battle identifier at 7F9A | ||||||
| F897 | SUB $81 | Set HL to the address of the battle year message corresponding to this battle identifier | ||||||
| F899 | LD E,A | |||||||
| F89A | LD H,D | |||||||
| F89B | LD L,D | |||||||
| F89C | ADD HL,DE | |||||||
| F89D | ADD HL,DE | |||||||
| F89E | ADD HL,DE | |||||||
| F89F | ADD HL,HL | |||||||
| F8A0 | ADD HL,HL | |||||||
| F8A1 | LD A,H | |||||||
| F8A2 | ADD A,$DF | |||||||
| F8A4 | LD H,A | |||||||
| F8A5 | LD DE,$7F9B | Store the digits of CREAK's birth year at 7F9B | ||||||
| F8A8 | LD C,$04 | |||||||
| F8AA | LDIR | |||||||
|
Finally, adjust the game mode.
|
||||||||
| F8AC | LD A,$01 | Set the game mode indicator at 7FEA to 1, indicating that the shields need to be flashed | ||||||
| F8AE | LD ($7FEA),A | |||||||
| F8B1 | RET | |||||||
| Prev: F800 | Up: Map | Next: F8B2 |