![]() |
Routines |
| Prev: 64331 | Up: Map | Next: 64512 |
|
Used by the routine at 60347. On entry, B holds the value of the third byte of the character's location descriptor (see 60179), which indicates the set of locations the character's current location belongs to:
|
|||||||||||||||||||||||||||
| 64338 | CALL 64512 | Deal with the case where B=2 and the character is standing on the edge of the roof of no. 17 or the apartment building next to no. 19 | |||||||||||||||||||||||||
|
This entry point is used by the routine at 31476 with H=230 (Sam) and B=1.
|
|||||||||||||||||||||||||||
| 64341 | LD L,13 | Initialise byte 13 of the character's buffer to 0 on the assumption that he will land safely | |||||||||||||||||||||||||
| 64343 | LD (HL),0 | ||||||||||||||||||||||||||
| 64345 | BIT 0,B | Does B=2, 4 or 6 (in which case the character will definitely land safely)? | |||||||||||||||||||||||||
| 64347 | JR Z,64354 | Jump if so | |||||||||||||||||||||||||
| 64349 | LD A,H | A=character number | |||||||||||||||||||||||||
| 64350 | CP 230 | Are we dealing with Sam? | |||||||||||||||||||||||||
| 64352 | RET NZ | Return if not (characters other than Sam don't attempt dangerous leaps from the roofs of tall buildings) | |||||||||||||||||||||||||
| 64353 | INC (HL) | Set byte 13 of Sam's buffer to 1 to indicate that he's stepping off or being dropped off the roof of a building from a great enough height that he could be knocked out when he lands (B=1, 3 or 5) | |||||||||||||||||||||||||
| 64354 | DEC B | Are we dealing with Sam being dropped off the roof of a building? | |||||||||||||||||||||||||
| 64355 | JR Z,64368 | Jump if so | |||||||||||||||||||||||||
| 64357 | LD A,B | Point DE at the appropriate landing y-coordinate in the data table at 64326 | |||||||||||||||||||||||||
| 64358 | ADD A,69 | ||||||||||||||||||||||||||
| 64360 | LD E,A | ||||||||||||||||||||||||||
| 64361 | LD D,251 | ||||||||||||||||||||||||||
| 64363 | LD A,(DE) | Collect the landing y-coordinate in A | |||||||||||||||||||||||||
| 64364 | LD B,7 | Prepare to initialise byte 20 of the character's buffer to 7 | |||||||||||||||||||||||||
| 64366 | JR 64377 | ||||||||||||||||||||||||||
|
We are dealing with Sam being dropped off the roof of a building.
|
|||||||||||||||||||||||||||
| 64368 | LD L,1 | A=Sam's x-coordinate | |||||||||||||||||||||||||
| 64370 | LD A,(HL) | ||||||||||||||||||||||||||
| 64371 | CALL 60165 | Set the carry flag if there is no sidewalk beneath Sam | |||||||||||||||||||||||||
| 64374 | LD A,34 | A=34 if Sam is above the sidewalk, 35 if he's above the road | |||||||||||||||||||||||||
| 64376 | ADC A,B | ||||||||||||||||||||||||||
|
At this point A holds the character's landing y-coordinate, and B holds 0 (if the character is Sam and he's been dropped from the roof of a building) or 7 (if the character is voluntarily stepping off the roof).
|
|||||||||||||||||||||||||||
| 64377 | LD L,20 | Set byte 20 of the character's buffer to 0 or 7 | |||||||||||||||||||||||||
| 64379 | LD (HL),B | ||||||||||||||||||||||||||
| 64380 | INC L | Store the character's landing y-coordinate in byte 21 of his buffer | |||||||||||||||||||||||||
| 64381 | LD (HL),A | ||||||||||||||||||||||||||
| 64382 | LD A,H | A=character number | |||||||||||||||||||||||||
| 64383 | CP 230 | Are we dealing with Sam? | |||||||||||||||||||||||||
| 64385 | JR Z,64398 | Jump if so | |||||||||||||||||||||||||
| 64387 | LD L,15 | Remove the address of any interruptible subcommand routine from bytes 14 and 15 of the character's buffer | |||||||||||||||||||||||||
| 64389 | LD (HL),0 | ||||||||||||||||||||||||||
| 64391 | LD BC,64331 | Set the character's uninterruptible subcommand routine to 64331 and jump to it now | |||||||||||||||||||||||||
| 64394 | PUSH BC | ||||||||||||||||||||||||||
| 64395 | JP 63981 | ||||||||||||||||||||||||||
|
The remainder of this routine deals with Sam's descent from the roof of the building (either to the ground or to the roof of the neighbouring building).
|
|||||||||||||||||||||||||||
| 64398 | LD A,128 | Set bit 7 of Sam's status flags at 32764, indicating that he's falling from the roof of a building | |||||||||||||||||||||||||
| 64400 | LD (32764),A | ||||||||||||||||||||||||||
| 64403 | CALL 60521 | Make a sound effect | |||||||||||||||||||||||||
| 64406 | LD L,20 | Collect byte 20 of Sam's buffer | |||||||||||||||||||||||||
| 64408 | LD A,(HL) | ||||||||||||||||||||||||||
| 64409 | AND A | Is Sam falling straight downwards now? | |||||||||||||||||||||||||
| 64410 | JR NZ,64413 | Jump if not | |||||||||||||||||||||||||
| 64412 | INC A | A=1 | |||||||||||||||||||||||||
| 64413 | LD L,8 | Set Sam's main action timer (in byte 8 of his buffer) to 1 if he's falling straight downwards now, or to the value of byte 20 of his buffer (1-7) if he's still moving left or right at the beginning of his descent | |||||||||||||||||||||||||
| 64415 | LD (HL),A | ||||||||||||||||||||||||||
| 64416 | CALL 64227 | Move Sam to the next point in his descent | |||||||||||||||||||||||||
| 64419 | JP C,60547 | Scroll the screen if necessary if Sam is still falling | |||||||||||||||||||||||||
| 64422 | LD HL,0 | Set Sam's post-midstride y-coordinate (in byte 7 of his buffer) to 0 to indicate that he is neither midstride nor mid-action, and his main action timer (in byte 8) to 0 to indicate to the routine at 29912 that Sam has finished falling | |||||||||||||||||||||||||
| 64425 | LD (58887),HL | ||||||||||||||||||||||||||
| 64428 | RET Z | Return if Sam landed safely (without being knocked out) | |||||||||||||||||||||||||
|
Sam has landed, and been knocked out by the fall.
|
|||||||||||||||||||||||||||
| 64429 | CALL 60032 | Update the display | |||||||||||||||||||||||||
| 64432 | CALL 64618 | Scroll the screen up and down a row 7 times (with accompanying sound effects) | |||||||||||||||||||||||||
| 64435 | LD H,230 | 230=Sam | |||||||||||||||||||||||||
| 64437 | CALL 60300 | Make Sam stand up | |||||||||||||||||||||||||
| 64440 | CALL 64599 | Hide the play area and clear the SRB | |||||||||||||||||||||||||
| 64443 | CALL 61823 | Get a random number between 50 and 57 (ASCII codes for the digits 2-9) in A | |||||||||||||||||||||||||
| 64446 | AND 7 | ||||||||||||||||||||||||||
| 64448 | ADD A,50 | ||||||||||||||||||||||||||
| 64450 | LD (32720),A | Store this at 32720 | |||||||||||||||||||||||||
| 64453 | SUB 48 | A=N/10 (where N is the number of bucks Sam lost) | |||||||||||||||||||||||||
| 64455 | CALL 28295 | Adjust Sam's cash supply and print the new amount | |||||||||||||||||||||||||
| 64458 | LD A,35 | Message 35: ' WHEN I CAME TO MY WALLET WAS GONE...' | |||||||||||||||||||||||||
| 64460 | JP Z,31445 | Queue this message and show the ending cutscene if Sam has run out of money | |||||||||||||||||||||||||
| 64463 | INC A | A=36: ' WHEN I CAME TO SOMEONE HAD TAKEN ${tens digit}0' | |||||||||||||||||||||||||
| 64464 | CALL 28357 | Queue this message | |||||||||||||||||||||||||
| 64467 | CALL 31960 | Take the hook and budgie from Sam (if he has them) | |||||||||||||||||||||||||
|
Now we reveal the play area one row of tiles at a time from the bottom up, with accompanying sound effects.
|
|||||||||||||||||||||||||||
| 64470 | LD HL,32608 | Point HL at one byte past the end of the screen refresh buffer (SRB), which is currently clear | |||||||||||||||||||||||||
| 64473 | LD C,20 | There are 20 rows of the screen to reveal | |||||||||||||||||||||||||
| 64475 | LD B,4 | Set every bit in a group of 4 bytes of the SRB, corresponding to one row of the screen | |||||||||||||||||||||||||
| 64477 | DEC L | ||||||||||||||||||||||||||
| 64478 | LD (HL),255 | ||||||||||||||||||||||||||
| 64480 | DJNZ 64477 | ||||||||||||||||||||||||||
| 64482 | PUSH BC | Save the screen row counter (in C) | |||||||||||||||||||||||||
| 64483 | PUSH HL | Save the SRB pointer | |||||||||||||||||||||||||
| 64484 | LD A,100 | E=100-L (where L is the LSB of the SRB address); this value determines the pitch of the sound effect | |||||||||||||||||||||||||
| 64486 | SUB L | ||||||||||||||||||||||||||
| 64487 | LD E,A | ||||||||||||||||||||||||||
| 64488 | LD A,C | Multiply C (the screen row counter) by 8; this value determines the duration of the sound effect, and the border colour (0=black) | |||||||||||||||||||||||||
| 64489 | ADD A,A | ||||||||||||||||||||||||||
| 64490 | ADD A,A | ||||||||||||||||||||||||||
| 64491 | ADD A,A | ||||||||||||||||||||||||||
| 64492 | LD C,A | ||||||||||||||||||||||||||
| 64493 | XOR 16 | Make a sound effect with pitch and duration determined by the row of the screen that is being revealed | |||||||||||||||||||||||||
| 64495 | OUT (254),A | ||||||||||||||||||||||||||
| 64497 | LD B,E | ||||||||||||||||||||||||||
| 64498 | DJNZ 64498 | ||||||||||||||||||||||||||
| 64500 | DEC C | ||||||||||||||||||||||||||
| 64501 | JR NZ,64493 | ||||||||||||||||||||||||||
| 64503 | CALL 60032 | Reveal a row of the play area | |||||||||||||||||||||||||
| 64506 | POP HL | Restore the SRB pointer to HL | |||||||||||||||||||||||||
| 64507 | POP BC | Restore the screen row counter to C | |||||||||||||||||||||||||
| 64508 | DEC C | Have we revealed all 20 rows yet? | |||||||||||||||||||||||||
| 64509 | JR NZ,64475 | Jump back to reveal the next row if not | |||||||||||||||||||||||||
| 64511 | RET | ||||||||||||||||||||||||||
| Prev: 64331 | Up: Map | Next: 64512 |