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 offscreen to the left or right, it will be moved to a location just offscreen 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 offscreen 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 xcoordinate 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 xcoordinate greater than X12?  
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 xcoordinate greater than X+48?  
25459  JR NC,25477  Jump if not  
The banknote is offscreen to the left by at least 12 xcoordinates, or it's offscreen to the right by at least 17 xcoordinates, 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 ycoordinate to 34  
25466  LD A,(32766)  A=X (the xcoordinate 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 X11  
25475  JR 25480  
The banknote is onscreen 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 ycoordinate (3235); 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=05  
25523  CP C  Is A<3?  
25524  JR C,25528  Jump if so  
25526  INC E  Otherwise increment the banknote's xcoordinate  
25527  SUB C  A=02  
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 ycoordinate  
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 