Prev: 29896 Up: Map Next: 29952
29912: Deal with Sam
Called from the main loop at 61483 when one of Sam's status flags at 32764 is set, indicating that he is in the middle of an action. Returns with the zero flag set if Sam has finished the action by the end of the routine.
29912 LD HL,58888 Decrement Sam's main action timer in byte 8 of his buffer
29915 DEC (HL)
29916 RET NZ Return unless it's time to deal with Sam
29917 LD HL,29939 We will continue at 29939 (below) after calling the routine to handle Sam
29920 PUSH HL
29921 LD L,198 HL=29894
29923 LD A,(32764) Pick up Sam's status flags from 32764
29926 INC L Point HL at one of the entries in the table of Sam-handling routine addresses at 29896
29927 INC L
29928 RLCA
29929 JR NC,29926
29931 LD C,(HL) Collect the routine address into BC
29932 INC L
29933 LD B,(HL)
29934 PUSH BC Push it onto the stack, ready for an indirect jump
29935 LD HL,58880 Point HL at byte 0 of Sam's buffer
29938 RET Make an indirect jump to the Sam-handling routine
We come here after the Sam-handling routine has returned.
29939 LD HL,32764 32764 holds Sam's status flags
29942 LD A,(HL) Pick them up in A
29943 AND A Has Sam finished the action yet?
29944 RET Z Return with the zero flag set if so
29945 LD A,(58888) Collect Sam's main action timer from byte 8 of his buffer
29948 AND A Did the Sam-handling routine set the action timer to a non-zero value (meaning that the action is still in progress)?
29949 RET NZ Return with the zero flag reset if so
29950 LD (HL),A Otherwise clear all of Sam's status flags at 32764
29951 RET Return with the zero flag set
Prev: 29896 Up: Map Next: 29952