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