![]() |
Routines |
Prev: 725E | Up: Map |
|
||||||||||
7264 | CALL $7128 | Collect the identifier of the nearest blackboard in A | ||||||||
7267 | LD C,A | BC=7FED (Reading Room blackboard), 7FEF (White Room blackboard), or 7FF1 (Exam Room blackboard) | ||||||||
7268 | LD B,$7F | |||||||||
726A | INC C | |||||||||
726B | LD A,(BC) | A=number of the character who last wrote on the board | ||||||||
726C | AND A | Is the board dirty? | ||||||||
726D | JP NZ,$62A4 | Terminate this interruptible subcommand if so | ||||||||
7270 | NOP | |||||||||
7271 | NOP | |||||||||
7272 | NOP | |||||||||
The board is clean, so the character can go ahead and write on it.
|
||||||||||
7273 | LD A,H | Store this character's number in the blackboard buffer, indicating that he wrote on it | ||||||||
7274 | LD (BC),A | |||||||||
7275 | LD L,$6E | Zero out bytes 0x6D and 0x6E of the character's buffer (which hold the submessage address) | ||||||||
7277 | LD (HL),$00 | |||||||||
7279 | DEC L | |||||||||
727A | LD (HL),$00 | |||||||||
727C | ADD A,$43 | A=0xEA (BOY WANDER) or 0xE6-0xE9 (a teacher) | ||||||||
727E | CP $EA | Are we dealing with a teacher? | ||||||||
7280 | JR C,$7284 | Jump if so | ||||||||
7282 | LD A,$E5 | A=0xE5 if we're dealing with BOY WANDER | ||||||||
7284 | DEC L | A holds the MSB of the blackboard message address; store this in byte 0x6C of the character's buffer | ||||||||
7285 | LD (HL),A | |||||||||
7286 | DEC L | Get a random multiple of 32 in A; this will be the LSB of the blackboard message address, which is stored in byte 0x6B of the character's buffer | ||||||||
7287 | CALL $61A1 | |||||||||
728A | AND $E0 | |||||||||
728C | LD (HL),A | |||||||||
728D | LD L,$69 | Replace the address of this routine in bytes 0x69 and 0x6A of the character's buffer with that of the entry point at 7291 (below) | ||||||||
728F | LD (HL),$91 | |||||||||
This entry point is used on subsequent calls.
|
||||||||||
7291 | CALL $7142 | Write a single letter on the blackboard | ||||||||
7294 | JR NZ,$72A7 | Jump unless the character has finished writing | ||||||||
7296 | CALL $6214 | Update the SRB for the character's current animatory state | ||||||||
7299 | AND $F8 | A=base animatory state of the teacher writing on the board | ||||||||
729B | BIT 6,A | Is it actually a teacher writing on the board? | ||||||||
729D | JR NZ,$72A1 | Jump if so | ||||||||
729F | AND $F0 | A=base animatory state of BOY WANDER | ||||||||
72A1 | CALL $61B0 | Update the character's animatory state and update the SRB | ||||||||
72A4 | JP $62A4 | Terminate this interruptible subcommand | ||||||||
The character hasn't finished writing on the board yet.
|
||||||||||
72A7 | CALL $6214 | Update the SRB for the character's current animatory state | ||||||||
72AA | BIT 6,A | Set the zero flag if BOY WANDER is writing on the board | ||||||||
72AC | LD B,A | B=character's current animatory state | ||||||||
72AD | JR NZ,$72BF | Jump if a teacher is writing on the board | ||||||||
72AF | AND $7F | Drop the direction bit (bit 7) for now | ||||||||
72B1 | CP $3C | 0x3C=BOY WANDER writing (phase 1) | ||||||||
72B3 | LD A,$7A | A/2=0x3D=BOY WANDER writing (phase 2) | ||||||||
72B5 | JR Z,$72B9 | Jump if BOY WANDER is in writing phase 1 | ||||||||
72B7 | LD A,$78 | A/2=0x3C=BOY WANDER writing (phase 1) | ||||||||
72B9 | RL B | Slide the direction bit into bit 7 of A, which will then hold BOY WANDER's next animatory state | ||||||||
72BB | RRA | |||||||||
72BC | JP $61B0 | Update BOY WANDER's animatory state and update the SRB | ||||||||
A teacher is writing on the board. Toggle the status of his arm (up/down).
|
||||||||||
72BF | AND $F8 | A=base animatory state of the teacher | ||||||||
72C1 | CP B | Is the teacher's arm raised? | ||||||||
72C2 | JR NZ,$72C6 | Jump if not | ||||||||
72C4 | ADD A,$05 | A=animatory state of the teacher with his arm raised | ||||||||
72C6 | JP $61B0 | Update the teacher's animatory state and update the SRB |
Prev: 725E | Up: Map |