About This File
"Jet Set Willy: Willy's Holiday" is a 1985 game by Adam Britton. It was created using Paul Rhodes' "JetSet Editor".
In the mid-1990s, the game was recovered from the original tape and transferred to emulator format by Richard Hallas. It was released in March/April 1996 as part of the snapshot pack in Issue 5 of the "Emulate!" online magazine. The game was not completable due to a critical bug, discussed by Andrew Broad on his website, the archival version of which can be found here. An 'official' bugfixed version of the game has never been released.
This ZIP package contains a bugfixed version "JSW: Willy's Holiday" in TAP and TZX format, restored from the SNA snapshot from the "Emulate!" online magazine dated 14 October 1995 and converted to tape format in a way that aims to reflect the original loading process.
The following changes have been made:
1. The Bad Pause-Bug Fix was removed by restoring the value of the addresses #8B07 - #8B09 to #21, #00 and #9A, respectively, i.e. the code that resides there in the original "Jet Set Willy". The Bad Pause-Bug Fix overwrites Room 63's guardian instance list in addresses #FFF0 - #FFFF with code to correct the Pause Bug. These data are interpreted as guardian instances which kill the player immediately on entry to "The Beach" (63). Please see Andrew Broad's (archival) page at https://www.oocities.org/andrewbroad/spectrum/willy/bugs.html#pause_bug for more info about the Bad Pause-Bug Fix.
2. The correct code for the guardian instance list in "The Beach" (63) at #FFF0 - #FFFF was copied from the addresses #80F0 - #80FF. While this guardian instance list is damaged in the SNA snapshot in the room data at #FFF0 - #FFFF due to the effects of the Bad Pause-Bug Fix, fortunately, the entire room "The Beach", including these data, happened to be preserved in the SNA snapshot in the Empty Room Screen Buffer at #8000 - #80FF!
3. The fix suggested by Andrew Broad to make the game completable by adding a Water cell at (5,31) in "On The Roof" (17), thus avoiding an infinite-death scenario when entering this room at the top right, was applied. This was done by changing the value of #D12F to #01.
4. The room data for "The Hotel Bathroom" (02) at #C260 - #C2FF were copied from a snapshot taken after starting the game. This is because in Adam's original game this room in its proper shape was installed by the BASIC loader, while the room data at #C260 - #C2FF were incorrect. The room data is now fully correct in the bugfixed version and the modified BASIC loader does not deal with this room any more.
5. The Empty Room Screen Buffer at #8000 - #80FF and the Empty Room Guardian Buffer at #8100 - #813F have been NOPped out (with the value #FF at #8140 terminating the buffer). This change was done for the sake of the 'elegance' of the tape file, as a game loaded from tape should not have any values there other than zeroes before the initial room and its guardians are loaded into the buffers.
6. Thirteen bytes at #8180 - #818C have been NOPped out, for the sake of 'elegance' as well. These addresses (in fact, the whole range from #8141 to #81FF) are unused in the original "Jet Set Willy". It is hard to tell why the code in the SNA file was placed there, but there is certainly no reason for it to appear there in that otherwise unused chunk of code.
7. The following variables: the number of lives remaining (#85CC), Willy's y-coordinate (#85CF), Willy's animation frame (#85D2), the address of Willy's location in the attribute buffer at #5C00 (#85D3 and #85D4), the Rope status indicator (#85D6), the In-game music note index (#85E1) and the Music flags (#85E2) have been NOPped out, for the same reason of 'elegance'. These variables are initiated when the game starts, so their addresses should have a value of #00 right after the game has been loaded from tape. A visible (or rather audible) effect of this is that the in-game music is turned on by default when the game is started (contrary to what happens in the SNA snapshot, where it is turned off).
8. A custom BASIC loader was created. It aims to reflect Adam Britton's original solution to the loading screen, which is a block of compressed code loaded and then decompressed to display the picture it contains on the screen while the rest of the game loads. The code which creates some special effects after the game has loaded, before the program proceeds to the title screen, which in the SNA file resides below #8000, was moved to the #8000 - #FFFF range. In this way, the initial special effects are fully preserved, while the main chunk of the game code is saved as a standard 32768-byte-long block. The code which changes the colour of the letters in the words "Jet Set Willy" on the loading screen, which resides at #792F - #7C58 in the SNA file, was consolidated (by removing the zeroes it had in-between meaningful code) and moved to #9E00 - #9FF7, #96F4 - #97FB and #858B - #85AB, with the corresponding jumps added at #9FF8 - #9FFA and #97FC - #97FE. The subroutine it uses, which resides at #7918 - #792E in the SNA file, was moved to #85AC - #85C2 (but it is still copied to contended memory at #7D00 - #7D10 by the BASIC loader before its execution so that it makes the same sound as in the original snapshot). The code which creates the last special effect by gradually erasing the loading screen was moved from #7D00 - #7D10 in the SNA file to #93BB - #93CC in the bugfixed version. Thus, the code necessary to create the special effects before the game starts was copied to selected areas of memory in the #8000 - #FFFF range unused in "JSW: Willy's Holiday", either because they are unused in the original "Jet Set Willy" (as is the case with the addresses #9EB3 - #9FFF, #96F4 - #97FF and #93BB - #93D0) or because they are used in the original "Jet Set Willy" for things that are not used in "JSW: Willy's Holiday" (as is the case with the addresses #9E00 - #9EB2, which contain the codes for grid locations A0-Q9 related to the colour-scheme protection, or the addresses #858B - #85CA, which contain text messages related to the colour-scheme protection). The remaining bytes in these areas that were not used for the new code (i.e. at #85C3 - #85CA and #93BB - #93D0) were NOPped out for the sake of 'elegance'.
As a result of the changes described above, the player is offered a completable version of Adam Britton's historic game in a choice of two tape formats, preserving the original 'loading flavour' and initial special effects. The game can be completed without any loss of life. Currently, the best known in-game completion time is 8:22 am (please see the video on the JSW Central YouTube channel).
The SNA snapshot of the game from the "Emulate!" online magazine (JSW-WHOL.SNA) is included in the ZIP package offered here for download, for the sake of completeness.
It is possible that one day the file of "JSW: Willy's Holiday" will be recovered (again) from its original tape and transferred to the TZX format. Another bugfixed edition will then be in order. Until then, please enjoy the restored and fixed file included in this ZIP package.
John Elliott's JSWED v. 2.3.7, Andrew Broad's SPECSAISIE 1.3 Beta 5 (the latest publicly available version is v. 1.2) and Claus Jahn's ZX-Blockeditor v. 2.4.3 (a newer version 2.4.3.1 is available were used to prepare this bugfixed version of "JSW: The Continuing Adventures". Richard Dymond (SkoolKid)'s complete JSW disassembly (available in hexadecimal and in decimal) was also very helpful in this endeavour.
The game's page on JSW Central is here.