Routines 
Prev: 6333  Up: Map  Next: 63C3 
Used by the command list at FD78. 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.


634C  LD A,($7FE9)  7FE9 holds Sam's object inventory  
634F  RLCA  Has Sam got the hook (bit 6 set)?  
6350  RLCA  
6351  JR NC,$635A  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.


6353  CALL $E9C8  Update the SRB for the banknote's current animatory state and location  
6356  CALL $F7B1  Change the banknote's primary command routine address to 6359 (below)  
6359  RET  
This entry point is used by the command list at FD76.


635A  LD L,$0A  Collect byte 0x0A of the banknote's buffer  
635C  LD A,(HL)  
635D  AND A  Reset the zero flag if Sam has just landed on this banknote  
635E  LD (HL),$00  Set byte 0x0A to zero  
6360  JR NZ,$6375  Jump if Sam has just landed on this banknote  
First we check whether the banknote is far offscreen to the left or right.


6362  LD L,$01  Point HL at byte 0x01 of the banknote's buffer  
6364  LD A,($7FFE)  A=X (the xcoordinate of the leftmost column of the play area on screen)  
6367  SUB $0C  Is X=0 or 8?  
6369  JR C,$636E  Jump if so  
636B  CP (HL)  Is the banknote's xcoordinate greater than X12?  
636C  JR NC,$6375  Jump if not  
636E  ADD A,$3C  A=X+48  
6370  JR C,$6385  Jump if X=0, 8, 208, 216 or 224  
6372  CP (HL)  Is the banknote's xcoordinate greater than X+48?  
6373  JR NC,$6385  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.


6375  CALL $E9C8  Update the SRB for the banknote's current animatory state and location  
6378  LD D,$22  Initialise the banknote's ycoordinate to 34  
637A  LD A,($7FFE)  A=X (the xcoordinate of the leftmost column of the play area on screen)  
637D  SUB $0B  Is X>8?  
637F  JR NC,$6382  Jump if so  
6381  SBC A,A  A=0xFF  
6382  LD E,A  E=0xFF (if X<=8) or X11  
6383  JR $6388  
The banknote is onscreen or not far off it. Now we calculate the banknote's next animatory state and location.


6385  CALL $E9C8  Update the SRB for the banknote's current animatory state and location  
6388  PUSH AF  Save the banknote's current animatory state briefly  
6389  CALL $F17F  Get a random number in A  
638C  LD C,A  Copy it to C  
638D  AND $88  Keep only bits 3 and 7  
638F  ADD A,$3E  B=0x3E, 0x46, 0xBE, or 0xC6 (banknote animatory states)  
6391  LD B,A  
6392  POP AF  Restore the banknote's current animatory state to A  
6393  CP B  Is it equal to B?  
6394  JR Z,$6388  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.


6396  LD A,B  A=banknote's next animatory state  
6397  PUSH AF  Save this briefly  
6398  CALL $EB04  Set the carry flag if the banknote is above the road (as opposed to the sidewalk)  
639B  ADC A,$2D  A=45 if the banknote is above the sidewalk, or 46 if it's above the road  
639D  SUB E  
639E  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  
639F  LD B,A  Multiply this value by 5 and add 1 (A=51, 56, 61, 66, or 71)  
63A0  ADD A,A  
63A1  ADD A,A  
63A2  ADD A,B  
63A3  INC A  
63A4  PUSH HL  Save the banknote's character number  
63A5  LD L,A  Point HL at the entry in the banknote animation table at 6333 that corresponds to the banknote's height above the ground  
63A6  LD H,$63  
63A8  LD A,C  A=random number generated earlier  
63A9  LD BC,$0503  B=5 (number of bytes in the entry), C=3  
63AC  CP (HL)  Find the first byte in the entry that is greater than A  
63AD  JR C,$63B2  
63AF  INC HL  
63B0  DJNZ $63AC  
63B2  LD A,B  A=05  
63B3  CP C  Is A<3?  
63B4  JR C,$63B8  Jump if so  
63B6  INC E  Otherwise increment the banknote's xcoordinate  
63B7  SUB C  A=02  
63B8  ADD A,A  A=0, 2 or 4  
63B9  JR Z,$63BC  Jump if A=0  
63BB  SUB C  A=1 or 1  
63BC  ADD A,D  Add 1, 0 or 1 to the banknote's current ycoordinate  
63BD  LD D,A  
63BE  POP HL  Restore the banknote's character number to H  
63BF  POP AF  Restore the banknote's next animatory state to A  
63C0  JP $E9D5  Update the banknote's animatory state and location and update the SRB 
Prev: 6333  Up: Map  Next: 63C3 