![]() |
Routines |
Prev: 26836 | Up: Map |
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 |