Routines |
Prev: F87E | Up: Map | Next: F905 |
Used by the routine at F0BE. Prepares everything for demo mode or a new game and then displays the introductory cutscene.
|
||||
F8AE | CALL $FC46 | Generate the table of mirrored values of 0x00-0xFF at 7E00 | ||
Now we initialise the game status buffer.
|
||||
F8B1 | INC H | HL=7F00 | ||
F8B2 | LD (HL),B | Zero out the first 222 bytes of the game status buffer | ||
F8B3 | LD C,$DD | |||
F8B5 | LD DE,$7F01 | |||
F8B8 | LDIR | |||
F8BA | LD E,$E0 | DE=7FE0 | ||
F8BC | LD HL,$FFE0 | Copy the data at FFE0 into the last 32 bytes of the game status buffer | ||
F8BF | LD C,$20 | |||
F8C1 | LDIR | |||
Next we ensure that all the shop and house doors are closed.
|
||||
F8C3 | LD B,$20 | There are 32 Z values to check (one for each 8-tile wide segment of the play area) | ||
F8C5 | LD HL,$BD00 | Point HL at the first Z value for y-coordinates 30-35 at BD00 | ||
F8C8 | LD A,(HL) | Pick up the Z value | ||
F8C9 | CP $53 | Jump unless the Z value corresponds to the open door of a shop (0x50) or house (0x51 or 0x52) | ||
F8CB | JR NC,$F8D9 | |||
F8CD | CP $50 | |||
F8CF | JR C,$F8D9 | |||
F8D1 | SET 2,(HL) | Set bit 2 of the Z value, thus closing the door | ||
F8D3 | JR NZ,$F8D9 | Jump unless we are dealing with a shop door | ||
F8D5 | INC H | Update the Z value in the block at BE00 if we are dealing with a shop door | ||
F8D6 | LD (HL),$53 | |||
F8D8 | DEC H | Point HL back at the block of Z values at BD00 | ||
F8D9 | INC L | Point HL at the next Z value | ||
F8DA | DJNZ $F8C8 | Jump back until we've checked every Z value | ||
F8DC | CALL $F7F0 | Initialise the character buffers for character groups 0xD7-0xDD | ||
F8DF | CALL $7058 | Initialise the icon panel, score box and message line | ||
F8E2 | CALL $7AE2 | Prepare the phone messages, events and objects | ||
Let's not forget about the rope that may be above the roof of no. 19.
|
||||
F8E5 | LD HL,$0B0B | Set the appropriate Z values in the block at B900 to 11, thus removing the rope (if any) from above the roof of no. 19 | ||
F8E8 | LD ($B91A),HL | |||
And finally we initialise the main characters (0xDE-0xE6) before displaying the introductory cutscene.
|
||||
F8EB | LD A,($7FEE) | A=current game mode (0 or 1) | ||
F8EE | JR $F8F5 | |||
This entry point is used by the routine at 6100.
|
||||
F8F0 | LD HL,$7FEE | 7FEE holds the current game mode (0-4) | ||
F8F3 | INC (HL) | Move to the next game mode | ||
F8F4 | LD A,(HL) | A=next game mode | ||
F8F5 | CALL $F87E | Initialise the character buffers for characters 0xDE-0xE6 | ||
F8F8 | DEC H | Point HL at the message number in the set of initialisation parameters for the current game mode for Sam (see E620) | ||
F8F9 | DEC L | |||
F8FA | LD A,(HL) | Pick up the message number in A | ||
F8FB | PUSH AF | |||
F8FC | DEC L | Pick up the new y-coordinate for the topmost row of the play area on screen in D | ||
F8FD | LD D,(HL) | |||
F8FE | DEC L | Pick up the new x-coordinate for the topmost row of the play area on screen in E | ||
F8FF | LD E,(HL) | |||
F900 | DEC L | Pick up the LSB of the address of the screen refresh buffer byte that corresponds to the top row of the cutscene window | ||
F901 | LD A,(HL) | |||
F902 | JP $7ADB | Display the cutscene |
Prev: F87E | Up: Map | Next: F905 |