Routines 
Prev: $0ECF  Up: Map  Next: $1042 
$0FBA  JSR $322E  Update the SRB for the pellet's current location.  
$0FBD  DEC $B2  Has the pellet finished its flight yet?  
$0FBF  BNE $0FCC  Branch if not.  
This entry point is used by the routine at $1042 to terminate the vertical portion of the pellet's flight.


$0FC1  LDA #$96  Hide the pellet at xcoordinate 150.  
$0FC3  STA $FC  
$0FC5  LDA #$00  Remove the uninterruptible subcommand routine address from the pellet's buffer.  
$0FC7  STA $B1  
$0FC9  JMP $1041  Return.  
$0FCC  LDA $26  Pick up the pellet's animatory state from $26.  
$0FCE  ASL A  Is the pellet moving right?  
$0FCF  BCS $0FD6  Branch if so.  
$0FD1  DEC $FC  Decerement the pellet's xcoordinate at $FC.  
$0FD3  JMP $0FD8  Jump forward.  
$0FD6  INC $FC  Increment the pellet's xcoordinate at $FC.  
$0FD8  LDA $FC  Pick up the pellet's new xcoordinate from $FC.  
$0FDA  CMP #$60  Is it now 96 or greater?  
$0FDC  BCS $0FC1  Terminate the pellet if so.  
$0FDE  LDA $FB  Pick up the pellet's ycoordinate from $FB.  
$0FE0  CMP #$03  Is the pellet at boys' eye level on the top floor?  
$0FE2  BEQ $0FFB  Branch if so.  
$0FE4  CMP #$0A  Is the pellet at boys' eye level on the middle floor?  
$0FE6  BEQ $0FF2  Branch if so.  
$0FE8  CMP #$11  Is the pellet at boys' eye level on the bottom floor?  
$0FEA  BEQ $1004  Branch if so.  
$0FEC  JSR $322E  Update the SRB for the pellet's new location.  
$0FEF  JMP $1051  Check whether the pellet has hit a shield.  
$0FF2  LDA $FC  Pick up the pellet's xcoordinate from $FC.  
$0FF4  CMP #$26  Is it 38 (equal to that of the Exam Room wall)?  
$0FF6  BNE $1004  Branch if not.  
$0FF8  JMP $0FC1  Otherwise jump back to terminate the pellet.  
$0FFB  LDA $FC  Pick up the pellet's xcoordinate from $FC.  
$0FFD  CMP #$39  Is it 57 (equal to the Map Room wall)?  
$0FFF  BNE $1004  Branch if not.  
$1001  JMP $0FC1  Otherwise jump back to terminate the pellet.  
$1004  JSR $322E  Update the SRB for the pellet's new location.  
$1007  LDA $B2  Pick up the pellet's remaining distance to travel from $B2.  
$1009  CMP #$08  Is the pellet ready to hit something?  
$100B  BCS $1041  Return if not.  
$100D  LDY $FB  Pick up the pellet's coordinates in X and Y.  
$100F  LDX $FC  
$1011  JSR $29C8  Check whether anyone has been hit by the pellet.  
$1014  PHA  Save A temporarily.  
$1015  BCS $1033  Branch if someone was knocked over by the pellet.  
$1017  PLA  Restore A.  
$1018  CMP #$00  Was anyone hit by the pellet?  
$101A  BEQ $1041  Return if not.  
$101C  LDA #$10  Place the address of the uninterruptible subcommand routine at $1042 into the pellet's buffer. This will control the vertical portion of the pellet's flight.  
$101E  STA $B1  
$1020  LDA #$42  
$1022  STA $B0  
$1024  LDA #$05  Set the remaining distance for the pellet to travel to 5.  
$1026  STA $B2  
$1028  LDY $FB  Pick up the pellet's ycoordinate from $FB.  
$102A  CPY #$03  Is the pellet on the top floor?  
$102C  BNE $1041  Branch if not.  
$102E  STY $B2  Otherwise adjust the remaining distance to 3.  
$1030  JMP $1041  Return.  
$1033  LDA #$01  Set the remaining distance for the pellet to travel to 1. This ensures that it's terminated on the next pass.  
$1035  STA $B2  
$1037  PLA  Now A holds the number of the character who was knocked over by the pellet.  
$1038  CMP #$11  Was it EINSTEIN?  
$103A  BNE $1041  Return if not.  
$103C  LDA #$03  Add 30 to the score and print it.  
$103E  JMP $1D37  
$1041  RTS 
Prev: $0ECF  Up: Map  Next: $1042 