|  | Routines | 
| Prev: 60558 | Up: Map | Next: 60725 | 
| 
Used by the routine at InitialiseGame.
 | ||||
| CheckPassword | 60587 | LD HL,2595 | Write 2595 to *REPDEL/*REPPER. | |
| 60590 | LD (23561),HL | |||
| 60593 | CALL ClearScreen | Call ClearScreen. | ||
| 
Set the attributes for the code entry messaging.
 | ||||
| 60596 | LD HL,22784 | HL=22784 (attribute buffer location). | ||
| 60599 | LD B,64 | B=64 (counter; two full rows). | ||
| CheckPassword_GreenLoop | 60601 | LD (HL),4 | Write 4 (INK: GREEN, PAPER: BLACK ) to *HL. | |
| 60603 | INC L | Increment L by one. | ||
| 60604 | DJNZ CheckPassword_GreenLoop | Decrease counter by one and loop back to CheckPassword_GreenLoop until counter is zero. | ||
| 
Print "KEY IN 1ST CHARACTER OF CODE" to the screen.
 | ||||
| 60606 | EXX | Switch to the shadow registers. | ||
| 60607 | LD DE,18432 | DE'=18432 (screen buffer location). | ||
| 60610 | EXX | Switch back to the normal registers. | ||
| 60611 | LD B,64 | B=64 (counter; two full rows). | ||
| 60613 | LD HL,60948 | HL=Messaging_CodeEntry. | ||
| 60616 | CALL Print_Loop | Call Print_Loop. | ||
| 60619 | CALL PlayerTypedInput | Call PlayerTypedInput. | ||
| 60622 | CP 13 | Jump to CheckPassword_Input if A is not equal to 13 ("ENTER"). | ||
| 60624 | JR NZ,CheckPassword_Input | |||
| 
The player pressed the "ENTER" key to skip entering a code.
 | ||||
| StartGame | 60626 | LD HL,257 | Write 1 to *REPDEL and 1 to *REPPER. | |
| 60629 | LD (23561),HL | |||
| 60632 | JP GameInitialisation | Jump to GameInitialisation. | ||
| 
The player is entering a password to access a later level.
 | ||||
| CheckPassword_Input | 60635 | LD DE,30766 | DE=LevelProgressPointer. | |
| 60638 | LD (DE),A | Write A to *DE. | ||
| 60639 | EXX | Switch to the shadow registers. | ||
| 60640 | LD E,32 | E'=32. | ||
| 60642 | EXX | Switch back to the normal registers. | ||
| 60643 | LD HL,59808 | HL=Messaging_Blank. | ||
| 60646 | LD B,32 | B=32. | ||
| 60648 | CALL Print_Loop | Call Print_Loop. | ||
| 60651 | LD B,4 | B=4. | ||
| 60653 | LD HL,61108 | HL=Messaging_CodeLetterPosition. | ||
| 
Updates the number suffix in the messaging.
 | ||||
| NumberSuffix | 60656 | EXX | Switch to the shadow registers. | |
| 60657 | LD E,9 | E'=9. | ||
| 60659 | EXX | Switch back to the normal registers. | ||
| 60660 | PUSH BC | Stash BC on the stack. | ||
| 60661 | LD B,3 | B=3 (counter; length of number suffix messaging). | ||
| 60663 | CALL Print_Loop | Call Print_Loop. | ||
| 60666 | POP BC | Restore BC from the stack. | ||
| 60667 | PUSH HL | Stash HL on the stack. | ||
| 60668 | CALL PlayerTypedInput | Call PlayerTypedInput. | ||
| 60671 | POP HL | Restore HL from the stack. | ||
| 60672 | INC E | Increment E by one. | ||
| 60673 | LD (DE),A | Write A to *DE. | ||
| 60674 | DJNZ NumberSuffix | Decrease counter by one and loop back to NumberSuffix until counter is zero. | ||
| 
Test if any of the passwords match the input.
 | ||||
| 60676 | LD C,7 | C=7 (counter; there are seven passwords). | ||
| 60678 | LD HL,61120 | HL=Messaging_Passwords. | ||
| CheckPassword_Loop | 60681 | LD E,46 | Reset the user input held by DE back to the start of the string (LevelProgressPointer). | |
| 60683 | LD B,5 | B=5 (counter; length of a password string). | ||
| CheckLetter_Loop | 60685 | LD A,(DE) | Fetch a letter of the user-entered password string. | |
| 60686 | INC E | Increment the user-entered input pointer by one. | ||
| 60687 | CP (HL) | Jump to NextPassword if A is not equal to *HL. | ||
| 60688 | JR NZ,NextPassword | |||
| 
There's a match, move onto the next letter of this password.
 | ||||
| 60690 | INC HL | Increment HL by one. | ||
| 60691 | DJNZ CheckLetter_Loop | Decrease counter by one and loop back to CheckLetter_Loop until counter is zero. | ||
| 
Success! This password is a match!
 | ||||
| 60693 | LD A,7 | A=7 (maximum levels). | ||
| 
The position in the password list counts down from 7 so this negatively correlates with the level number.
 | ||||
| 60695 | SUB C | A-=C. | ||
| 60696 | LD (30752),A | Write A to *CurrentLevel. | ||
| 60699 | JR StartGame | Jump to StartGame. | ||
| 
This password didn't match, move onto the next one.
 | ||||
| NextPassword | 60701 | INC HL | Increment HL by one. | |
| 60702 | DJNZ NextPassword | Decrease counter by one and loop back to NextPassword until counter is zero. | ||
| 
Are we out of passwords to check yet?
 | ||||
| 60704 | DEC C | Decrease C by one. | ||
| 60705 | JR NZ,CheckPassword_Loop | Jump to CheckPassword_Loop until C is zero. | ||
| 
All passwords have been checked, let the player know their password was entered incorrectly.
 | ||||
| 60707 | EXX | Switch to the shadow registers. | ||
| 60708 | LD E,0 | E'=0. | ||
| 60710 | EXX | Switch back to the normal registers. | ||
| 60711 | LD HL,61012 | HL=Messaging_Mistake. | ||
| 60714 | LD B,32 | B=32 (counter; length of mistake string). | ||
| 60716 | CALL Print_Loop | Call Print_Loop. | ||
| 60719 | CALL PauseLong | Debounce using PauseLong. | ||
| 60722 | JP CheckPassword | Jump to CheckPassword. | ||
| Prev: 60558 | Up: Map | Next: 60725 |