Routines |
Prev: 59258 | Up: Map | Next: 59369 |
Used by the routine at GameLoop.
|
||||||||||||||||||||
Handler_ChangeCharacters | 59291 | LD A,247 | Read from the keyboard;
|
|||||||||||||||||
59293 | IN A,(254) | |||||||||||||||||||
59295 | OR %11100000 | Set bits 5-7. | ||||||||||||||||||
59297 | XOR %11111111 | Return if no keys have been pressed. | ||||||||||||||||||
59299 | RET Z | |||||||||||||||||||
Fetch room ID for the current character.
|
||||||||||||||||||||
59300 | LD B,(IY+15) | B=*IY+15. | ||||||||||||||||||
59303 | PUSH IY | Stash the character pointer in IY on the stack. | ||||||||||||||||||
Loop through the port bits and correlate them with the base character reference in IY.
This associates each character with a keypress.
|
||||||||||||||||||||
59305 | LD IY,48231 | IY=FrameId_Wally. | ||||||||||||||||||
ChangeCharacters_WhichCharacter_Loop | 59309 | RRCA | Rotate A right once. | |||||||||||||||||
59310 | JR C,ChangeCharacters_CheckRoom | If this key has been pressed, jump to ChangeCharacters_CheckRoom. | ||||||||||||||||||
The character data is "interlaced" hence we can increment to point to the next character in the sequence.
|
||||||||||||||||||||
59312 | INC IY | Increment IY by one. | ||||||||||||||||||
59314 | JR ChangeCharacters_WhichCharacter_Loop | Jump to ChangeCharacters_WhichCharacter_Loop. | ||||||||||||||||||
Check if the current character is in the same room as the selected character.
|
||||||||||||||||||||
ChangeCharacters_CheckRoom | 59316 | LD A,(IY+15) | A=*IY+15. | |||||||||||||||||
59319 | CP B | If this is the same room, jump to ChangeCharacters_Process. | ||||||||||||||||||
59320 | JR Z,ChangeCharacters_Process | |||||||||||||||||||
If the character is elsewhere, print where they are to the screen.
|
||||||||||||||||||||
59322 | CALL Handler_DisplayCharacterLocation | Call Handler_DisplayCharacterLocation. | ||||||||||||||||||
Restore the current character pointer to IY and return.
|
||||||||||||||||||||
ChangeCharacters_Return | 59325 | POP IY | Restore the character pointer in IY from the stack. | |||||||||||||||||
59327 | RET | Return. | ||||||||||||||||||
The chosen character is in the same room as the current character, so begin to action the request.
|
||||||||||||||||||||
ChangeCharacters_Process | 59328 | CALL Character_Active | Call Character_Active. | |||||||||||||||||
59331 | JR Z,ChangeCharacters_Return | If the selected character is the current character, jump to ChangeCharacters_Return. | ||||||||||||||||||
59333 | LD (45213),IY | Write IY to *CurrentCharacter. | ||||||||||||||||||
59337 | POP IY | Restore IY from the stack. | ||||||||||||||||||
59339 | LD A,B | A=B. | ||||||||||||||||||
59340 | CALL 44137 | Call 44137. | ||||||||||||||||||
59343 | LD A,(HL) | A=*HL. | ||||||||||||||||||
59344 | LD (IY+105),A | Write A to IY+105. | ||||||||||||||||||
59347 | INC HL | Increment HL by one. | ||||||||||||||||||
59348 | LD A,(HL) | A=*HL. | ||||||||||||||||||
59349 | LD (IY+100),A | Write A to IY+100. | ||||||||||||||||||
59352 | INC HL | Increment HL by one. | ||||||||||||||||||
59353 | LD A,(HL) | A=*HL. | ||||||||||||||||||
59354 | LD (IY+115),A | Write A to IY+115. | ||||||||||||||||||
59357 | LD (IY+110),5 | Write 5 to IY+110. | ||||||||||||||||||
59361 | LD IY,(45213) | IY=*CurrentCharacter. | ||||||||||||||||||
Update the banner to show the updated character name.
|
||||||||||||||||||||
59365 | CALL PrintBanner | Call PrintBanner. | ||||||||||||||||||
59368 | RET | Return. |
Prev: 59258 | Up: Map | Next: 59369 |