Routines |
Prev: 33945 | Up: Map | Next: 34122 |
|
||||||||||||||||||||
33952 | CALL 54051 | Store all registers on the stack | ||||||||||||||||||
33955 | CALL 35723 | Play downward scale sound | ||||||||||||||||||
33958 | CALL 54079 | Restore all registers from the stack | ||||||||||||||||||
33961 | LD A,(IX+0) | Load first object in character's inventory into A | ||||||||||||||||||
33964 | OR A | If nothing in first slot... | ||||||||||||||||||
33965 | JP Z,34087 | ...jump ahead to 34087 (unused code block - see trivia) | ||||||||||||||||||
33968 | LD A,105 | Modify instruction at 34017 with 105, denoting window as a menu rather than information window... | ||||||||||||||||||
33970 | LD (34018),A | ... | ||||||||||||||||||
33973 | PUSH BC | Store BC (B = number of inventory slots) | ||||||||||||||||||
33974 | PUSH HL | Store HL | ||||||||||||||||||
33975 | PUSH IX | Store IX | ||||||||||||||||||
33977 | CALL 54322 | Print command summary text at DE (e.g. "DROP THE ") in command summary window | ||||||||||||||||||
33980 | POP IX | Restore IX | ||||||||||||||||||
33982 | POP HL | Restore HL | ||||||||||||||||||
33983 | POP BC | Restore BC | ||||||||||||||||||
This entry point is used by the routine at 33945.
|
||||||||||||||||||||
33984 | LD C,0 | Load C (object counter) with zero | ||||||||||||||||||
33986 | PUSH BC | Store BC (B = number of inventory slots) | ||||||||||||||||||
33987 | PUSH IX | Store IX (points to start of inventory) | ||||||||||||||||||
33989 | LD A,(IX+0) | Load object from character's inventory (slot number C) into A | ||||||||||||||||||
33992 | OR A | If nothing in this slot... | ||||||||||||||||||
33993 | JR Z,34000 | ...then jump ahead to 34000 | ||||||||||||||||||
33995 | INC C | Increase count of objects in inventory | ||||||||||||||||||
33996 | INC IX | Advance IX to next slot | ||||||||||||||||||
33998 | DJNZ 33989 | Loop back to 33989 for next slot | ||||||||||||||||||
34000 | POP IX | Restore IX (points to start of inventory) | ||||||||||||||||||
34002 | LD A,C | Copy number of objects into A | ||||||||||||||||||
34003 | OR A | If number of objects is zero... | ||||||||||||||||||
34004 | JP Z,34096 | ...then jump ahead to 34096 | ||||||||||||||||||
34007 | LD A,(37123) | Load A with y-coordinate of top edge of window 4 | ||||||||||||||||||
34010 | ADD A,C | Add number of objects to this y-coordinate | ||||||||||||||||||
34011 | ADD A,3 | Add an additional 3 to this total (menu window padding) | ||||||||||||||||||
34013 | LD (37124),A | Set y-coordinate of bottom edge of window 4 to accommodate list of C objects | ||||||||||||||||||
34016 | PUSH HL | Store HL (e.g. pointer to "DROP WHICH OBJECT?" text) | ||||||||||||||||||
34017 | LD A,0 | Load A with menu / static window value | ||||||||||||||||||
34019 | CP 105 | If this is not 105 (i.e. window is not a menu, but a simple information window)... | ||||||||||||||||||
34021 | JR NZ,34030 | ...then skip ahead to 34030 | ||||||||||||||||||
34023 | LD A,4 | Draw window 4 as a menu window... | ||||||||||||||||||
34025 | CALL 34982 | ... | ||||||||||||||||||
34028 | JR 34035 | ...and skip over "draw an information window" section | ||||||||||||||||||
34030 | LD A,4 | Draw window 4 as an information window... | ||||||||||||||||||
34032 | CALL 34990 | ... | ||||||||||||||||||
34035 | POP HL | Restore HL (pointer to full command text)... | ||||||||||||||||||
34036 | PUSH IX | Store IX (points to start of inventory) | ||||||||||||||||||
34038 | CALL 34762 | Print text to screen | ||||||||||||||||||
34041 | POP IX | Restore IX (points to start of inventory) | ||||||||||||||||||
34043 | POP BC | Restore BC (B = number of remaining inventory slots) | ||||||||||||||||||
34044 | PUSH BC | Store BC (B = number of remaining inventory slots) | ||||||||||||||||||
34045 | LD A,(IX+0) | Load index of object in current inventory into A | ||||||||||||||||||
34048 | OR A | If index is zero (i.e. inventory slot is empty)... | ||||||||||||||||||
34049 | JP Z,34077 | ...then skip ahead to 34077 | ||||||||||||||||||
34052 | LD B,A | Copy index into B | ||||||||||||||||||
34053 | PUSH IX | Store IX (pointer to start of inventory) | ||||||||||||||||||
34055 | LD HL,38351 | Point HL to text printing instruction to move cursor to start of next character row within window, then right by two characters | ||||||||||||||||||
34058 | PUSH BC | Store BC (B = index of an object) | ||||||||||||||||||
34059 | CALL 34762 | Print text to screen (i.e. move text printing cursor right by two characters) | ||||||||||||||||||
34062 | POP BC | Restore BC (B = index of an object) | ||||||||||||||||||
34063 | CALL 54266 | Point HL at object B's name in table of object names... | ||||||||||||||||||
34066 | CALL 34762 | ...and print to screen | ||||||||||||||||||
34069 | POP IX | Restore IX (pointer to start of inventory) | ||||||||||||||||||
34071 | INC IX | Advance IX to next inventory slot | ||||||||||||||||||
34073 | POP BC | Restore BC (B = number of remaining inventory slots) | ||||||||||||||||||
34074 | DJNZ 34044 | Repeat loop for next object in inventory, decreasing B (number of remaining inventory slots) | ||||||||||||||||||
34076 | PUSH BC | Store BC (B = 0) | ||||||||||||||||||
34077 | POP BC | Restore BC (B = number of remaining inventory slots | ||||||||||||||||||
34078 | LD A,(34018) | If window is a menu, rather than information window... | ||||||||||||||||||
34081 | CP 105 | ... | ||||||||||||||||||
34083 | CALL Z,35296 | ...process keyboard / joystick input on a menu and load A with selected item index | ||||||||||||||||||
34086 | RET | ...and return | ||||||||||||||||||
This jump point can never be reached, as a separate routine already checks for an empty inventory before code execution reaches this routine - see trivia
|
||||||||||||||||||||
34087 | LD A,13 | Prepare to display window 13 | ||||||||||||||||||
34089 | POP HL | Remove return address from stack (as we are not returning) | ||||||||||||||||||
34090 | LD HL,44862 | Point HL at "YOU HAVE DESTROYED YOURSELF BY DROPPING THE..." text | ||||||||||||||||||
34093 | JP 55364 | Display window 13 with text at HL and return to game | ||||||||||||||||||
34096 | PUSH HL | Store HL (pointer to "YOU ARE NOW CARRYING" text) | ||||||||||||||||||
34097 | LD A,(37123) | Load A with y-coordinate of top edge of window 4 | ||||||||||||||||||
34100 | ADD A,4 | Add 4 to this y-coordinate | ||||||||||||||||||
34102 | LD (37124),A | Set y-coordinate of bottom edge of window 4 to accommodate three rows of text | ||||||||||||||||||
34105 | LD A,4 | Draw window 4... | ||||||||||||||||||
34107 | CALL 34990 | ... | ||||||||||||||||||
34110 | POP HL | Restore HL (pointer to "YOU ARE NOW CARRYING" text) | ||||||||||||||||||
34111 | CALL 34762 | ...and print to screen | ||||||||||||||||||
34114 | LD HL,42373 | Point HL at "NOTHING AT ALL" text... | ||||||||||||||||||
34117 | CALL 34762 | ...and print to screen | ||||||||||||||||||
34120 | POP BC | Restore BC (number of inventory slots, PUSHed by instruction at 33986) | ||||||||||||||||||
34121 | RET | Return |
Prev: 33945 | Up: Map | Next: 34122 |