Dr. Andrew Broad
Sinclair ZX Spectrum
Manic Miner/Jet Set Willy
Bugs in Specific JSW Games

14th May 2006: Jet-Set Willy Ivy added.


This page identifies, and gives proposed solutions to, bugs that make specific JSW games impossible to complete (plus any bugs caused by the Bad Pause-Bug Fix). I don't believe in editing other people's games for them, so on this page I suggest a solution to each problem, and give pokes to implement each solution. I also attempt to contact the authors in the hope that they will correct these bugs - or tell me I'm mistaken, as the case may occasionally be! ;-)

Completing a JSW game is defined as follows:

  1. A JSW game is item-completable iff it is possible to collect all the items without cheating.
  2. A JSW game is Maria-completable iff it is item-completable and possible to get past Maria after she disappears.
  3. A JSW game is bed-completable iff it is Maria-completable and you can reach the bed-column, triggering Willy to run towards the toilet (or causing another ending designed by the author, as in Spaceman Willy).
  4. A JSW game is toilet-completable iff it is bed-completable and Willy can reach the toilet.
For the purposes of this page, games are only required to be Maria-completable - I do not necessarily consider fixes to make them bed-completable or toilet-completable (for example, Willy's New Hat is only Maria-completable, and it is clearly the author's intention to send the player to a special ending-room rather than make it bed-completable). Furthermore, this page is not concerned with fixing non-critical bugs or infinite-death scenarios.

Each poke is given in two alternative formats:

