Prev: 8D16 Up: Map Next: 8D85
8D2A: Game Loop
Used by the routines at HandlerMatchVerb and GameStart.
One turn: turn-based threats, scenic checks, a command, then the matching verb.
Run any turn-based threats.
GameLoop 8D2A CALL HandlerTurnBasedEvents Call HandlerTurnBasedEvents.
Walk the scenic-event rooms for the plasma-shell warning.
8D2D LD HL,$6224 HL=Table_ScenicEventLocations.
8D30 LD BC,$0008 BC=0008.
Test whether the player is standing in this scenic room.
GameLoop_Loop1 8D33 LD A,($6223) Fetch the current room.
8D36 CPIR Search the scenic-event rooms for it.
8D38 JR NZ,GameLoop_Step1 Jump to GameLoop_Step1 if the player is not in a scenic room.
8D3A PUSH HL Keep the scenic search while the warning is printed.
8D3B PUSH BC
Print " An alien soldier has appeared. He fires a plasma gun at you.".
8D3C LD HL,$7851 HL=Messaging_AnAlienSoldierHasAppearedHeFiresAPlasma.
8D3F CALL PrintStringAndANewline Call PrintStringAndANewline.
Give the plasma shell one chance in 14 of hitting.
8D42 LD A,$14 A=14.
8D44 CALL GenerateRandomNumber Call GenerateRandomNumber.
8D47 JR Z,HandlerPlasmaShell Jump to HandlerPlasmaShell if the shell hits.
Print "But he missed.".
8D49 LD HL,$788F HL=Messaging_ButHeMissed.
8D4C CALL PrintStringAndANewline Call PrintStringAndANewline.
8D4F POP BC Restore the scenic-room search.
8D50 POP HL
8D51 XOR A See whether another scenic room is still to be checked.
8D52 OR C
8D53 JR NZ,GameLoop_Loop1 Jump to GameLoop_Loop1 to check the next scenic room.
Read a command and turn it into vocabulary tokens.
GameLoop_Step1 8D55 CALL Handler_UserInput Call Handler_UserInput.
Continue with Action: Type when the first word is "Y".
8D58 LD A,($6291) Fetch the first word of the command.
8D5B CP $59 Jump to GameLoop_Step3 when Y (59) was not pressed.
8D5D JR NZ,GameLoop_Step3
GameLoop_Step2 8D5F LD HL,$997F Continue at HandlerMatchVerb_Step2 to run Action: Type.
8D62 JP HandlerMatchVerb_Step2
Ensure every named object is present here.
GameLoop_Step3 8D65 XOR A Start the synonym scan with a clear result.
8D66 LD HL,$6291 Point at the command's word tokens.
8D69 LD B,$0A A command has at most 0A word tokens.
GameLoop_Loop2 8D6B LD A,(HL) Read the next word token.
8D6C CP $FF Jump to HandlerMatchVerb when the command has no more words (FF).
8D6E JR Z,HandlerMatchVerb
8D70 EXX Look that token up in the noun list without losing the token pointer.
8D71 LD HL,$8868
8D74 LD BC,($62C8)
8D78 CPIR
8D7A JR NZ,GameLoop_Step4 Jump to GameLoop_Step4 if this token is not a noun.
8D7C CALL Parser_ResolvePhrase Call Parser_ResolvePhrase.
8D7F JR C,GameLoop Jump back to GameLoop when the carry flag is set.
GameLoop_Step4 8D81 EXX Bring the token pointer back.
8D82 INC HL Move on to the next word token.
8D83 DJNZ GameLoop_Loop2 Jump to GameLoop_Loop2 for the remaining words of the command.
Prev: 8D16 Up: Map Next: 8D85