Prev: 42491 Up: Map Next: 42616
42494: Display and handle main in-game menu (when fire is pressed)
Used by the routine at 38205.
42494 CALL 47930 Play downward scale sound
42497 CALL 46183 Set Magic Knight's available action flags
42500 LD BC,2048 Set B = 8 (eight action flags) and C = 0 (count of set flags)
42503 LD A,(23698) Load A with available in-game menu command flags, part 1
42506 RLCA Pop a bit into carry flag
42507 JR NC,42510 If Magic Knight action flag is not set then skip ahead to 42510 to repeat loop for next flag...
42509 INC C ...else increase count of set flags
42510 DJNZ 42506 Loop back for next bit until all eight are done
42512 LD B,8 Set B = 8 (another eight action flags)
42514 LD A,(23699) Load A with available in-game menu command flags, part 2
42517 RLCA Pop a bit into carry flag
42518 JR NC,42521 If Magic Knight action flag is not set then skip ahead to 42521 to repeat loop for next flag...
42520 INC C ...else increase count of set flags
42521 DJNZ 42517 Loop back for next bit until all eight are done
42523 LD A,8 Load A with 8 (as minimal command window has bottom y-coordinate of 8)
42525 ADD A,C Increase A by number of extra commands available
42526 LD C,A Load value back into C
42527 LD A,(49036) Load A with y-coordinate (characters) of top of menu window
42530 ADD A,C Update y-coordinate of bottom of window according to number of extra commands...
42531 LD (49037),A ...
42534 LD A,0 Display main in-game menu window (window number zero)...
42536 CALL 47185 ...
42539 LD HL,51434 Print "COMMANDS AVAILABLE:-" followed by first five commands (pick up, drop, etc.) that are always available...
42542 CALL 46902 ...
42545 LD HL,51486 Point HL at zero immediately preceding list of conditional entry (main in-game menu) texts
42548 LD A,(23698) Load A with available in-game menu command flags, part 1
42551 CALL 42616 Print currently available additional in-game menu command options, part 1
42554 LD A,(23699) Load A with available in-game menu command flags, part 2
42557 CALL 42616 Print currently available additional in-game menu command options, part 2
42560 CALL 47502 Process keyboard / joystick input on a menu and load A with selected item index
42563 CP 5 If index of selected item is less than 5 (i.e. is a permanent, yellow entry)...
42565 JR C,42587 ...then skip ahead to 42587
42567 SUB 4 Subtract 4 from index to get index within currently available conditional entries...
42569 LD B,A ...and load this value into B
42570 LD C,0 Load C with zero
42572 LD HL,(23698) Load HL with available in-game menu command flags
At this point, B is initialised to the index of the selected menu option among the currently available conditional entries. The following loop loads C with the index of the selected action's action flag (bit) in the WORD value at 23698.
42575 RR H Perform 16-bit rotation (right) through HL and into carry flag...
42577 RR L ...so that carry flag contains "current" action flag
42579 INC C Increase C (index of current action flag)
42580 JR NC,42575 If current action flag is not set then loop back to 42575...
42582 DJNZ 42575 ...otherwise decrease B then loop back to 42575
42584 LD A,C Load index of appropriate action flag into A
42585 ADD A,4 Add 4, to restore original index value (i.e. reverse of instruction at 42567)
At this point, A holds either the index of the appropriate action flag plus four, or the index of the originally selected menu item if less than 5. In either case, A contains the index of the command to initiate.
Code between 42587 and 42595 is not necessary; see trivia.
42587 LD HL,48535 Point HL at list of command indices
42590 LD B,A Load index of selected command into B, setting C to zero...
42591 LD C,0 ...
42593 LD A,(HL) If current entry in list of command indices is the same as the index of the selected command...
42594 CP B ...
42595 JR Z,42601 ...then skip ahead to 42601
42597 INC C Increase C (index of command index)
42598 INC HL Advance HL to next command index in list
42599 JR 42593 Loop back to 42593
42601 PUSH BC Store BC (B = selected command index, C = index of selected command index)
42602 CALL 47897 Play upward scale sound
42605 POP BC Restore BC (B = selected command index, C = index of selected command index)
42606 LD A,C Load index (of selected command index) into A...
42607 LD (23716),A ...and set as Current Command
42610 LD HL,48553 Point HL at start of table of command routine addresses
42613 JP 64623 Advance HL by A words, load HL with word at location HL as address and jump to it
Prev: 42491 Up: Map Next: 42616