In the case of JSW128 and JSW64 games, it is necessary to select a bank of 128K memory before applying any poke in the 49152-65535 (#C000-FFFF) range, as these addresses refer to whichever RAM-bank is paged in at the time (normally Bank 0). Pokes in Banks 1-7 shall be given in hexadecimal format only (e.g. Bank 1: Hex DE2C: 04), for use with JSWED, because they cannot be applied directly using the denary methods listed above.

This page will be extended as I get around to playing through all the JSW games. So far, I have found bugs in the following games:

  1. The original Jet Set Willy
  2. Jet Set Willy: Spectrum Computing
  3. The Continuing Adventures
  4. The Deadly Mission
  5. Willy's Holiday
  6. Willy's New Hat
  7. Dr. Jet Set Willy
  8. Jet-Set Willy Ivy


The original Jet Set Willy

Software Projects actually published four official pokes to make Jet Set Willy possible to complete:

  1. There is an unreachable, invisible item in "First Landing" [28].

    POKE 42183,11 moves this item to "The Hall" [11]. (Hex A4C7: 0B)

  2. You cannot climb the right-hand side of "The Banyan Tree" [30] because there's an Earth-cell in the way.

    POKE 56876,4 turns it into a Water-cell. (Hex DE2C: 04)

  3. There is a faulty arrow in "The Attic" [41] which corrupts other rooms in the game (the Attic-Bug).

    POKE 59901,82 fixes the vertical position of this arrow. (Hex E9FD: 52)

  4. The rightmost Fire-cell in "Conservatory Roof" [43] prevents you from collecting the rightmost item.

    POKE 60231,0 turns that Fire-cell into an Air-cell. (Hex EB47: 00)

Click here for a version of Jet Set Willy with these four pokes applied (courtesy of Ed Duffy), plus the three pokes to bypass the colour-code protection:

POKE 34480,195
POKE 34481,202
POKE 34482,135 (Hex 86B0: C3 CA 87)


Jet Set Willy: Spectrum Computing

  1. The lower horizontal guardian in "Crusoe's Corner" [60] collides with a Water-cell, killing you.

    POKE 41847,20 sets its right-boundary to the left of that Water-cell. (Hex A377: 14)

  2. There is an unreachable, invisible item in "Follow The Arrow!" [28].

    POKE 42183,11 moves this item to "The Dungeon" [11]. (Hex A4C7: 0B)

  3. The item in "The Coal Cellar" [51] is unreachable.

    POKE 50921,51 sets the left-exit of "Who's This ?" [6] to 51. This solution also eliminates an infinite-death scenario. (Hex C6E9: 33)

  4. The item in "Remembered-At Last!!" [19] is unreachable.

    POKE 54081,86 puts a Water-cell at (8,4) so that you can jump up for it (stand on one leg). (Hex D341: 56)

  5. The Earth-cells in "The Garden" [46] behave as conveyors, so you get stuck at the right.

    POKE 61133,68 gives Conveyor a different colour-attribute (BRIGHT 1) from Earth. (Hex EECD: 44)

  6. The bottom-left item in "The Fruit Store" [49] is unreachable.

    POKE 61913,17 shortens the conveyor by one character, allowing you to jump into the Earth-cell at (14,25) and walk left. (Hex F1D9: 11)

With the above pokes applied, Jet Set Willy: Spectrum Computing is bed-completable. It can be made toilet-completable with the following two pokes to turn four Earth-cells at the bottom-right of "Down From The Lab" [34] into Water:

POKE 57967,5 (Hex E26F: 05)
POKE 57975,5 (Hex E277: 05)

The Continuing Adventures

Adam Britton released a Special Edition of The Continuing Adventures that is possible to complete, and has many other improvements. However, since TCA-SE removes "The Sky-Ladder" [42], and also because the original TCA has historical value, I consider TCA and TCA-SE to be parallel variants, rather than that TCA-SE absolutely supersedes TCA.

Only one of the changes from TCA to TCA-SE needs to be applied to TCA to make it completable: "The Miniature Sherwood Forest!" [17] has an unreachable item.

POKE 53557,1 puts a Water-cell at (6,23) so that you can jump up for it. (Hex D135: 01)


The Deadly Mission

When The Deadly Mission was transferred to emulator-format in 1995, the Bad Pause-Bug Fix was applied, which overwrites Room 63's guardian-instance list with code to correct the Pause-Bug in addresses 65520-65535 (#FFF0-FFFF). These data are interpreted as guardian-instances which kill you immediately on entry to Room 63 ("Mystery Room").

  1. The following pokes undo the Bad Pause-Bug Fix, releasing addresses 65520-65535 (#FFF0-FFFF):
    POKE 35591,33
    POKE 35592,0
    POKE 35593,154 (Hex 8B07: 21 00 9A)
    
  2. The following poke is the simplest way to remove the rogue guardian-instances from "Mystery Room" [63]:

    POKE 65520,255 terminates Room 63's guardian-instance list at the start. (Hex FFF0: FF)

It is most unlikely that the uncorrupted "Mystery Room" [63] had any guardians, as it has a non-blank pixel-pattern for Air.


Willy's Holiday

WARNING!! Editing JSW-WH.SNA in JSWED will corrupt "The Hotel Bathroom" [2], because JSWED sets the snapshot to run the game immediately, bypassing the BASIC loader that installs that room! Therefore you should first load JSW-WH.SNA in an emulator, and resave it when the usual title-screen appears - and make sure you save a 48K SNA file, because JSWED interprets 128K SNA files as JSW128 games!

When Willy's Holiday was transferred to emulator-format in 1995, the Bad Pause-Bug Fix was applied, which overwrites Room 63's guardian-instance list with code to correct the Pause-Bug in addresses 65520-65535 (#FFF0-FFFF). These data are interpreted as guardian-instances which kill you immediately on entry to Room 63 ("The Beach").

  1. The following pokes undo the Bad Pause-Bug Fix, releasing addresses 65520-65535 (#FFF0-FFFF):
    POKE 35591,33
    POKE 35592,0
    POKE 35593,154 (Hex 8B07: 21 00 9A)
    
  2. Infinite death is unavoidable when entering "On The Roof" [17] at the top-right.

    POKE 53551,1 puts a Water-cell at (5,31). (Hex D12F: 01)

  3. The following poke is the simplest way to remove the rogue guardian-instances from "The Beach" [63]:

    POKE 65520,255 terminates Room 63's guardian-instance list at the start. (Hex FFF0: FF)

Here's my best guess as to which guardians may have been in "The Beach" [63]:

  1. Firstly, I have a hunch that it should have the same guardians as "Pathwalk" [60] - the clouds and the sun. The following pokes copy these guardians to Room 63:

    POKE 65520,79: POKE 65521,9: REM left half of upper cloud, column 9 (Hex FFF0: 4F 09)
    POKE 65522,80: POKE 65523,139: REM right half of upper cloud, column 11 (Hex FFF2: 50 8B)
    POKE 65524,81: POKE 65525,26: REM left half of lower cloud, column 26 (Hex FFF4: 51 1A)
    POKE 65526,82: POKE 65527,156: REM right half of lower cloud, column 28 (Hex FFF6: 52 9C)
    POKE 65528,83: POKE 65529,155: REM the sun, column 27 (Hex FFF8: 53 9B)


  2. Secondly, Guardian-Class 0 is defined, but has no instances in Rooms 0-62. It's a small ship - the sprite is unused anywhere else in the game - which fits onto the conveyor (sea) in "The Beach" [63], with a left-boundary of 24, a right-boundary of 30, going left initially.

    POKE 65530,0: POKE 65531,30: REM ship, column 30 (Hex FFFA: 00 1E)
    POKE 65532,255: REM terminate Room 63's guardian-instance list (Hex FFFC: FF)


Willy's New Hat

Willy's New Hat comes with a BASIC loader intended for the original Jet Set Willy, which blindly applies the following pokes:

POKE 36635,239: REM Interface 1 fix
The Bad Pause-Bug Fix
POKE 34476,195: POKE 34477,202: POKE 34478,135: REM bypass colour-code protection
The Official Software Projects Pokes

None of these pokes are necessary for Willy's New Hat, and in fact the official Software Projects POKE 42183,11 moves an item from "Down Down .... Just Wasting Time" [16] to "Get The Point ?" [11], where it is uncollectable; POKE 56876,4 creates an erroneous floor-block in "The Gas Works" [30].

To solve this problem using JSWED, simply load Willy'sNewHat.SNA into JSWED and resave it immediately. This works because JSWED sets the snapshot to run the game immediately, bypassing the BASIC loader.

To get around this problem using an emulator:

The snapshot starts with a 5-way menu. To bypass the application of the above pokes: instead of entering a number from 1 to 5, enter USR 33792 (to get "USR " you have to hold CAPS SHIFT and SYMBOL SHIFT together so that the cursor changes to a flashing "E", then press 'L') to start the game immediately.

(In the RealSpectrum emulator, CAPS SHIFT is represented by the normal shift key, SYMBOL SHIFT by Ctrl.)

If you are already playing Willy's New Hat on an emulator that allows pokes to be applied at runtime, and you encounter the uncollectable item at the top-right of "Get The Point ?" [11], use POKE 42183,80 to move it to "Down Down .... Just Wasting Time" [16].

The reason why it has to be POKE 42183,80 at runtime rather than 42183,16 (the correct static poke) is that the game-engine flags all items as uncollected at the start of the game by adding 64, hence 16 + 64 = 80. Were you to use POKE 42183,16 at runtime (which flags the item as collected), the item would disappear without being added to the items collected.


Dr. Jet Set Willy

The cyan corkscrew in "Rm41" is seventh in the guardian-instance list, so it collides with the arrows (the first four guardian-instances), killing you before it is possible to collect the items.

To solve this problem, the corkscrew must be moved to first place in the guardian-instance list - before the arrows. The solution with the fewest pokes is to swap the corkscrew with the first arrow (i.e. swap the seventh and first entries in the guardian-instance list):

POKE 59888,44: POKE 59889,151: REM corkscrew as 1st guardian-instance (Hex E9F0: 2C 97)
POKE 59900,29: POKE 59901,204: REM arrow as 7th guardian-instance (Hex E9FC: 1D CC)

Eventually the green monster collides with an arrow, but the above pokes are all that are required to make the game completable.


Jet-Set Willy Ivy

The following pokes undo the Bad Pause-Bug Fix, allowing you to pause the game without erroneous colour-attributes appearing on the screen:

POKE 35591,33
POKE 35592,0
POKE 35593,154 (Hex 8B07: 21 00 9A)


Email me