Prev: 50047 Up: Map Next: 50128
50094: Parser: Count Item References
Used by the routines at Parser_ValidateDirectObject, 50320, 50359 and Action_Shout.
Count how many tokens in the user input refer to game items.
Output
A The number of references to items in the user input tokens
E As A
F The Z flag is set when there are no items present in the input
Parser_CountItems 50094 LD HL,48486 Set a pointer to UserInput_Token_1 in HL.
50097 LD B,10 Set a token count in B of 10 which is the total length of the user input tokens.
50099 LD E,0 Initialise the item counter held in E to 0.
Parser_CountItems_Loop 50101 LD A,(HL) Fetch a user input token.
50102 CP 255 Jump to Parser_CountItems_Process if the terminator character (255) has been reached.
50104 JR Z,Parser_CountItems_Process
50106 PUSH HL Stash the token pointer and token counter on the stack.
50107 PUSH BC
50108 LD HL,(48414) HL=*Pointer_ObjectList.
50111 LD BC,(48426) Fetch the count of the number of items in the table from *Count_Objects.
50115 CPIR Search to see if the item room ID is in the table.
50117 POP BC Restore the token counter and token pointer from the stack.
50118 POP HL
50119 JR NZ,Parser_CountItems_Skip Jump to Parser_CountItems_Skip if this token doesn't refer to a game item.
This token does point to a game item, so increase the item counter.
50121 INC E Increment item counter by one.
Parser_CountItems_Skip 50122 INC HL Move to the next token.
50123 DJNZ Parser_CountItems_Loop Decrease the token counter by one and loop back to Parser_CountItems_Loop until all the tokens have been evaluated.
Parser_CountItems_Process 50125 XOR A Transfer the item count into A and set flags accordingly.
50126 OR E
50127 RET Return.
Prev: 50047 Up: Map Next: 50128