Routines |
Prev: 26836 | Up: Map | Next: 27007 |
This section of code is entered at various points. The main entry point below is used by the startup routine at 24288.
|
||||
26880 | LD SP,23806 | Put the stack pointer somewhere safe | ||
26883 | CALL 32390 | Play the theme tune | ||
26886 | JR 26902 | Enter demo mode | ||
This entry point is used by the routine at 63990 when ERIC has been sent home (either for having mumps or for having over 10000 lines).
|
||||
26888 | CALL 32470 | Remove the speech bubble | ||
26891 | LD DE,(32708) | DE=score | ||
26895 | AND A | Reset the carry flag ready for a subtraction | ||
26896 | SBC HL,DE | Subtract the score from the high score... | ||
26898 | ADD HL,DE | ...and add it back again | ||
26899 | JR NC,26902 | Jump unless we have a new high score | ||
26901 | EX DE,HL | HL=new high score | ||
26902 | LD A,255 | 255: demo mode | ||
26904 | JR 26913 | |||
This entry point is used by the routine at 32250 when exiting demo mode.
|
||||
26906 | CALL 60896 | Ask for the input method, and change the character names (if desired) | ||
26909 | LD HL,(32706) | HL=high score | ||
26912 | XOR A | 0: game mode (as opposed to demo mode) | ||
26913 | LD SP,23806 | Put the stack pointer somewhere safe | ||
26916 | PUSH HL | Save the high score | ||
26917 | LD E,A | E=255 (demo mode) or 0 | ||
26918 | LD A,(32761) | Collect the current lesson number (0-63) from 32761 | ||
26921 | AND 48 | Set A to 15, 31, 47 or 63 (lessons 0, 16, 32, and 48 are PLAYTIME) | ||
26923 | ADD A,15 | |||
26925 | LD D,A | D=new lesson number minus one | ||
26926 | PUSH DE | Save this for now | ||
26927 | CALL 63242 | Unflash the safe and all shields | ||
26930 | LD HL,32765 | 32765 holds the number (152-171) of the last character moved | ||
26933 | LD (HL),151 | Reset this number so 152 (little boy no. 1) is moved next | ||
26935 | DEC L | Blank out the rest of the game status buffer (except for the random number seed at 32766) | ||
26936 | LD (HL),0 | |||
26938 | JR NZ,26935 | |||
26940 | LD L,232 | Initialise ERIC's main action timer at 32744 | ||
26942 | LD (HL),17 | |||
26944 | LD L,249 | HL=32761 (which holds the lesson number, 0-63) | ||
26946 | POP DE | Restore the lesson number to D and game mode indicator (0 or 255) to E | ||
26947 | LD (HL),D | Set the lesson number | ||
26948 | LD L,247 | Set the lesson clock (at 32759) to 1 | ||
26950 | INC (HL) | |||
26951 | INC E | If a new game is starting, prepare the shields and safe, and play the theme tune | ||
26952 | CALL NZ,63668 | |||
26955 | POP HL | Restore the high score to HL, and save it in 32706 | ||
26956 | LD (32706),HL | |||
The following loop sets the initial animatory state, location and character flags (byte 122 of the buffer) for each character (including ERIC).
|
||||
26959 | LD H,152 | 152=little boy no. 1 | ||
26961 | LD DE,56064 | The data table at 56064 holds the initial animatory states of the characters | ||
26964 | LD L,96 | Point HL at byte 96 of the character buffer | ||
26966 | LD A,(DE) | Set the initial animatory state of the character | ||
26967 | LD (HL),A | |||
26968 | INC L | L=97 | ||
26969 | INC D | The data table at 56320 holds the initial x-coordinates of the characters | ||
26970 | LD (HL),169 | All characters start on the bottom floor (y=169) | ||
26972 | INC L | L=98 | ||
26973 | LD A,(DE) | Pick up the character's initial x-coordinate | ||
26974 | INC D | The data table at 56576 holds the character flags | ||
26975 | LD (HL),A | Set the character's initial x-coordinate | ||
26976 | LD A,(DE) | Pick up the character flags (0=kid; 16=adult; 32=pellet) | ||
26977 | DEC D | Point DE back at the table of initial animatory states | ||
26978 | DEC D | |||
26979 | INC E | Next character | ||
26980 | LD B,29 | Blank out the remaining 29 bytes of the character's buffer | ||
26982 | INC L | |||
26983 | LD (HL),0 | |||
26985 | DJNZ 26982 | |||
26987 | LD L,122 | Place the character flags into byte 122 of the character's buffer | ||
26989 | LD (HL),A | |||
26990 | INC L | |||
26991 | INC L | L=124 | ||
26992 | LD (HL),159 | Place the address of the continual subcommand routine at 25247 (RET) into bytes 124 and 125 of the character's buffer | ||
26994 | INC L | |||
26995 | LD (HL),98 | |||
26997 | INC H | Next character | ||
26998 | INC A | Have we done all the non-player characters? | ||
26999 | JR NZ,26964 | Jump back to do the next one if not | ||
All that remains now is to print the logo, lesson box and score box, and bring the skool into view.
|
||||
27001 | CALL 27406 | Print the bottom 3 lines of the screen | ||
27004 | JP 63768 | Scroll the skool into view and enter the main loop |
Prev: 26836 | Up: Map | Next: 27007 |