-
Posts
3,341 -
Joined
-
Last visited
Everything posted by jetsetdanny
-
Coding music in JSW128 and JSW64 games
jetsetdanny replied to jetsetdanny's topic in Designer's Lounge
The actual coding I coded all the tunes in Hervé’s “Welcome to Willy’s Fun Park!” and “Willy in the Islands of Mystery. Part II: The Temple” manually. I coded melodies that I knew — that sounded in my head, so to speak. I would play a note or a sequence of notes on a keyboard — either an actual piano keyboard or a virtual one — determine which note goes next, convert it to a Hex value according to the basic tone chart, determine (by ear) how long it should be, determine a Hex value for its length, and input it in JSWED’s Hex editor at the place in memory where I was coding that tune (more about this later). Then I would play the following note or notes and repeat the process. I usually coded the main melodic line first and then coded the accompaniment (the chords) in pretty much the same way, but this time determining a different length for the chords, because in “my” music each chord typically sounds over a few notes of the main melodic line. I used this virtual piano for this work. Please note that I’m not affiliated with them and have no related interests whatsoever; I’m only sharing my experience, and there are certainly lots of other websites out there that would let you do the same thing. This manual coding of the music was a very slow and time-consuming process. It was probably partly because of my ineptitude — from time to time, I made mistakes and had to correct them later. A lot of the time I didn’t get the length of the notes right and had to go back and correct them. So yes, it was a slow, protracted and error-prone process, but also a rewarding one at the end. It seemed a drudgery at times, but I’m very content with the result and believe it was worth it. It’s up to you to judge, of course. I would assume there are better ways of coding the music, but since I didn’t use them, I cannot share my experience about them. I will just mention that: John Elliott offers links to two apps: MAKETUNE and PLAYTUNE. The first one apparently allows you to “write” a tune. I didn’t try using either one, but if someone has, do let us know how it went. There is a user on this forum who has made an app of his own that facilitates the creation of 128K tunes. I cannot give any details right now, but perhaps he will be kind enough to share it with us. -
Coding music in JSW128 and JSW64 games
jetsetdanny replied to jetsetdanny's topic in Designer's Lounge
Additional instructions I stated before that the clearest picture of a tune in a JSW128 or JSW64 game is that each note is defined by two bytes: the first being the note on the music scale, and the second being its length. This is true, but the “more technical” reality is that, as John Elliott put it, “each channel is a string of commands, which may be followed by one or two parameter bytes.” So, going back to what I described, you could also say that the first byte of each note — if it is a value between #01 and #F8 — is an instruction which means “Play a note,” at the same time defining the tone of this note, and it has to be followed by a second byte (the parameter byte) defining the length of the note, as discussed before. If the first byte is a value outside the #01–#F8 range, then it is an instruction that has another meaning. The meanings of these instructions are as follows: #00 – rest, i.e., don’t play any note, remain silent. The second byte (the parameter byte) is the length of the rest (silence). So, if the “basic unit” of your tune is, for example, #10, and you want silence to last for three times the length of that basic unit, your values in the code will be: #00 #30. #F9 – set the waveform effect (like "W" in the PLAY command). The parameter byte is the waveform <-- I am quoting this from John Elliott’s description. I didn’t use this instruction in my coding and cannot say anything more about it. I believe the “PLAY command” refers to the PLAYTUNE app, but I didn't use it, so I cannot say anything about it. #FA – set the waveform period (like "X" in the PLAY command). The parameter byte is the duration; I don’t know the units. <-- Again, quoting John Elliott. I didn’t use this instruction, and I cannot say anything more about it. #FB – set the volume (like "V" in the PLAY command). The parameter byte is the volume. I didn’t use this instruction myself, but I can say the following: the “standard” tunes present in previously released JSW128 and JSW64 games did use this parameter. For example, the default in-game tune in JW128 games has three channels, and it sets the following values of loudness for each of them: #07 for the first channel (via an instruction at the very start of the channel, before the first note, reading #FB 07), #06 for the second channel (#FB 06), and #08 for the third channel (#FB 08). I inserted this tune in the room called “The Wings” (057) in Willy in the Islands of Mystery. Part II: The Temple (since this room is from Hervé’s game Jet Set Willy in Paris, using the JSW128 game engine and its default in-game tune). In comparison with the tunes I coded for The Temple — which do not have the volume defined via an instruction, so you could say that they play at a default volume — this tune, with channel volumes defined as #07, #06, and #08, sounded very quiet, much too quiet in comparison with my tunes. I therefore adjusted the volume of the three channels to #0B, #0A, and #0C, respectively, and with this, I felt the tune sounded similar in loudness to my tunes that do not have a custom-defined volume. I hope this gives you an idea of what values can be used to set the volume, but of course, experimenting yourself and a trial-and-error approach is probably the best way to establish what suits you most. John Elliott also mentions that: “If you want to use a waveform effect, you should first set the volume to 16, then set the effect, and then the period.” I did not use the waveform effect, so I cannot say any more about it. #FC – I’ll just quote what John says (he gives decimal values; I have converted them to Hex): "djnz" – used to repeat sections. The first and second parameters should both be set to the number of repeats; the third is the relative address of the start of the section: #FC: Section starts at the DJNZ #FB: Section starts 1 byte before the DJNZ #FA: Section starts 2 bytes before the DJNZ ... #80: Section starts 124 bytes before the DJNZ John warns: “I've only seen this used in title-screen tunes. I don't know how it would get on in an in-game tune.” I have tried using this feature for an in-game tune — it could be very helpful if the length of the data you can dedicate to the tune is limited — but I couldn’t get it to work well. I am not saying it doesn’t work, only that I haven’t been able to apply it successfully. I would certainly be interested in hearing the experience of those who manage to achieve it. #FD – return from a sub-tune; it doesn’t have a parameter byte, it’s a one-byte instruction. #FE – play a “sub-tune,” which must end with a “return” instruction (#FD). It has two parameter bytes which are the address of the sub-tune, in standard Z80 format (little-endian). I can see this is applied in the default in-game tune in Jet Set Willy 64 (JSW64). The header of the tune is at #F700–#F705 (in Memory Bank 0). The first channel starts at #F706, and it begins with the instruction #FE 32 F7. This instruction means that a sub-tune is to be played that starts at #F732. Strangely enough, this sub-tune starts at #F732–#F734 with another #FE instruction to play yet another sub-tune starting at #F742. That sub-tune ends with an #FD at #F741. I think — just from looking at the code, without investigating it in detail — that what happens later is that, after playing the sub-tune starting at #F742, the program goes back to #F735, where it starts to play the “original” sub-tune that was called at #F706–#F708. This one, in turn, ends with an #FD instruction at #F750. I assume that after this the player goes back to the initial part of the first channel, i.e., #F709. There, the sub-tune at #F742 is called again, and I assume the program returns from it to #F70C, where it “finally” plays the regular first channel (no more sub-tunes). This sounds quite complicated, but the main point is that it demonstrates that the #FE — play a “sub-tune” instruction — certainly works in in-game tunes. As mentioned before, this tune has only one channel (channels 2 and 3 are immediately terminated by their start addresses pointing to locations holding a value of #FF each), so calling sub-tunes is probably easier to code than if it had three channels and sub-tunes were called on each channel — although I don’t see any theoretical reason why that wouldn’t be possible. #FF – this is the instruction terminating the channel. The tune on each channel must end with this instruction. -
Coding music in JSW128 and JSW64 games
jetsetdanny replied to jetsetdanny's topic in Designer's Lounge
Tune Channels There are three channels in a 128K tune, but you do not have to use all three. You can use just one or two if desired. For channels that are unused, the header still needs to point to a memory location containing #FF (end of tune). For example, the default in-game tune in Jet Set Willy 64 (JSW64) has only one channel. Its header at #F700 in Memory Bank 0 reads: #06 F7 51 F7 52 F7. This means: First channel data starts at #F706; Second channel data starts at #F751 (#FF - it's mute); Third channel data starts at #F752 (#FF - it's mute). In this case, both the addresses #F751 and #F752 hold the same value: #FF. Furthermore, the address #F751 seems to be the end of the first channel, in addition to also being “the entire” second channel (pointing to it as being muted). I believe this same address could also serve as the end of the third channel. If anyone knows of any reason why having a separate ending for the (mute) third channel in the form of another #FF value elsewhere would have any advantages over ending all three channels at the same address, please share this information with us. In most of the tunes I coded, I used the following configuration: First channel: main melody Second channel: supporting notes (chords) harmonising with the main melody Third channel: main melody repeated This approach allowed me to balance the prominence of the main melody against the accompaniment. In practice, I only needed two chunks of data in addition to the header: one chunk for the first and third channels (the main melody) and another for the second channel (the chords). The header pointed to the same address for both the first and third channels and to a different address for the second channel. This method was satisfactory for me, but it is by no means the only way to structure the channels. You may certainly find other arrangements that take full advantage of the three available channels or create different textures for the melody and accompaniment. The reason for my solution described above was also that I did not use the function which sets the volume of the tune. So, let me now describe “the full reality” of the music player in JSW128 and JSW64. -
Coding music in JSW128 and JSW64 games
jetsetdanny replied to jetsetdanny's topic in Designer's Lounge
Coding the 128K music From my perspective, the simplest way to understand 128K music in JSW games is to consider each tune as having a 6-byte header and three channels of music. The header contains the addresses for the start of each channel (three sets of two bytes). Each channel consists of music notes represented by two bytes each: the first byte indicates the note according to the music chart, and the second byte indicates the length of the note. Each channel must be terminated with a value of #FF, which signals the end of the channel. This is a simplified approach that does not fully represent reality, but for me it’s the easiest way to think about 128K music. I will present “the rest of the reality” a little later. The header consists of 6 bytes. The first two show where the start of the first channel of the tune is. The address is shown using the little-endian byte ordering system, where the least significant byte (the "little end") of a multi-byte data value is stored first, at the lowest memory address, making it appear "backwards" to humans. For example, if the first channel starts at #F500, the first two bytes of the tune’s header will be #00 F5. Without checking each one individually, I believe that in the released JSW128 and JSW64 games, the header and the three channels are usually placed together. The default in-game tune in Jet Set Willy 128 starts at #F700 in Memory Bank 0. The header occupies #F700–#F705; the first channel spans #F706–#F736; the second channel spans #F737–#F767; and the third channel spans #F768–#F7AA. In this case, the in-game tune (header plus three channels) forms a continuous block of data. Please note that it does not have to be like this. Since the header defines the start of each channel, the header and channels could be placed anywhere in memory, as long as they are, or end up being, in Memory Bank 0 at runtime. By “end up being”, I mean that the tune can reside in room data stored in another Memory Bank (1, 3, 4, or 6), but when the room is displayed, its data is copied to the current-room buffer in Memory Bank 0, so that the music player effectively uses the data from Memory Bank 0 during its operation. Each note has two bytes. The first byte is the note value according to the music chart. Here is the basic tone chart for 128K games, alongside the 48K equivalents. Generally speaking, you will not need the 48K values if you are coding 128K music, unless you want to use a tune already coded for a 48K game and convert it into a 128K tune — in that case, the double chart presented below can come in handy. Note Value in 128K game Value in 48K game X C 54 10 B 53 11 # 52 12 A 51 13 # 50 14 G 4F 16 # 4E 17 F 4D 18 E 4C 19 # 4B 1B D 4A 1D # 49 1F High C 48 20 B 47 22 # 46 24 A 45 26 # 44 28 G 43 2B # 42 2D F 41 30 E 40 33 # 3F 36 D 3E 39 # 3D 3C Top C 3C 40 B 3B 44 # 3A 48 A 39 4C # 38 51 G 37 56 # 36 5B F 35 60 E 34 66 # 33 6C D 32 73 # 31 79 Middle C 30 80 B 2F 88 # 2E 90 A 2D 99 # 2C A2 G 2B AB # 2A B4 F 29 C0 E 28 CC # 27 D8 D 26 E6 # 25 F2 Bottom C 24 FF B 23 0 # 22 A 21 # 20 G 1F As for note lengths (the second byte of each note), John Elliott explains that the unit used is the “jiffy” (1/50 of a second). In practice, I chose different values for what I call the basic unit depending on the intended speed of the tune. For example: The title-screen tune in Willy in the Islands of Mystery. Part II: The Temple is a slow-rolling piece of music. In this case, I used a value of #18 (24 in decimal) for what I call the “basic unit” of the tune — essentially, a single note. Logically, I then used the following values for notes of other lengths: Half-note: #0C Double-length: #30 Triple-length: #48 Quadruple-length: #60 Hextaple-length: #90 At the other end of the “tune-speed spectrum” is the lively tune playing, for example, in the room “The Blades” (012) in the same game. I used #0A (10 in decimal) as my “basic unit” or single-length note and, correspondingly, the following values for the other lengths: #14 for double-length notes (20 in decimal) #1E for triple-length notes (30 in decimal) #50 for eight-times-length notes (80 in decimal). My advice for anyone wanting to code a tune would be to establish what the best value is for a single note (depending on how fast the tune is supposed to play) and go from there. Once you get this right, establishing the code value of the half-length and multiple-length notes is pure mathematics. -
Overview The objective of this document is to allow, and make it easy for, authors of JSW games to code their own in-game music for games using the JSW128 and JSW64 game engines. I have prepared one document, but I will post it in several parts to make it easier to read and to reply to the various issues I intend to discuss. Credits The following information draws heavily on (and at times quotes directly) information contained in John Elliott’s document “Jet Set Willy 128: Music format” and in his JSWED v2.3.7 manual (a PDF file that can be found in JSWED’s installation folder). Richard Hallas’s document “A Miner Triad. Music in Jet-Set Willy and both versions of Manic Miner” was used for the JSW48 chart tone. Andrew Broad’s specialised program SPECSAISIE was used to obtain the basic tone chart for the 128K games as equivalent to the basic tone chart of the 48K games. Introduction People interested in creating new JSW games using JSWED will likely design games using either the classic 48K game engine (JSW48) or one of the 128K game engines, i.e., JSW128 or JSW64. How to code music for JSW48 games was described very clearly by Richard Hallas in his document mentioned above. More useful information can also be found in this thread. This document discusses the coding of title-screen and in-game music in games using the JSW128 and JSW64 game engines. Most of the information presented here has already been available for a long time in John Elliott’s documents credited above. My aim is to present it in a slightly different way — which I hope makes it easier to understand what should and what can be done. I also share my own experiences and practices from coding the 128K music. Music in JSW128 and JSW64 games is played by default via a built-in music player by Ian Collier. This music player can be replaced in JSWED with Soundtracker by BZYK (Piotr Baczkiewicz). I have had no experience with Soundtracker, so this document refers exclusively to the default music player. My own experiences with coding 128K music relate to two games by Hervé Ast released in 2025. Hervé kindly allowed me to contribute musical arrangements to them. For “Welcome to Willy’s Fun Park!”, I composed both the title-screen tune and the in-game tune (the same in all rooms). In “Willy in the Islands of Mystery. Part II: The Temple”, I expanded my work significantly: I composed multiple in-game tunes and modified the game engine to allow each room to have its own tune, resulting in different tunes in various rooms.
-
Thank you, Gyrominiac, it's much appreciated! 😊 I will repeat what I wrote back on 9 November 2015: "It is a very nice game. I've had a few casual goes at it so far. I intend to play it seriously one day, when my other JSW-related priorities allow." It's good to have the SWF file in my archive for the future 👍
- 7 replies
-
- amstrad
- platform game
-
(and 5 more)
Tagged with:
-
First of all, I want to congratulate Hervé on the release of his sixth JSW game and thank him for making the second part of Willy in the Islands of Mystery! Secondly, I want to thank him very much for adding my name to the title screen. It’s a great honour for me! I’m only a little worried that it may lead to some confusion regarding credits for The Temple. From my perspective, Hervé should always be listed as the (sole) author of the game, and if someone feels a need to mention my contribution, it could be done somewhere on the side, in fine print, and describing it precisely with these words: "contribution" to Hervé’s beautiful game. I would like to share more info and reflections about The Temple, but if it gets too long and becomes boring to some people, I will say this: Don’t bother reading it if you’re not interested, but do download and play Willy in the Islands of Mystery. Part II: The Temple. It’s a beautiful, atmospheric game, it’s relatively easy, and it allows for what I believe is a favourite activity for many fans: exploring the game, just roaming around in this fascinating temple on a mysterious island that Hervé has created. OK, so now, for those who might be interested, some background. As you probably know, Hervé is the author of four excellent JSW games released between 2005 and 2007: Jet Set Willy in Paris, Willy on a Transatlantic Cruise, Escape of the Snails and Willy in the Islands of Mystery. Part I: Exploration. That last game explicitly invited the player, at the end, to play Part II of the game, called The Temple. Sadly for me—and I’m sure for a lot of other fans—that second part never materialised in that era, and Hervé stopped being active on the JSW scene. I did hope that he would come back one day and release The Temple, as well as create his other JSW projects—there were several that he mentioned by name and gave some information about. So it was a great joy for me when he joined this forum in January 2025 and announced that he was back on the scene! 😁 Hervé sent me a file with The Temple in early March 2025. I playtested it and suggested just a couple of minor improvements, which he made. At this point the game was practically ready to be released: 64 new rooms, designed in Hervé’s beautiful, atmospheric style, with various references to aliens, Yetis, etc., typical of his earlier projects. It would already have been a great comeback game, but I wanted to make it even more special and asked Hervé to let me add some elements to it, and he kindly agreed. This is why the game wasn’t released earlier. Since I was committed to other projects, I only started working on The Temple in earnest in August. By that time, Hervé had already made his comeback game release, launching the also excellent Welcome to Willy’s Fun Park!. My main idea for enriching The Temple was to code new music for it and allow the game to have varied music in various groups of rooms. This was something that I had done as a contribution to several games by other authors in recent years (please see this thread if you’re interested), but they were all games using the original JSW game engine (which has come to be known as JSW48, to differentiate it from the later 128K game engines) and its music system. My idea was to put into practice the same principle for 128K games, and indeed The Temple is the very first JSW64 engine game ever that features a selection of in-game tunes (no tune plays in more than four rooms; some rooms have individual tunes related to their particular character). I hope that this does enrich the playing experience as far as audio is concerned. I have also added some special effects to each room using the so-called Patch Vectors (PVs) — pieces of code written especially for the room in question, either (or both) as room-entry PVs (which only kick in once after entering the room) or runtime PVs (which run every time the program goes through the loop). Working on the PVs was a very interesting coding experience for me; I did learn a lot in the process. So now everyone interested can enjoy the second part of Willy in the Islands of Mystery and, as Hervé has mentioned, if you haven’t played it yet, do start with the first part of the game, Exploration, which can be downloaded either from its home page on JSW Corner that Hervé has already indicated or from its page on JSW Central. The Temple has so far been released in English and French. More language versions will be created and released in the near future. And a really wonderful thing is that Hervé is back and working on other projects that I'm sure will be released next year (in 2026) and in the following years ☺️. So download, play and enjoy The Temple! 😊
-
Snowballs 2025 -- I guess I can post a link to it here? :)
jetsetdanny replied to Bob The Polar Bear's topic in Remakes
Thank you, Bob! 👍 -
Thank you for your interest in MM games and for using JSW Central, JianYang! 🙂 Well, there isn't because I have not offered anything like that so far. It did cross my mind that I might make everything that I've got in my JSW Central Download folder available for download as a single ZIP file. I have not decided whether to do it yet. I might do it in the future, but I'm not promising anything right now. *IF* I ever do something like this, it will not be versions of MM (only) or JSW (only), but everything, i.e. game files and my RZX walkthroughs of everything, structured in folders as per their type. For the time being, while I'm not making such a download possible, I can send the zipped Download folder to anyone who is interested. Please let me know - here or by e-mail - if you wish to receive it 🙂. Ethical - for me, no. Legal - if I do decide to publish it, I will do it with an understanding that my action is legal. That's all I can say. No, I wouldn't have any use for it. That would be because: 1) I've obviously got these files myself since they were download from my website; 2) I don't classify games the way you do. Please see my reply to the next point. OK, I can only answer this question indirectly. As explained here, the classification of games on JSW Central is based on the game engine they use. I don't really look at games as being "Manic Miner" or "Jet Set Willy", but rather at what kind of game engine they utilise. It may be a challenging question to define what a "Manic Miner" game is if you don't stick to the game engine criterion. If it were the protagonist, some games that you have included in your list don't have Miner Willy as protagonist (e.g. "Jet Set Luis" or "Eugene Lord of the Bathroom"). If it were the way the game plays, then for example "Clopit!" should definitely be considered a MM game, similarly to a number of other games using the JSW64 engines (obviously "JSW64: Manic Miner", "JSW64: Dragon Manic Miner", "JSW64 Manic Miner: James Bond" and "JSW64: Flash Manic Miner"). But then you can have a game that combines some rooms that play like MM and some rooms that play like JSW - how would you classify that one? So personally, I prefer to stick to the game-engine-based classification. On your list, you've got games that use the MM game engine, but also games that use other game engines. It's a mixture that does not correspond to my classification. Furthermore, you have various editions of the same game mentioned separately, a mere translation ("La miniera 2") mentioned alonside the original game, etc. Of course, I don't mind people creating lists of MM/JSW games based on other classifications that my own (and using JSW Central for it - I'm glad they do!). However, I won't dedicate my (otherwise very limited) time to checking the accuracy of such lists or discussing them in detail. Incidentally, how is your JSW game project going, JianYang? Shall we see it released any time soon? I will be happy to playtest before the release if you should want that 🙂
-
Manic Miner - 2000 is a MM remake that was originally posted on the alt.binaries.comp.sinclair newsgroup. Stuart Brady announced its existence on the MM & JSW Yahoo! Group in January 2000. For many years, nothing was known about the identity of the game's author. The creator’s name was generally spelled "FELL" (all in capitals), likely because it was unclear whether this was a surname or some kind of abbreviation. Fortunately, earlier this month, I was contacted by Mr Tony Fell, who explained that the author of the game was Scottish, born in Wick, Caithness, that his full name was Aaron Fell, and that he worked for CCP Games in Reykjavík, Iceland, on the online game EVE. I have updated the information about "Manic Miner - 2000" on JSW Central accordingly. 🙂
-
Hi Bob, welcome to the forum! 😊 It's good to know you want to stay 🙂 You may be sure that you will not get banned from here, and your input will be most welcome at all times 😁.
-
Today marks the fifth anniversary of the publication of the first videos—starting with walkthroughs of Manic Miner, Jet Set Willy and Jet Set Willy II—on the JSW Central YouTube channel, initially launched as a companion to my JSW Central website. Five years after that modest beginning, the channel now showcases more than 200 videos with walkthroughs of MM and JSW games and variants. As of now, walkthroughs of *all* MM and JSW games for the ZX Spectrum released until June 2025 have been presented on the channel, as well as walkthroughs of the most visually interesting entries among what I classify as “versions and minor mods” of the original MM and JSW. A big thank you to everyone who has subscribed to the JSW Central YouTube channel (close to 500 people now—amazing! 😁). As mentioned in my previous post (sorry for the repetition!) all videos are listed in the “JSW Central videos” section of JSW Central. For each entry, two links are provided: one leading to the YouTube upload, and another to the Internet Archive, where the video can be downloaded in its original Full HD quality or in an AI-upscaled 4K version. These links are also included on each game’s individual page, where the YouTube videos are embedded. While the content of the walkthroughs is the same as in the YouTube uploads, the downloadable versions may include minor refinements, such as adjusted title screens or improved audio synchronisation. Therefore, if you wish to download a JSW Central video, I strongly recommend obtaining the final version from the Internet Archive rather than from YouTube. You can see the whole collection at a glance here. My plans for further development of the JSW Central YouTube channel and of the Internet Archive video collection are as follows: – presenting new MM/JSW games a few months after each release (these will, of course, be very rare, as new games don’t appear that often); – presenting the remaining “versions and minor mods” of the original MM and JSW (from time to time, as showcasing various nearly identical versions in a row wouldn’t be very exciting); – presenting ZX Spectrum platform games that may be of interest to MM/JSW fans (I started with Monty on the Run, as it’s one of my non-MM/JSW favourites). In the future, the presentations on this channel *might* also include MM/JSW and related games for platforms other than the ZX Spectrum, but I’m *not* making a firm promise at this point. And again, to repeat what I posted very recently: I hope this growing collection of videos—based on my RZX walkthroughs, which are also available for download on each game’s page on JSW Central—will serve as a valuable resource for any fans of MM/JSW who are struggling with a game or simply want to see how it can be completed. I also hope it will help promote Miner Willy’s multiple universes to a wider audience 🙂 .
-
I don't think there is any "problem" as such, it's just a question of someone producing a final file in a "release" form, I would say with a Readme with proper credits, etc. I will be happy to prepare such a file when time permits. I haven't had time to do it so far, even though I have been spending most of my spare time on JSW - please have a look here and here for details. Adding some extra touches to Hervé "Willy in the Islands of Mystery (Part II: The Temple)" before its release is my top priority now, so side projects like this one will have to wait for their turn. When I am finally able to work on this (hopefully, early next year), I'm thinking of doing the following: inserting Norman Sword's code (from his file "INVISIBLE.TAP") into an official release of the original "Jet Set Willy" (with Software Projects POKEs added and the colour-code protection removed), adding a custom loading screen and possibly a custom title screen, and creating a Readme where the history of the project will be described and all due credit will be given. Oh, and I'm thinking of calling this variant either "Invisible Willy" or "Willy the Invisible" - I would be interested in hearing your opinion on these options for the title, especially how they sound to native English speakers 🙂 .
-
Thank you so much for the update, Hervé! 👍It all sounds very exciting and I look forward very much indeed to each and every one of your JSW projects! 🙂
-
Willy in the Islands of Mystery : part II : The Temple
jetsetdanny replied to Hervé AST's topic in Remakes
Thank you for this info, Hervé, and, most of all, for letting me add some special effects and music to your wonderful game 🙂. I have indeed been working on it quite intensely in recent months, adding Patch Vector-based extra elements to various rooms. This task hasn't been completed yet, and I still need to code much of the music intended for the game. I do hope to be able to do it in the coming weeks (during which I should have some time off from work if all goes well) and to make the game ready for a pre-Christmas release by Hervé. I wouldn't want to mention any deadlines right now, but I will certainly do my best for the release to happen soon. Once again, thank you so much, Hervé, for letting me enhance "Willy in the Islands of Mystery (Part II: The Temple)" a little bit, and please bear with me while I complete the envisaged additions 🙂 . -
The number of JSW Central videos available to the public has now reached 200 😁. All of the videos are listed in the "JSW Central videos" section of JSW Central. For each video, two links are provided: one leading to YouTube, where the video was originally posted, and another leading to the Internet Archive, where the video can be downloaded in its original Full HD quality or in an AI-upscaled 4K version. These links are also available on each game's individual page, where the YouTube videos are embedded. All videos are available for download, and the final versions are hosted on the Internet Archive. While the content of the walkthroughs remains the same as in the YouTube uploads, the downloadable versions may include minor improvements, such as adjusted title screens or better audio synchronization. Therefore, if you wish to download a JSW Central video, I strongly recommend obtaining the final version from the Internet Archive rather than from YouTube. I hope this growing collection of videos—based on my RZX walkthroughs of the games, which are also available for download on each game's page—will serve as a valuable resource for anyone who is struggling with the game or simply wants to see how it can be completed. I also hope it will help promote Miner Willy's multiple universes to a wider audience. 🙂
-
Thank you so much, Norman Sword! 👍 I would definitely like to record a variant of JSW with an invisible Willy. However, I'm not sure how to proceed now. Lee Prince's "The Invisible Man" is incompletable. You have provided the code that allows to achieve the idea that Lee came up with. With this, I'm tempted to try to fix Lee's version with your code and make it available to anyone who might be interested as "The Invisible Man" - Bugfixed Version, with all due credit given to you in the accompanying Readme file, on this variant's page on JSW Central, in the JSW Central YouTube video description and in any announcements I would make about it. Would you be OK with this solution?
-
Thank you for the code, Norman Sword! I will work on applying it to an actual game file when time permits, hopefully soon.
-
Thank you for taking the time to reply, Norman Sword! 👍 My current coding skills unfortunately aren't enough to write the code you've mentioned (simple as it may be). I did give the issue some more thought, though, and came up with a suggestion for an alternative solution that apparently doesn't work, but I will present it here because I don't understand some of the results of what I've tried to do and would be happy to have some answers. So I thought of the following solution looking at this part of the Main Loop: I thought that after everything that needs to be done with Willy is done (Willy is moved, the items that he is touching are collected), the Screen buffer (room + Willy + entities + items) at #6000 gets copied to the display file at #89F5. My idea was to, at this point, draw Willy to the #6000 Screen buffer again - before the buffer is copied to the display file - but this time using an empty sprite of Willy's. At #89F5, I inserted a call to #9700 where I copied the code from #95C8 ("Check and set the attribute bytes for Willy's sprite in the buffer at 5C00") and the code from #9637 ("Draw Willy to the screen buffer at 6000"), but (at #9772 and #977B in case of "The Nigthmare Room") pointing to an empty sprite instead of Willy's regular sprite. My idea was to erase Willy from the #6000 Screen buffer (by printing him again, but this time using an empty, pixelless sprite) right before the buffer was copied to the display file. The result is that my additional code prints Willy (or whatever sprite I point the instruction to) once again on top of the already printed Willy. It doesn't erase the already printed Willy, it ads pixels on top of him, so to speak, preserving the filled pixels that are already in place. Attached below are three experimental files that illustrate it, called TTMWI (trying to make Willy invisible). In the file "TTMWI (empty)" my additional code at #9700 prints an empty sprite. This results in the game looking normal (as if nothing has changed), because an empty (pixelless) sprite is printed on top of the regular Willy, so all you see is the regular Willy. In the file "TTMWI (bird)" my additional code prints the bird sprite from #BD00. What you see is a mixture of the regular Willy and the (backwards walking) bird, or, in "The Nightmare Room", of the flying pig and the bird (the latter is quite cool, actually). In the file "TTMWI (inverted)" my additional code prints a sprite from #9F00 where I placed an inverted set of Willy's sprites. The result is a solid white block, which demonstrates clearly that the code prints the original Willy's sprite and, on top of it (without erasing it though) an additional sprite selected by my additional code. What I don't understand is why the original Willy's sprite doesn't get erased - why its filled pixels stay in place instead of being wiped out by the empty pixels of the second sprite that is printed by my additional code. An answer to this enigma would be appreciated, as well as an opinion on whether this approach to making Willy invisible could work and, if so, what should be changed in my code to make it work 🙂 . TTMWI (inverted).tap TTMWI (bird).tap TTMWI (empty).tap
-
The Invisible Man is JSW hacked by Lee Prince in 2002 so that that you play as an invisible sprite and guardians cannot therefore collide with you (but precision jumps are very difficult). It was an entry in the comp.sys.sinclair Crap Games Competition 2002. The game has a custom BASIC loader and loading screen, and a modified title screen and scrolling message. The rooms are unmodified. The game is impossible to complete due to the same bugs which make the original JSW incompletable. The official Software Projects POKEs take care of that, so it's not a problem. I would like to record an RZX walkthrough of the game and make a video of it to be placed on the JSW Central YouTube channel. I've started the recording and got as far as "The Beach". However, I've come across a problem I don't seem to be able to solve satisfactorily. Apparently - that's a general remark, concerning all games - Willy has to have some pixels in order to be able to land on a rope. If all frames of Willy's sprite are pixelless - as is the case in The Invisible Man - Willy cannot get hold of a rope, he goes right through it. Hence, rooms where Willy has to use the rope are impossible to complete/pass through. I've had a look at SkoolKid's disassembly and as far as I can tell, the check in the code to see if Willy has landed on the rope is at #92C6 - #92D5: I *think* that the problem must be that the code checks if a given segment of the rope is touching anything else that's been drawn so far, e.g. Willy, but since Willy hasn't been "drawn" (because he has no pixels), the check is negative and so the signal that Willy is on the rope is not set as it should. Please correct me if this explanation is inaccurate. Now the question is: would anyone be able to suggest how to modify the original code so that Willy, while remaining invisible, would be able to get hold of the ropes as usual?
-
I look forward very much to your own game, Byron! 🙂
-
Thanks for this question, SymbolShift. I will have to defer the answer to Andy (Spider) as he is the admin that knows all about the technical side of things here.
-
I am thrilled to announce that a complete archive of the messages once posted on the defunct Manic Miner & Jet Set Willy Yahoo! Group is now available on JSW Central. The Manic Miner & Jet Set Willy Yahoo! Group was founded by Dr Andrew Broad on 20 December 1999 (initially as the Yahoo! MM/JSW Club until March 2002). It existed for over 20 years until 15 December 2020, when Yahoo! shut down all Yahoo! Groups. The Group, which offered a message board, picture galleries and file hosting, quickly became a focal point for the MM/JSW community. Over the years nearly 7,300 messages were posted and by the end of its existence the Group had 742 members. Dr Andrew Broad remained its Owner throughout its entire lifespan. The early 2000s marked the heyday of the Group’s activity while the number of messages declined sharply after 2010. Following a period of near-inactivity in 2013–2014 the Group experienced a modest revival. However Yahoo! first deleted user-created content from its Groups in December 2019 and then closed the service entirely in 2020. The Group’s messages form an important part of the history of the development of MM and JSW games for the ZX Spectrum. They contain insights and information that remain useful even today for those interested in creating such games. For this reason the complete archive of the Group’s messages is preserved on JSW Central. The messages, archived before the Group’s closure, were converted into HTML format for presentation on JSW Central by Michał Gromann. I am very grateful for his assistance in this endeavour 🙏. The archive contains all 7,186 messages that still existed when the Group went offline (the last message visible online was #7256; in total 70 earlier messages had been deleted either by their authors or by the Owner while the Group was still active). In addition the archive includes 37 messages (#7257-#7293) that were never published online and existed only as emails sent to members after December 2019 but before Yahoo! terminated its Groups altogether in December 2020. Some edits were made to this final batch to protect email addresses and conceal certain restricted content. This archive does not preserve the original message threads. Nor does it preserve emoticons (with the exception of the last 37 messages), which appear only as missing image placeholders. You can browse the archive by moving from message to message or by entering a specific message number. Errors will appear if you input a number outside the 0–7293 range, a non-numerical character or the number of a message deleted while the Group was still active. I will be grateful for feedback if you discover any problems such as messages cut off prematurely. I do know that a lot of links in the older messages are messed up (I believe that's due to the original HTML code) and I will correct these progressively. However, if you discover anything else that needs correcting, please let me know here or by email.
-
This sounds great 🙂 . However, I have playtested the game today and my attention was caught by what I consider a significant structural problem. I have engineered a solution to it that I have privately described to Byron and I hope he accepts it. If he does, I will provide him with a modified file tomorrow. He might then want to work on it a little further (e.g. to change some of the things I will propose according to his own taste) and more playtesting will be in order, but this weekend's release will still be on the cards (Byron is a fast worker!). So, to repeat after him: Hopefully available for download soon 🫰