Routines |
Prev: 25395 | Up: Map | Next: 25539 |
Used by the command list at 64888. Calculates and sets the banknote's next animatory state and location. If the banknote is far enough off-screen to the left or right, it will be moved to a location just off-screen to the left.
|
||||||||
25420 | LD A,(32745) | 32745 holds Sam's object inventory | ||||||
25423 | RLCA | Has Sam got the hook (bit 6 set)? | ||||||
25424 | RLCA | |||||||
25425 | JR NC,25434 | Jump if not | ||||||
Sam's got the hook; we bring this banknote out of service so that its character buffer is available for use by the hook when it's thrown. However, the banknote is not removed from view, which is a bug.
|
||||||||
25427 | CALL 59848 | Update the SRB for the banknote's current animatory state and location | ||||||
25430 | CALL 63409 | Change the banknote's primary command routine address to 25433 (below) | ||||||
25433 | RET | |||||||
This entry point is used by the command list at 64886.
|
||||||||
25434 | LD L,10 | Collect byte 10 of the banknote's buffer | ||||||
25436 | LD A,(HL) | |||||||
25437 | AND A | Reset the zero flag if Sam has just landed on this banknote | ||||||
25438 | LD (HL),0 | Set byte 10 to zero | ||||||
25440 | JR NZ,25461 | Jump if Sam has just landed on this banknote | ||||||
First we check whether the banknote is far off-screen to the left or right.
|
||||||||
25442 | LD L,1 | Point HL at byte 1 of the banknote's buffer | ||||||
25444 | LD A,(32766) | A=X (the x-coordinate of the leftmost column of the play area on screen) | ||||||
25447 | SUB 12 | Is X=0 or 8? | ||||||
25449 | JR C,25454 | Jump if so | ||||||
25451 | CP (HL) | Is the banknote's x-coordinate greater than X-12? | ||||||
25452 | JR NC,25461 | Jump if not | ||||||
25454 | ADD A,60 | A=X+48 | ||||||
25456 | JR C,25477 | Jump if X=0, 8, 208, 216 or 224 | ||||||
25458 | CP (HL) | Is the banknote's x-coordinate greater than X+48? | ||||||
25459 | JR NC,25477 | Jump if not | ||||||
The banknote is off-screen to the left by at least 12 x-coordinates, or it's off-screen to the right by at least 17 x-coordinates, or it's just been landed on by Sam. Time to reinitialise its animatory state and location.
|
||||||||
25461 | CALL 59848 | Update the SRB for the banknote's current animatory state and location | ||||||
25464 | LD D,34 | Initialise the banknote's y-coordinate to 34 | ||||||
25466 | LD A,(32766) | A=X (the x-coordinate of the leftmost column of the play area on screen) | ||||||
25469 | SUB 11 | Is X>8? | ||||||
25471 | JR NC,25474 | Jump if so | ||||||
25473 | SBC A,A | A=255 | ||||||
25474 | LD E,A | E=255 (if X<=8) or X-11 | ||||||
25475 | JR 25480 | |||||||
The banknote is on-screen or not far off it. Now we calculate the banknote's next animatory state and location.
|
||||||||
25477 | CALL 59848 | Update the SRB for the banknote's current animatory state and location | ||||||
25480 | PUSH AF | Save the banknote's current animatory state briefly | ||||||
25481 | CALL 61823 | Get a random number in A | ||||||
25484 | LD C,A | Copy it to C | ||||||
25485 | AND 136 | Keep only bits 3 and 7 | ||||||
25487 | ADD A,62 | B=62, 70, 190, or 198 (banknote animatory states) | ||||||
25489 | LD B,A | |||||||
25490 | POP AF | Restore the banknote's current animatory state to A | ||||||
25491 | CP B | Is it equal to B? | ||||||
25492 | JR Z,25480 | Jump back to generate another animatory state if so | ||||||
At this point B holds the banknote's next animatory state. Now we calculate its next location.
|
||||||||
25494 | LD A,B | A=banknote's next animatory state | ||||||
25495 | PUSH AF | Save this briefly | ||||||
25496 | CALL 60164 | Set the carry flag if the banknote is above the road (as opposed to the sidewalk) | ||||||
25499 | ADC A,45 | A=45 if the banknote is above the sidewalk, or 46 if it's above the road | ||||||
25501 | SUB E | |||||||
25502 | SUB D | Subtract the banknote's current y-coordinate (32-35); now A=11+G, where G (-1<=G<=3) is the height of the banknote above the ground | ||||||
25503 | LD B,A | Multiply this value by 5 and add 1 (A=51, 56, 61, 66, or 71) | ||||||
25504 | ADD A,A | |||||||
25505 | ADD A,A | |||||||
25506 | ADD A,B | |||||||
25507 | INC A | |||||||
25508 | PUSH HL | Save the banknote's character number | ||||||
25509 | LD L,A | Point HL at the entry in the banknote animation table at 25395 that corresponds to the banknote's height above the ground | ||||||
25510 | LD H,99 | |||||||
25512 | LD A,C | A=random number generated earlier | ||||||
25513 | LD BC,1283 | B=5 (number of bytes in the entry), C=3 | ||||||
25516 | CP (HL) | Find the first byte in the entry that is greater than A | ||||||
25517 | JR C,25522 | |||||||
25519 | INC HL | |||||||
25520 | DJNZ 25516 | |||||||
25522 | LD A,B | A=0-5 | ||||||
25523 | CP C | Is A<3? | ||||||
25524 | JR C,25528 | Jump if so | ||||||
25526 | INC E | Otherwise increment the banknote's x-coordinate | ||||||
25527 | SUB C | A=0-2 | ||||||
25528 | ADD A,A | A=0, 2 or 4 | ||||||
25529 | JR Z,25532 | Jump if A=0 | ||||||
25531 | SUB C | A=-1 or 1 | ||||||
25532 | ADD A,D | Add -1, 0 or 1 to the banknote's current y-coordinate | ||||||
25533 | LD D,A | |||||||
25534 | POP HL | Restore the banknote's character number to H | ||||||
25535 | POP AF | Restore the banknote's next animatory state to A | ||||||
25536 | JP 59861 | Update the banknote's animatory state and location and update the SRB |
Prev: 25395 | Up: Map | Next: 25539 |