![]() |
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 (which is redundant, because byte 7 will already be 0), 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 |