![]() |
Routines |
Prev: A037 | Up: Map | Next: A0D8 |
Used by the routines at Alias_GameEntryPoint and A0E7.
|
||||
GameEntryPoint | A040 | XOR A | Write 00 to | |
A041 | LD ($D6B8),A | |||
A044 | LD ($A01B),A | |||
A047 | DI | Disable interrupts. | ||
A048 | CALL DrawDecorativeLine | Call DrawDecorativeLine. | ||
A04B | LD SP,$5D80 | SP=Table_WordIndex. | ||
A04E | CALL WaitForKeypress_Loop | Call WaitForKeypress_Loop. | ||
A051 | CP $6E | Jump to NoMeansNo if the keypress is ASCII code 6E ("n"). | ||
A053 | JR Z,NoMeansNo | |||
A055 | CP $4E | Compare the keypress with ASCII code 4E ("N"). | ||
A057 | LD A,$01 | A=01. | ||
A059 | JR NZ,GameEntryPoint_0 | Jump to GameEntryPoint_0 if the keypress was not ASCII code 4E ("N"). | ||
The player pressed either "N" or "n".
|
||||
NoMeansNo | A05B | XOR A | A=00. | |
GameEntryPoint_0 | A05C | LD ($A011),A | Write A to *A011. | |
A05F | LD A,R | Write the contents of the Memory Refresh Register to *A037. | ||
A061 | LD ($A037),A | |||
This entry point is used by the routine at A0E7.
|
||||
Game_Initialisation | A064 | XOR A | Write 00 to *A0DA. | |
A065 | LD ($A0DA),A | |||
Game_Loop | A068 | LD A,($A0DA) | Jump to A0E7 if *A0DA is not zero. | |
A06B | AND A | |||
A06C | JR NZ,$A0E7 | |||
A06E | CALL Handler_GameClock | Call Handler_GameClock. | ||
A071 | CALL Handler_DateBar | Call Handler_DateBar. | ||
Handler for Sherlock (as he's the first character).
|
||||
A074 | LD IY,$9860 | IY=Table_Timetable. | ||
A078 | LD A,(IY+$03) | Fetch Sherlocks location. | ||
A07B | CP $32 | Jump to Handler_ProcessCharacters if Sherlock isn't in room 32: Main Street. | ||
A07D | JR NZ,Handler_ProcessCharacters | |||
A07F | CALL GetKeypress | Call GetKeypress. | ||
A082 | BIT 7,A | Jump to Handler_ProcessCharacters if the keypress was not valid or if the keypress was not 8D ("ENTER") - which is ASCII code 0D with bit 7 set for being a valid keypress. | ||
A084 | JR Z,Handler_ProcessCharacters | |||
A086 | CP $8D | |||
A088 | JR NZ,Handler_ProcessCharacters | |||
A08A | LD HL,($9FDD) | Write *CurrentTime_Ticker to *IY+06/ *IY+07. | ||
A08D | LD (IY+$06),L | |||
A090 | LD (IY+$07),H | |||
Cycle through the character timetable and run through each characters script according to their schedule and current game time.
|
||||
Handler_ProcessCharacters | A093 | LD IY,$9860 | Load Table_Timetable into IY. | |
CharacterProcessing_Loop | A097 | LD A,(IY+$00) | Jump to Game_Loop if the character ID is the termination character (FF). | |
A09A | INC A | |||
A09B | JR Z,Game_Loop | |||
This is a valid character so begin processing them.
|
||||
A09D | LD HL,($9FDD) | Load *CurrentTime_Ticker into HL. | ||
A0A0 | CALL CheckCharacterSchedule | Call CheckCharacterSchedule. | ||
A0A3 | JR C,Character_Next | Jump to Character_Next if this character is not scheduled to have actions yet. | ||
The currently processed character has an active schedule so process it.
|
||||
A0A5 | LD A,(IY+$00) | Fetch the character ID and store it in A. | ||
A0A8 | PUSH IY | Stash the timetable pointer and character ID on the stack. | ||
A0AA | PUSH AF | |||
A0AB | CALL $CC37 | Call CC37. | ||
Repeatedly execute the characters script until it completes or encounters a wait condition.
|
||||
CharacterScript_Loop | A0AE | POP AF | Restore the character ID from the stack. | |
A0AF | PUSH AF | But keep a copy of the character ID on the stack. | ||
A0B0 | CALL ScriptInterpreter | Call ScriptInterpreter. | ||
Keep looping until the script for this character is finished.
|
||||
A0B3 | LD HL,($A01F) | Jump back to CharacterScript_Loop until *CharacterScriptCycles is zero. | ||
A0B6 | LD A,L | |||
A0B7 | OR H | |||
A0B8 | JR Z,CharacterScript_Loop | |||
A0BA | POP AF | Restore the character ID and timetable pointer from the stack. | ||
A0BB | POP IY | |||
Set up the next schedule time for this character.
|
||||
A0BD | LD E,(IY+$06) | Add the characters schedule time to the current time... | ||
A0C0 | LD D,(IY+$07) | |||
A0C3 | ADD HL,DE | |||
A0C4 | LD (IY+$06),L | And write it back to the characters schedule. | ||
A0C7 | LD (IY+$07),H | |||
A0CA | PUSH IY | Stash the timetable pointer on the stack briefly. | ||
A0CC | CALL ExecuteCharacterAction | Call ExecuteCharacterAction. | ||
A0CF | POP IY | Restore the timetable pointer from the stack. | ||
Move to the next character in the timetable.
|
||||
Character_Next | A0D1 | LD DE,$0008 | IY+=0008. | |
A0D4 | ADD IY,DE | |||
A0D6 | JR CharacterProcessing_Loop | Jump to CharacterProcessing_Loop. |
Prev: A037 | Up: Map | Next: A0D8 |