| Routines

F8AE: Prepare for demo mode or a new game

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
Next we initialise characters 0xD7-0xDD, the icon panel, the score box, the message line, the phone messages, the event table at 5FE0 and the object table at 7D1C.
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