![]() |
Routines |
| Prev: $2241 | Up: Map | Next: $246B |
| $2387 | LDA #$00 | Remove any submessage address from the character's buffer. | ||
| $2389 | STA $AE | |||
| $238B | STA $AF | |||
| $238D | LDA $FC | Pick up the character's x-coordinate. | ||
| $238F | STA $57 | Store it at $57 and increment it. | ||
| $2391 | INC $57 | |||
| $2393 | LDA $58 | Pick up the x-coordinate of the leftmost column of the skool on screen. | ||
| $2395 | CMP $57 | Is the character off-screen to the left? | ||
| $2397 | BCC $239C | Branch if not. | ||
| $2399 | JMP $1D28 | Otherwise terminate this interruptible subcommand. | ||
| $239C | LDA $59 | Pick up the x-coordinate of the leftmost column of the skool that is off screen. | ||
| $239E | INC $57 | Is the character off-screen to the right? | ||
| $23A0 | CMP $57 | |||
| $23A2 | BCS $23A7 | Branch if not. | ||
| $23A4 | JMP $1D28 | Otherwise terminate this interruptible subcommand. | ||
| $23A7 | LDA $D015 | Are any sprites enabled at the moment? | ||
| $23AA | BEQ $23AF | Branch if not. | ||
| $23AC | JMP $246A | Otherwise return (someone else is speaking). | ||
|
The character is on-screen and no one else is speaking at the moment.
|
||||
| $23AF | LDA #$58 | Replace the address of this interruptible subcommand routine in the character's buffer with that of $2458 (below). | ||
| $23B1 | STA $AA | |||
| $23B3 | LDA #$24 | |||
| $23B5 | STA $AB | |||
| $23B7 | LDA #$CA | Store $CA40 (the address of the sprite for the first middle section of the speech bubble) at $4E. | ||
| $23B9 | STA $4F | |||
| $23BB | LDA #$40 | |||
| $23BD | STA $4E | |||
| $23BF | LDA #$00 | Remove any existing text from this sprite. | ||
| $23C1 | LDY #$24 | |||
| $23C3 | STA ($4E),Y | |||
| $23C5 | DEY | |||
| $23C6 | CPY #$0B | |||
| $23C8 | BNE $23C3 | |||
| $23CA | LDA #$80 | Store $CA80 (the address of the sprite for the second middle section of the speech bubble) at $4E. | ||
| $23CC | STA $4E | |||
| $23CE | LDA #$00 | Remove any existing text from this sprite. | ||
| $23D0 | LDY #$24 | |||
| $23D2 | STA ($4E),Y | |||
| $23D4 | DEY | |||
| $23D5 | CPY #$0B | |||
| $23D7 | BNE $23D2 | |||
| $23D9 | LDA $60 | Pick up the current character number from $60. | ||
| $23DB | CMP #$0B | Is it $00-$0A (one of the little boys)? | ||
| $23DD | BCS $23E2 | Branch if not. | ||
| $23DF | JMP $23EE | Jump forward. | ||
| $23E2 | CMP #$0F | Is the current character a teacher ($0B-$0E)? | ||
| $23E4 | BCS $23EE | Branch if not. | ||
| $23E6 | LDA $FB | Pick up the teacher's y-coordinate from $FB. | ||
| $23E8 | SEC | Subtract 3 from the teacher's y-coordinate. This will be the y-coordinate of the speech bubble. | ||
| $23E9 | SBC #$03 | |||
| $23EB | JMP $23F3 | Jump forward. | ||
| $23EE | LDA $FB | Pick up the boy's y-coordinate. | ||
| $23F0 | SEC | Subtract 2 from the boy's y-coordinate. This will be the y-coordinate of the speech bubble. | ||
| $23F1 | SBC #$02 | |||
| $23F3 | ASL A | Multiply this y-coordinate by 8 to get the screen pixel y-coordinate. | ||
| $23F4 | ASL A | |||
| $23F5 | ASL A | |||
| $23F6 | CLC | Add 52 to this pixel y-coordinate and store the result at $D1. | ||
| $23F7 | ADC #$34 | |||
| $23F9 | STA $D1 | |||
| $23FB | LDA #$00 | Reset bit 8 of the x-coordinates of all sprites. | ||
| $23FD | STA $D010 | |||
| $2400 | LDA $FC | Pick up the character's x-coordinate. | ||
| $2402 | CLC | Add 4 to the character's x-coordinate. | ||
| $2403 | ADC #$04 | |||
| $2405 | SEC | Subtract the x-coordinate of the leftmost column of the skool on screen. | ||
| $2406 | SBC $58 | |||
| $2408 | ASL A | Multiply by 8 to get the screen pixel x-coordinate of the lip section of the speech bubble. | ||
| $2409 | ASL A | |||
| $240A | ASL A | |||
| $240B | BCC $2415 | Branch unless the multiplication overflowed. | ||
| $240D | LDX #$28 | Set bit 8 of the x-coordinates of sprites #3 and #5. | ||
| $240F | STX $D010 | |||
| $2412 | JMP $241B | Jump forward. | ||
| $2415 | JSR $379F | Prepare sprites #0-#6 for the speech bubble with the lip on the left. | ||
| $2418 | JMP $241E | Jump forward. | ||
| $241B | JSR $3805 | Prepare sprites #0-#6 for the speech bubble with the lip on the right. | ||
| $241E | LDA #$40 | Stretch sprite #6 (the filled in middle section of the speech bubble) to double width. | ||
| $2420 | STA $D01D | |||
| $2423 | LDA #$00 | Set the colour of sprites #0-#3 (the outline sections of the speech bubble) to black. | ||
| $2425 | STA $D027 | |||
| $2428 | STA $D028 | |||
| $242B | STA $D029 | |||
| $242E | STA $D02A | |||
| $2431 | LDA #$01 | Set the colour of sprites #4-#6 (the filled in sections of the speech bubble) to white. | ||
| $2433 | STA $D02B | |||
| $2436 | STA $D02C | |||
| $2439 | STA $D02D | |||
| $243C | LDA $D1 | Set the y-coordinates of sprites #0-#6. | ||
| $243E | STA $D001 | |||
| $2441 | STA $D003 | |||
| $2444 | STA $D005 | |||
| $2447 | STA $D007 | |||
| $244A | STA $D009 | |||
| $244D | STA $D00B | |||
| $2450 | STA $D00D | |||
| $2453 | LDA #$7F | Enable sprites #0-#6 and draw them. | ||
| $2455 | STA $D015 | |||
|
This entry point is used while the character is speaking.
|
||||
| $2458 | JSR $246B | Slide a message character into the speech bubble text window. | ||
| $245B | BCC $2465 | Branch unless the message has finished. | ||
| $245D | LDA #$00 | Disable all sprites, effectively removing the speech bubble. | ||
| $245F | STA $D015 | |||
| $2462 | JMP $1D28 | Terminate this interruptible subcommand. | ||
| $2465 | JSR $246B | Slide another message character into the speech bubble text window. | ||
| $2468 | BCS $245D | Branch if the message has finished. | ||
| $246A | RTS | |||
| Prev: $2241 | Up: Map | Next: $246B |