"THERE IS NOTHING IN THIS ROOM" message never shown
In the routine at 29330 that processes Magic Knight's "PICK UP OBJECT" command, the section of code starting at 29339 is intended to count the
number of objects present in Magic Knight's current room. This count of objects is accumulated in the C register, and after the total (copied into
A) is compared with zero at 29358, a conditional jump occurs to 55192 to display the "THERE IS NOTHING IN THIS ROOM" message window should the
total be zero. Unfortunately this does not work as intended because the C register is not initialised to zero at the beginning of the count.
The instruction at 29342 (LD BC,3200) actually initialises C to 128, so the count can never equal zero. Additionally, this same
instruction should initialise B (the number of objects to check to determine whether they are in Magic Knight's current room) to 37 as there are 37
objects in the game; instead B is initialised to 12. So as it stands, this routine only counts the number of objects among the first 12 that are in
Magic Knight's current room, and adds this total to 128. Therefore it is clearly impossible for the count to hold any value outside the range 128 - 140
(i.e. it is never zero), so the "THERE IS NOTHING IN THIS ROOM" message is never shown. Instead, the "THERE IS NOTHING NEAR ENOUGH" message is shown:
The offending instruction should actually be LD BC,9472.
To fix, and ensure that B and C are initialised to 37 and 0 respectively:
This bug is also present in Spellbound
Too many objects are checked
Another bug, related to the one above, involves the routine at 29330. The instruction at 29374 loads B with 50, in preparation for a loop
iterating over all objects' positions, however there are only 37 objects in the game. As a result of this bug, the code that checks the positions of
objects runs over the end of the objects' current positions table at 25286 and into the current planetary data table at 25397. Due to the nature of
the data stored from 25397 onwards, it seems that a conflict (i.e. a false match with an "object") is unlikely, so in most circumstances this bug will
not manifest any symptoms.
Examine USS Pisces
The instruction at 30199 is intended to check whether or not Magic Knight is aboard the USS Pisces when attempting to examine the starship. If Magic
Knight is not aboard the ship, a message window should be displayed ("YOU CANNOT EXAMINE THE USS PISCES IF YOU ARE NOT ABOARD THE MAIN SECTION OF THE
SHIP"). In order to check whether or not Magic Knight is aboard the USS Pisces, his current room's index is compared against the number 12 which is the
index of the McTablet Food room on Starbase 1. However, if Magic Knight is in the room to the left of this (The Transporter Room, Starbase 1, index 11)
then the check is passed even though he is not aboard the starship. The instruction here should instead check Magic Knight's current room index against
11, i.e. it should be CP 11, not CP 12.
The routine at 31312 processes the command to cast a lightning bolt. When Magic Knight casts a lightning bolt at the Control Column, the instruction
at 31374 (OR 3) is intended to set the tyme-machine-charged flag, however as well as doing this it also sets the barriers-removed flag. The
tyme-machine-charged flag is stored in bit 1 of the byte at 23403, so the instruction should be OR 2.
When Magic Knight has his accident with the glue, photograph and blank ID card, an information window is displayed explaining that happened. However
this window is not really an information window - it's a menu window! The instruction at 34463 calls the routine for drawing menu windows and as a
result the hand cursor is also drawn. This isn't really noticeable though, since immediately after drawing the window and hand cursor, the text is
printed, overwriting the hand cursor graphic.
The instruction at 36301 is LD C,A, however it appears the correct instruction should be LD A,C as we are checking (in A) that the
x-component of a star's direction is non-zero when its y-component has already been checked as zero. As it is, the value in A is not modified from
instruction at 36294 where it is set to the y-component. In the existing code, the value of A is set at 36294, then at 36299 a conditional
jump occurs if the value in A is not 70. If the jump does not occur, then the (same) value in A is loaded into C, then another conditional
jump occurs only if the (unchanged) value in A is equal to 128 (which is can't be, because this instruction is only reached if A is 70!)
To fix, change the instruction at 36301 from LD C,A to LD A,C:
This bug is also present in Spellbound
Spelling and punctuation
There are a number of spelling and punctuation issues:
the text entry at 40562 has an incorrect spelling of "Sharon"
the text entry for "GOLDEN SUNDIAL OF ALPHA" (43660) in the common words table includes a full stop. This common word entry is used in a number of places where the full stop appears in the middle of a sentence (e.g. 40421, 41487, 44854 etc.)
the text entry at 45236 contains "TEMPORALY" instead of "TEMPORALLY"
the text entry at 45989 is missing a space between the words "NOW" and "BUT"
the text entry at 47114 contains "MISSUSE" instead of "MISUSE"
the text entry at 47914 refers to Derby IV's running speed in units of MHz; this is inconsistent with the text entry at 47671 which uses GHz
the text entry at 48520 contains an apostrophe where it shouldn't
the text entry at 49386 contains a full stop instead of a comma
Incorrect window size
There are a number of issues with window sizes:
the height preceding the read text of the Instant Film (41056) is one unit too small, so the text overwrites the bottom border of the window when displayed
the height preceding the (game over) text for Magic Knight's lightning bolt alerting security (46894) is one unit too big, so the window has a blank line below the text
Inconsistent floor colour
Room number 04 ("CARGO HOLD", USS PISCES) has its floor drawn with attribute 86 (yellow INK, red PAPER, BRIGHT) whereas all other rooms on the USS
PISCES have their floors drawn with attribute 94 (yellow INK, magenta PAPER, BRIGHT).