Resource centre for ZX Spectrum games
      using Manic Miner and Jet Set Willy game engines

 

Archive of the

Manic Miner & Jet Set Willy Yahoo! Group

messages

 

 

 

Message: 7058

Author: rushforthian

Date: 15/02/2017

Subject: Re: JSW Lord of the Rings Mount Doom Frodo corruption

 

I wrote:

To be precise, the corruption manifests itself as a single infilled pixel, to the right of Willy's rightmost foot -  > corresponding to Bit 0 of the next byte in the display file along from Willy's bottom-right graphic byte.  This  > shifts to Bit 1 when Willy is on the toilet-run (or should that be Frodo on the fire-run?), so it is the value of the > Game Mode that is interpreted as the pixel to be infilled!
Sorry, the above is slightly inaccurate.  The pixel representing the current Game Mode (which arises from the A register being defined by the command at #95A9, just prior to the CALL to #9668 to draw the Toilet/Fire) is OR'd with the bottom-right graphic byte of Willy's sprite (HL having been left pointing at that location in the earlier iteration of the full routine starting at #9637, which drew Willy to the secondary Screen Buffer earlier on during the current pass through the Main Loop).
That explains why the first (top-left) graphic byte of the Toilet/Fire is absent.
Then the second byte of the Toilet/Fire is also absent because each pass through the loop from #9668-#967E draws two adjacent graphic bytes of Willy/the Toilet (see #9674-#9677).
ASIDE: In fact, if you replicate the LotR bug in the original JSW code (by pointing the CALL at #95BB nine bytes forward to #9671), then an additional glitch follows Willy round, to the right of his bottom-right graphic byte.  It is a line of four contiguous filled-in pixels - the top of the Toilet's cistern! - OR'd with whatever is in the host Screen Buffer address.  This can be observed more easily if you set the Air's INK colour in The Bathroom to something other than Black, but you can also see it by walking Willy up the Ramp (the glitch appears just underneath the ramp as Willy walks across a cell-boundary).
Then after the first two graphic bytes of the Toilet/Fire have been drawn to erroneous addresses, the rest of the Toilet/Fire is drawn correctly (because subsequent iterations of the loop from #9668-#967E are implemented without bypassing #9668-#9670).

 

 

arrowleft
arrowright