![]() |
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 x-coordinate 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 x-coordinate at $FC. | ||
| $0FD3 | JMP $0FD8 | Jump forward. | ||
| $0FD6 | INC $FC | Increment the pellet's x-coordinate at $FC. | ||
| $0FD8 | LDA $FC | Pick up the pellet's new x-coordinate 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 y-coordinate 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 x-coordinate 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 x-coordinate 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 y-coordinate 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 |